

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Amazon Redshift 資料帶入 AWS Glue Data Catalog
<a name="managing-namespaces-datacatalog"></a>

您可以在 AWS Glue Data Catalog （資料目錄） 中管理 Amazon Redshift 資料倉儲中的分析資料，並統一 Amazon S3 資料湖和 Amazon Redshift 資料倉儲。Amazon Redshift 是 AWS 雲端中全受管的 PB 級資料倉儲服務。Amazon Redshift 資料倉儲是稱為節點**的運算資源的集合，組織成稱為叢集**的群組。每個叢集都會執行 Amazon Redshift 引擎，並包含一或多個資料庫。

在 Amazon Redshift 中，您可以建立 Amazon Redshift 佈建叢集和無伺服器命名空間，並將其註冊至 Data Catalog。透過這樣做，您可以統一 Amazon Redshift 受管儲存 (RMS) 和 Amazon S3 儲存貯體中的資料，並從 Apache Iceberg 相容分析引擎存取資料。

透過註冊命名空間和叢集，您可以提供對資料的存取，而不需要複製或移動資料。如需在 Amazon Redshift 中註冊叢集和命名空間的詳細資訊，請參閱[向 註冊 Amazon Redshift 叢集和命名空間 AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/dg/iceberg-integration-register.html)。

 在 Amazon Redshift 中，您可以透過資料共用或向 Data Catalog 註冊命名空間和叢集來執行資料共用。使用在個別資料庫物件層級操作的資料共用，您必須為每個資料表或檢視啟用共用。相反地，命名空間會在叢集或命名空間層級發佈函數。當您向 Data Catalog 註冊叢集或命名空間時，它中的所有資料庫和資料表都會自動共用，而不需要為個別物件設定共用。

在資料目錄中，您可以為每個命名空間或叢集建立聯合目錄。當目錄指向 Data Catalog *外部的實體時，稱為聯合*目錄。Amazon Redshift 命名空間中的資料表和檢視會列為 Data Catalog 中的個別資料表。您可以將聯合目錄中的資料庫和資料表與同一帳戶內或另一個 Lake Formation 帳戶中選取的 IAM 主體和 SAML 使用者共用。您也可以包含資料列和資料欄篩選條件表達式，以限制對特定資料的存取。如需詳細資訊，請參閱[Lake Formation 中的資料篩選和儲存格層級安全性](data-filtering.md)。

Data Catalog 支援包含目錄、資料庫和資料表 （和檢視） 的三層中繼資料階層。當您向 Data Catalog 註冊命名空間時，Amazon Redshift 資料階層會對應至 Data Catalog 的 3 層階層，如下所示：
+ Amazon Redshift 命名空間會成為 Data Catalog 中的多層級目錄。
+ 相關聯的 Amazon Redshift 資料庫會在 Data Catalog 中註冊為目錄。
+ Amazon Redshift 結構描述會成為 Data Catalog 中的資料庫。
+ Amazon Redshift 資料表會成為 Data Catalog 中的資料表。

![\[顯示 Amazon Redshift 命名空間與 Data Catalog 之間的目錄層級映射。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/rs-catalog-mapping.png)


透過此三層中繼資料階層，您可以使用 Data Catalog 中的 3 部分標記法 - "catalog1/catalog2.database.table" 來存取 Amazon Redshift 資料表。此外，資料團隊可以維護 Amazon Redshift 用來組織 Data Catalog 帳戶中資料表的相同組織。

在 Lake Formation 中，您可以使用 Data Catalog 資源的精細存取控制，安全地管理來自 Amazon Redshift 的資料。透過此整合，您可以從具有常見存取控制機制的單一目錄中管理、保護和查詢分析資料。

如需限制的詳細資訊，請參閱[將 Amazon Redshift 資料倉儲資料帶入 的限制 AWS Glue Data Catalog](notes-ns-catalog.md)。

**Topics**
+ [主要優點](#namespace-publish-benefits)
+ [角色和責任](#namespace-roles-responsibilities)
+ [在 中管理 Amazon Redshift 命名空間的先決條件 AWS Glue Data Catalog](redshift-ns-prereqs.md)
+ [建立 Amazon Redshift 聯合目錄](create-ns-catalog.md)
+ [檢視目錄物件](view-ns-catalog-resources.md)
+ [更新聯合目錄](update-fed-catalog-steps.md)
+ [存取共用聯合目錄](catalog-resource-link.md)
+ [刪除聯合目錄](delete-rs-fed-catalog.md)
+ [查詢聯合目錄](query-redshift-fed-catalog.md)
+ [其他資源](additional-resources-byod.md)

## 主要優點
<a name="namespace-publish-benefits"></a>

 使用 註冊 Amazon Redshift 叢集和命名空間， AWS Glue Data Catalog 並在 Amazon S3 資料湖和 Amazon Redshift 資料倉儲中統一資料，可提供下列優點：
+ **統一查詢體驗** – 使用任何與 Apache Iceberg 相容的查詢引擎來查詢 Amazon Redshift 受管資料和 Amazon S3 儲存貯體中的資料，例如 Amazon EMR Serverless 和 Amazon Athena，而無需移動或複製資料。
+ **跨服務一致的資料存取** – 從不同的 AWS 分析服務存取相同的聯合資料來源時，您不需要更新資料管道中的資料庫和資料表名稱，因為資料來源已在 Data Catalog 中註冊。
+ **精細存取控制 **– 您可以使用精細存取控制許可，套用 Lake Formation 許可來管理對聯合資料來源的存取。

## 角色和責任
<a name="namespace-roles-responsibilities"></a>


|  |  | 
| --- |--- |
| Role | 責任 | 
|  Amazon Redshift 生產者叢集管理員  |  向 Data Catalog 註冊叢集或命名空間。  | 
| Lake Formation 資料湖管理員  |  接受叢集或命名空間邀請、建立聯合目錄，以及將聯合目錄的存取權授予其他主體。  | 
| Lake Formation 唯讀管理員 | 探索聯合目錄，查詢聯合目錄中的 Amazon Redshift 資料表。 | 
| 資料傳輸角色  |  Amazon Redshift 會代表您在 Amazon S3 儲存貯體之間傳輸資料。  | 

以下是提供使用者存取 Amazon Redshift 命名空間的高階步驟：

1.  在 Amazon Redshift 中，生產者叢集管理員向 Data Catalog 註冊叢集或命名空間。

1. 資料湖管理員接受來自 Amazon Redshift 生產者叢集管理員的命名空間邀請，並在 Data Catalog 中建立聯合目錄。

   完成此步驟後，您可以在 Data Catalog 中管理 Amazon Redshift 命名空間目錄。

1. 將許可授予目錄、資料庫和資料表上的使用者。您可以與相同帳戶或其他帳戶中的使用者共用整個命名空間目錄或資料表子集。

# 在 中管理 Amazon Redshift 命名空間的先決條件 AWS Glue Data Catalog
<a name="redshift-ns-prereqs"></a>

1. 建立資料湖管理員 - 建立有權接受命名空間邀請的 IAM 角色，並建立 AWS Glue Data Catalog 物件 （目錄、資料庫、資料表/檢視），並將 Lake Formation 許可授予其他使用者。

   如需建立資料湖管理員的step-by-step說明，請參閱 [建立資料湖管理員](initial-lf-config.md#create-data-lake-admin)。

1. 更新資料湖管理員許可。

    除了資料湖管理員許可之外，資料湖管理員還需要下列許可，才能在 Lake Formation 中接受 Amazon Redshift 命名空間邀請、建立或更新 Data Catalog 資源，以及啟用資料湖存取：

------
#### [ JSON ]

****  

   ```
       {
       "Version":"2012-10-17",		 	 	 
       "Id": "glue-enable-datalake-access",
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "redshift:AssociateDataShareConsumer",
                   "redshift:DescribeDataSharesForConsumer",
                   "redshift:DescribeDataShares",
                   "redshift-serverless:CreateNamespace",
                   "redshift-serverless:CreateWorkgroup",
                   "redshift-serverless:DeleteNamespace",
                   "redshift-serverless:DeleteWorkgroup",
                   "ec2:DescribeAccountAttributes",
                   "ec2:DescribeSubnets",
                   "ec2:DescribeSecurityGroups",
                   "ec2:DescribeAvailabilityZones",
                   "s3:createBucket",
                   "s3:deleteBucket",
                   "s3:putBucketPolicy",
                   "s3:putEncryptionConfiguration",
                   "s3:putLifecycleConfiguration",
                   "s3:putBucketVersioning",
                   "iam:CreateRole"
               ],
               "Resource": "*"
           },
           {
               "Action": [
                   "iam:PassRole"
               ],
               "Effect": "Allow",
               "Resource": "arn:aws:iam::*:role/data transfer role name",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": [
                           "glue.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 如果用於建立聯合目錄的 IAM 角色不是資料湖管理員，您需要授予該角色`Create catalog`許可。

**建立目錄建立者**

   1. 開啟 Lake Formation 主控台，網址為 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   1. 在管理下選擇**管理角色和任務******。

   1. 選擇 **Grant** (授予)。

   1. 在**授予許可**畫面上，選擇 IAM 使用者或角色。

   1. 選取**建立目錄**許可。

   1. 您也可以選擇性地授予可授予的**建立目錄**許可。可授予許可允許目錄建立者將`Create catalog`許可授予其他主體。

   1. 選擇 **Grant** (授予)。

   AWS CLI 授予建立聯合目錄許可的範例。

   ```
   aws lakeformation grant-permissions \
   --cli-input-json \
   '{
       "Principal": {
        "DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/Admin"
       },
       "Resource": {
           "Catalog": {
           }
       },
       "Permissions": [
           "CREATE_CATALOG",
           "DESCRIBE"
       ]
   }'
   ```

1. 建立唯讀管理員角色，以在 Amazon Redshift 查詢編輯器 v2 的資料目錄中探索 Amazon Redshift 聯合目錄。

   若要從 Amazon Redshift 查詢編輯器 v2 查詢聯合目錄中的 Amazon Redshift 資料表，請確定唯讀管理員角色政策包含 Amazon Redshift 服務連結角色的 ARN`AWSServiceRoleForRedshift`。

   ```
    aws lakeformation put-data-lake-settings 
           --region us-east-1 \
           --data-lake-settings \
    '{
      "DataLakeAdmins": [{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/Admin"}],
      "ReadOnlyAdmins":[{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift"}],
      "CreateDatabaseDefaultPermissions":[],
      "CreateTableDefaultPermissions":[],
      "Parameters":{"CROSS_ACCOUNT_VERSION":"4","SET_CONTEXT":"TRUE"}
     }'
   ```

1.  建立 Amazon Redshift 可代表您擔任的資料傳輸角色，以往返 Amazon S3 儲存貯體傳輸資料。

   當您啟用 Athena、Amazon EMR on Amazon EC2 等 Apache Iceberg 相容查詢引擎的資料湖存取，以存取 Data Catalog 中的 Amazon Redshift 資源時，您需要建立具有必要許可的 IAM 角色，才能執行往返 Amazon S3 儲存貯體的資料傳輸。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "glue-enable-datalake-access",
       "Statement": [{
         "Sid": "DataTransferRolePolicy",
           "Effect": "Allow",
           "Action": [ "glue:GetCatalog",
                       "glue:GetDatabase",
                       "kms:GenerateDataKey",
                       "kms:Decrypt"],
           "Resource": "*"
       }
       ]
   }
   ```

------

1.  將下列信任政策新增至 AWS Glue 和 Amazon Redshift 服務的資料傳輸角色，以擔任角色在 Amazon S3 儲存貯體之間傳輸資料。

------
#### [ JSON ]

****  

   ```
             {
       "Version":"2012-10-17",		 	 	 
       "Statement": [{
           "Effect": "Allow",
           "Principal": {
           "Service": [
           "redshift.amazonaws.com",
           "glue.amazonaws.com"
           ]
       },
           "Action": "sts:AssumeRole"
       }]
   }
   ```

------

1.  如果您使用客戶受管金鑰來加密 Amazon Redshift 叢集/命名空間中的資料，請將下列金鑰政策新增至 AWS KMS 金鑰。將帳號取代為有效的 AWS 帳號，並指定資料傳輸角色名稱。根據預設，Amazon Redshift 叢集中的資料會使用 KMS 金鑰加密。Lake Formation 提供了一個可建立用於加密的自訂 KMS 金鑰的選項。如果您使用客戶受管金鑰，則必須將特定金鑰政策新增至金鑰。

   如需有關管理客戶受管金鑰的許可的詳細資訊，請參閱[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "auto-redshift-3",
       "Statement": [{
               "Sid": "RedshiftAllowAccessPolicy",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "kms:CallerAccount": "111122223333",
                       "kms:ViaService": "redshift.us-east-1.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "RedshiftServerlessAllowAccessPolicy",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "kms:CallerAccount": "111122223333",
                       "kms:ViaService": "redshift-serverless.us-east-1.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "DirectMetadataAccess",
               "Effect": "Allow",
               "Principal": {
               "AWS": "arn:aws:iam::111122223333:root"
               },
               "Action": [
                   "kms:Describe*",
                   "kms:Get*",
                   "kms:List*",
                   "kms:RevokeGrant"
               ],
               "Resource": "*"
           },
           {
               "Sid": "GenerateDataKeyDecryptDataTransferRole",
               "Effect": "Allow",
               "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/data-transfer-role-name"
               },
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                   "kms:ViaService": "s3.us-east-1.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

# 建立 Amazon Redshift 聯合目錄
<a name="create-ns-catalog"></a>

本主題說明接受叢集或命名空間邀請、建立聯合多層級目錄，以及將許可授予其他主體所需的步驟。您可以使用 Lake Formation 主控台、 AWS Command Line Interface (AWS CLI) 或 APIs/SDKs來完成這些任務。本主題中的範例顯示同一帳戶中的生產者叢集/命名空間、資料目錄和資料取用者。

若要進一步了解 Lake Formation 跨帳戶功能，請參閱 [Lake Formation 中的跨帳戶資料共用](cross-account-permissions.md)。

**在 Data Catalog 中管理 Amazon Redshift 命名空間**

1. 檢閱命名空間邀請並接受它。

------
#### [ Console ]

   1. 以資料湖管理員身分登入 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。導覽至 **Data** **Catalog **下的目錄頁面。

   1. 檢閱您獲授權存取的命名空間邀請。**狀態**欄指出命名空間目前的參與狀態。**未接受**狀態表示您已新增至命名空間，但您尚未接受邀請或已拒絕邀請。  
![\[具有待定邀請的目錄頁面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/catalog-details.png)

   1. 若要回應命名空間或叢集邀請，請選取邀請名稱，然後選擇**檢閱邀請**。在**接受或拒絕邀請**中，檢閱邀請詳細資訊。選擇**接受**以接受邀請或拒絕****以拒絕邀請。如果您拒絕邀請，則無法存取 命名空間。

------
#### [ AWS CLI ]

   下列範例示範如何檢視、接受和註冊邀請。以有效的 AWS 帳戶 ID 取代 AWS 帳戶 ID。將 取代`data-share-arn`為參考命名空間的實際 Amazon Resource Name (ARN)。

   1. 檢視擱置中的邀請。

      ```
      aws redshift describe-data-shares \
       --data-share-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace' \
      ```

   1. 接受邀請。

      ```
       aws redshift associate-data-share-consumer \
       --data-share-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace' \
       --consumer-arn 'arn:aws:glue:us-east-1:123456789012:catalog'
      ```

   1. 在 Lake Formation 帳戶中註冊叢集或命名空間。使用 [RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html) API 操作在 Lake Formation 中註冊資料共用。 `DataShareArn`是 的輸入參數`ResourceArn`。
**注意**  
這是必要步驟。

      ```
      aws lakeformation register-resource \
       --resource-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace'
      ```

------

1. 建立聯合目錄。

    接受邀請後，您需要在 Data Catalog 中建立聯合目錄，將 Amazon Redshift 命名空間中的物件映射至 Data Catalog。您必須是資料湖管理員或具有建立目錄所需許可的使用者或角色。

------
#### [ Console ]

   1. 接受命名空間**邀請**後，即會顯示**設定目錄詳細資訊**頁面。

   1. 在**設定目錄詳細資訊**頁面上，輸入目錄的唯一名稱。針對目錄名稱使用小寫。目錄名稱長度必須小於或等於 255 個字元。您可以使用此識別符在中繼資料階層 (catalogid.dbName.schema.table).

   1.  輸入目錄的描述。描述長度必須小於或等於 2048 個字元。

   1. 接著，選擇**從 Iceberg 相容引擎存取此目錄**核取方塊，以使用 Apache Iceberg 相容分析引擎存取 Amazon Redshift 資源，例如 Amazon EMR 上的 Athena 和 Apache Spark。

      您不需要啟用資料湖存取權，也能使用 Amazon Redshift 存取聯合目錄。  
![\[具有存取啟用選項的建立目錄頁面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/catalog-access.png)

   1. 為了讓這些查詢引擎能夠讀取和寫入 Amazon Redshift 命名空間， 會使用執行讀取和寫入操作所需的運算和儲存資源來 AWS Glue 建立受管 Amazon Redshift 叢集，而不會影響 Amazon Redshift 資料倉儲工作負載。

      您也需要為 IAM 角色提供在 Amazon S3 儲存貯體之間傳輸資料所需的許可。

   1. 根據預設，Amazon Redshift 叢集中的資料會使用 AWS 受管金鑰加密。Lake Formation 提供了一個可建立用於加密的自訂 KMS 金鑰的選項。如果您使用客戶受管金鑰，則必須將特定金鑰政策新增至金鑰。

       如果您使用客戶受管金鑰來加密 Amazon Redshift 叢集/命名空間中的資料，請選擇**自訂加密設定**。若要使用自訂金鑰，您必須將其他自訂受管金鑰政策新增至 KMS 金鑰。如需詳細資訊，請參閱[在 中管理 Amazon Redshift 命名空間的先決條件 AWS Glue Data Catalog](redshift-ns-prereqs.md)。

------
#### [ AWS CLI ]

    使用下列範例程式碼，使用 將 Amazon Redshift 資料發佈至 Data Catalog 來建立目錄 AWS CLI。

   ```
   aws glue create-catalog 
   --cli-input-json \
   '{
       "Name": "nscatalog", 
       "CatalogInput": {
           "Description": "Redshift federated catalog",
           "CreateDatabaseDefaultPermissions" : [],
           "CreateTableDefaultPermissions": [],
           "FederatedCatalog": {
               "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:11524d7f-f56d-45fe-83f7-d7bb0a4d6d71/ds_internal_namespace",
               "ConnectionName": "aws:redshift"
           },
           "CatalogProperties": {
             "DataLakeAccessProperties" : {
               "DataLakeAccess" : true,
               "DataTransferRole" : "arn:aws:iam::123456789012:role/DataTransferRole"
            } 
          }
       }
   }'
   ```

------

1. 將許可授予您帳戶或外部帳戶中的使用者。

------
#### [ AWS 管理主控台 ]

   1. 選擇**下一步**，將許可授予共用目錄、資料庫和資料表上的其他使用者。

   1.  在**新增許可**畫面上，選擇要授予的委託人和許可類型。  
![\[具有委託人類型和授予選項的目錄許可頁面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/catalog-permissions.png)

      1.  在**主體**區段中，選擇主體類型，然後指定要授予權限的主體。
         + **IAM 使用者和角色**：從 IAM 使用者和角色清單中，選擇一或多名使用者或角色。
         + ** SAML 使用者和群組** – 對於 SAML 和 Amazon Quick 使用者和群組，為透過 SAML 聯合的使用者或群組輸入一或多個 Amazon Resource Name (ARNs)，或為 Amazon Quick 使用者或群組輸入 ARNs。在每個 ARN 後按下 **Enter** 鍵。

           如需如何建構 ARNs 的資訊，請參閱 AWS CLI 授予和撤銷 AWS CLI 命令。
         + **外部帳戶** – 針對 AWS、 AWS 組織或 IAM 主體，輸入一或多個有效的 AWS 帳戶 IDs、組織 IDs、組織單位 IDs 或 IAM 使用者或角色的 ARN。在每個 ID 之後按 Enter。組織 ID 包含「o-」，後面接著 10-32 個小寫字母或數字。組織單位 ID 以「ou-」開頭，後面接著 4-32 個小寫字母或數字 （包含 OU 的根 ID)。此字串後面接著第二個「-」破折號和 8 到 32 個額外的小寫字母或數字。

      1.  在**許可**區段中，選取權限和可授予的權限。

         在**目錄權限**下，選取要授予的一或多個權限。在**可授予許可**下，選取授予收件人可以授予其 AWS 帳戶中其他委託人的許可。當您從外部帳戶授予 IAM 主體權限時，此選項不受支援。

         選擇**超級使用者**，將無限制許可授予使用者目錄中的資源 （資料庫、資料表、檢視）。

   1. 選擇**新增**。

------
#### [ AWS CLI ]

   使用下列範例來使用 授予目錄、資料庫和資料表許可 AWS CLI：
   + 下列範例顯示如何授予聯合目錄的許可。

     ```
     aws lakeformation grant-permissions
      --cli-input-cli-json \
        '{
              "Principal": {
                   "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
               },
               "Resource": {
                    "Catalog": {
                          "Id": "123456789012:nscatalog"
                     }
                 },
                 "Permissions": [
                        "DESCRIBE","CREATE_CATALOG"
                  ],
                 "PermissionsWithGrantOption": [
                  ]
         }'
     ```
   + 使用下列範例授予資料庫的許可。

     ```
     aws lakeformation grant-permissions \
       --cli-input-json \
               '{
                   "Principal": {
                       "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
                   },
                   "Resource": {
                       "Database": {
                           "CatalogId": "123456789012:nscatalog/dev",
                           "Name": "public"
                       }
                   },
                   "Permissions": [
                       "ALL"
                   ]
               }'
     ```
   +  下列範例顯示如何授予 Amazon Redshift 資料庫中資料表的許可。

     ```
     aws lakeformation grant-permissions \
       --cli-input-json \
             '{
                 "Principal": {
                     "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
                 },
                 "Resource": {
                     "Table": {
                         "CatalogId": "123456789012:nscatalog2/dev",
                         "DatabaseName": "public",
                         "TableWildcard" : {}
                     }
                 },
                 "Permissions": [
                     "ALL"
                 ]
             }'
     ```

------

1. 選擇**下一步**以檢閱目錄詳細資訊並建立聯合目錄。新建立的聯合目錄和目錄物件會出現在**目錄**頁面中。

   Amazon Redshift 聯合目錄會參考 `catalogID = 123456789012:Redshift-federated catalog id`。

# 檢視目錄物件
<a name="view-ns-catalog-resources"></a>

 建立聯合目錄之後，您可以使用 Lake Formation 主控台或 檢視目錄中的物件 AWS CLI。

------
#### [ AWS 管理主控台 ]

1. 開啟 Lake Formation 主控台，網址為 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在資料**目錄**下選擇目錄。

1. 從目錄頁面上的清單中選擇聯合**目錄**。

1.  目錄摘要頁面會顯示您擁有許可的目錄物件 （資料庫和資料表）。**許可**索引標籤顯示已獲得這些物件許可的 IAM 主體。

------
#### [ AWS CLI ]
+ 下列 AWS CLI 範例示範如何請求最上層目錄。

  ```
  aws glue get-catalog \
  --catalog-id 123456789012:nscatalog
  ```

  *回應*

  ```
  {
      "Catalog": {
          "CatalogId": "123456789012:nscatalog",
          "Name": "nscatalog",
          "ResourceArn": "arn:aws:glue:us-east-1:123456789012:catalog/nscatalog",
          "Description": "Redshift published Catalog",
          "CreateTime": "2024-09-05T14:49:16-07:00",
          "FederatedCatalog": {
              "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:b1234589-e823-4a14-ad8e-077085540a50/ds_internal_namespace",
              "ConnectionName": "aws:redshift"
          },
          "CatalogProperties": {
              "DataLakeAccessProperties": {
                  "DataLakeAccess": true,
                  "DataTransferRole": "arn:aws:iam::123456789012:role/DataTransferRole",
                  "KmsKey": "AWS_OWNED_KMS_KEY",
                  "ManagedWorkgroupName": "123456789012:nscatalog",
                  "ManagedWorkgroupStatus": "AVAILABLE",
                  "RedshiftDatabaseName": "dev"
              }
          },
          "CatalogIdentifier": "e2309c2c2fb048f1a3069dfdc1c7883e",
          "CreateTableDefaultPermissions": [],
          "CreateDatabaseDefaultPermissions": []
      }
  }
  ```
+ 下列範例顯示如何請求帳戶中的所有目錄。

  ```
  aws glue get-catalogs \
    --recursive
  ```
+ 下列範例請求顯示如何取得 Amazon Redshift 資料庫層級目錄。

  ```
  aws glue get-catlog \
   --catalog-id 123456789012:namespace catalog name/redshift database name
  ```
+ 下列範例請求顯示如何取得 Amazon Redshift 資料庫層級目錄中的資料庫。

  ```
  aws glue get-databases \
  --catalog-id 123456789012:namespace catalog name/redshift database name
  ```
+  下列範例請求顯示如何在目錄中取得 Amazon Redshift 資料表。

  ```
  aws glue get-table \
    --catalog-id 123456789012:parent catalog name/redshift database \
    --database-name redshift schema name \
    --name table name
  ```
+  下列範例顯示如何從 Amazon Redshift 資料庫取得所有資料表。

  ```
  aws glue get-tables \
   --catalog-id 123456789012:namespace catalog name/redshift database name \
   --database-name RS schema name
  ```

------

# 更新聯合目錄
<a name="update-fed-catalog-steps"></a>

您可以使用 Lake Formation 主控台、 AWS CLI 或 [UpdateCatalog](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateCatalog.html) API 操作，在 Data Catalog 中更新 Amazon Redshift 聯合目錄。

------
#### [ AWS 管理主控台 ]

請依照下列步驟，使用 Lake Formation 主控台更新您的聯合型錄。

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台。

1. 在左側導覽窗格中，選擇 Data **Catalog **下的目錄。 ****

1. 在**目錄**頁面上，選擇您要更新的 Amazon Redshift 聯合目錄。

1. 在**動作**下，選擇**編輯**。

1. 在**設定目錄詳細資訊**畫面的**從引擎存取**區段下，選擇**從 Iceberg 相容引擎存取此目錄**。勾選此選項將啟用 Apache Iceberg 相容查詢引擎的資料湖存取。

1. 接著，建立新的 IAM 角色，或選擇具有 政策的現有 IAM 角色，該政策授予許可，以執行進出 Amazon S3 儲存貯體的資料傳輸。

   如需許可的詳細資訊，請參閱 [在 中管理 Amazon Redshift 命名空間的先決條件 AWS Glue Data Catalog](redshift-ns-prereqs.md)。

1. 根據預設，Amazon Redshift 叢集中的資料會使用 加密 AWS 受管金鑰。如果您選擇使用客戶受管金鑰加密資料，請建立 KMS 金鑰或選擇具有 [在 中管理 Amazon Redshift 命名空間的先決條件 AWS Glue Data Catalog](redshift-ns-prereqs.md)區段中定義之許可的現有金鑰。

1. 選擇**儲存**。

   成功完成時，**目錄詳細資訊**頁面會顯示狀態為「成功」的受管工作群組名稱。

------
#### [ AWS CLI ]

以下是停用資料湖存取的 `update-catalog` CLI 輸入範例，方法是將 `DataLakeAacess` 參數值設定為 `false`。

```
aws glue update-catalog  --cli-input-json \
'{
    "Name": "nscatalog", 
    "CatalogInput": {
        "Description": "Redshift published catalog",
        "CreateDatabaseDefaultPermissions" : [],
        "CreateTableDefaultPermissions": [],
        "FederatedCatalog": {
            "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:11524d7f-f56d-45fe-83f7-d7bb0a4d6d71/ds_internal_namespace",
            "ConnectionName": "aws:redshift"
        },
        "CatalogProperties": {
          "DataLakeAccessProperties" : {
            "DataLakeAccess" : false
        } 
       }
    }
}'
```

------

# 存取共用聯合目錄
<a name="catalog-resource-link"></a>

 AWS Lake Formation 跨帳戶功能可讓使用者安全地跨多個 AWS 帳戶、 AWS 組織共用分散式資料湖，或直接與另一個帳戶中的 IAM 主體共用，以便精細存取中繼資料和基礎資料。

Lake Formation 使用 AWS Resource Access Manager (AWS RAM) 服務來促進資源共用。當您與其他帳戶共用目錄資源時， 會 AWS RAM 傳送邀請給承授者帳戶，以接受或拒絕資源授予。

Amazon Athena 和 Redshift Spectrum 等整合式分析服務需要資源連結，才能在查詢中包含共用資源。委託人需要在 中建立資源連結 AWS Glue Data Catalog ，以從另一個資源共用資源 AWS 帳戶。如需資源連結的詳細資訊，請參閱[資源連結如何在 Lake Formation 中運作](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html)。

*目錄連結容器*是 Data Catalog 物件，參考來自其他 AWS 帳戶的本機或跨帳戶聯合資料庫層級目錄。您也可以在目錄連結容器中建立資料庫連結和資料表連結。當您建立資料庫連結或資料表連結時，您必須指定位於相同目標 Amazon Redshift 資料庫層級目錄 (Amazon Redshift 資料庫） 下的目標資源。

若要建立目錄連結容器，您需要 Lake Formation `CREATE_CATALOG`或 `glue:CreateCatalog`許可。

 您必須擁有**跨帳戶版本設定**第 4 AWS 帳戶版或更新版本，才能跨 共用聯合目錄中的資料庫或資料表。

## 建立跨帳戶聯合目錄的目錄連結容器
<a name="create-resource-link-catalog"></a>

您可以使用 AWS Lake Formation 主控台、`CreateCatalog`API 或 AWS Command Line Interface ()， AWS Glue 建立指向任何 AWS 區域中 Redshift 資料庫層級聯合目錄的目錄連結容器AWS CLI。

**建立目錄連結容器至共用目錄 （主控台）**

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。以具有 Lake Formation `CREATE_CATALOG`許可的委託人身分登入。

1. 在導覽窗格中，選擇**目錄**，然後選擇**建立目錄**。

1. 在**設定目錄詳細資訊**頁面上，提供下列資訊：  
**名稱**  
輸入與目錄名稱遵守相同規則的名稱。名稱可以與目標共用目錄相同。  
**Type**  
選擇**目錄連結容器**做為目錄類型。  
**來源**  
選擇 `Redshift`。  
**目標 Redshift 目錄**  
選取 Redshift 資料庫層級聯合目錄，或從清單中選擇本機 （擁有） 目錄。  
此清單包含與您的帳戶共用的所有目錄。請注意，目錄擁有者帳戶 ID 會與每個目錄一起列出。如果您沒有看到您知道已與 帳戶共用的目錄，請檢查下列項目：  
   + 如果您不是資料湖管理員，請檢查資料湖管理員是否授予目錄上的 Lake Formation 許可。
   + 如果您是資料湖管理員，而且您的帳戶與授予帳戶不在同一個 AWS 組織中，請確定您已接受目錄的 AWS Resource Access Manager (AWS RAM) 資源共享邀請。如需詳細資訊，請參閱[從 接受資源共享邀請 AWS RAM](accepting-ram-invite.md)。
透過主控台建立目錄連結容器時，嘗試選取跨帳戶 **Redshift 目錄時，可能會顯示目標** Redshift 目錄下拉式清單。 `No matches`雖然有此顯示，但您可以在輸入欄位中輸入 Amazon Redshift 聯合資料庫層級目錄 (Amazon Redshift 資料庫） 的目標 ARN，表單仍會正常運作。例如：`arn:aws:glue:us-east-1:123456789012:catalog/federated-catalog-redshift/dev`。  
發生此行為是因為主控台只能搜尋目前登入帳戶中的潛在候選者。下拉式清單旨在作為自動完成功能，但您仍然可以手動輸入 ARNs 以進行跨帳戶存取。

1. 為了讓 Apache Iceberg 查詢引擎能夠讀取和寫入 Amazon Redshift 命名空間， 會使用執行讀取和寫入操作所需的運算和儲存資源來 AWS Glue 建立受管 Amazon Redshift 叢集，而不會影響 Amazon Redshift 資料倉儲工作負載。您需要為 IAM 角色提供將資料傳輸到 Amazon S3 儲存貯體，以及從該儲存貯體傳輸資料所需的權限。

1. 選擇**下一步**。

1. （選用） 選擇**新增許可**，將許可授予其他委託人。

   不過，授予目錄連結容器的許可並不會授予目標 （連結） 目錄的許可。您必須分別授予目標目錄的許可，目錄連結才能在 Athena 中顯示。

1. 接著，檢閱目錄連結容器詳細資訊，然後選擇**建立目錄**。

   然後，您可以在**目錄**頁面下檢視連結容器名稱。

   現在，您可以在目錄連結容器中建立資料庫連結和資料表連結，以啟用查詢引擎的存取。

**建立目錄連結容器 CLI 範例**
+ 在下列範例中， `TargetRedshiftCatalog` 物件會指定 Amazon Redshift 聯合資料庫層級目錄 (Amazon Redshift 資料庫） 的 arn。建立目錄連結容器時，`DataLakeAccess`必須啟用 。

  ```
  aws glue create-catalog \
    --cli-input-json 
      '{
          "Name": "linkcontainer", 
          "CatalogInput": {
              "TargetRedshiftCatalog": {
                 "CatalogArn": "arn:aws:us-east-1:123456789012:catalog/nscatalog/dev"
               },
              "CatalogProperties": {
                "DataLakeAccessProperties" : {
                  "DataLakeAccess" : true,
                  "DataTransferRole" : "arn:aws:iam::111122223333:role/DataTransferRole"
               } 
             }
          }
      }'
  ```

## 在目錄連結容器下建立資源連結
<a name="create-db-table-link"></a>

 您可以在目錄連結容器下建立資料庫和資料表連結的資源連結。當您建立資料庫資源連結或資料表資源連結時，必須指定位於連結容器指向的相同目標 Amazon Redshift 資料庫層級目錄 (Amazon Redshift 資料庫） 下的目標資源。

您可以使用 AWS Lake Formation 主控台、API 或 AWS Command Line Interface () 建立共用 Amazon Redshift 資料庫或資料表的資源連結AWS CLI。
+ 如需詳細說明，請參閱 [建立共用 Data Catalog 資料庫的資源連結](create-resource-link-database.md)。

  以下是在目錄連結容器下建立資料庫資源連結 AWS CLI 的範例。

  ```
  aws glue create-database \
    --cli-input-json \
      '{
          "CatalogId": "111122223333:linkcontainer",
          "DatabaseInput": {
              "Name": "dblink",
               "TargetDatabase": {
                 "CatalogId": "123456789012:nscatalog/dev",
                  "DatabaseName": "schema1"
               }
          }
      }'
  ```
+ 若要在目錄連結容器下建立資料表資源連結，您必須先在本機中建立 AWS Glue 資料庫 AWS Glue Data Catalog ，以包含資料表資源連結。

  如需建立共用資料表的資源連結的詳細資訊，請參閱 [建立共用 Data Catalog 資料表的資源連結](create-resource-link-table.md)。
  +  建立資料庫以包含資料表資源連結範例

    ```
    aws glue create-database \
      --cli-input-json \
          '{
              "CatalogId": "111122223333:linkcontainer",
              "DatabaseInput": {
                  "Name": "db1",
                  "Description": "creating parent database for table link"
              }
          }'
    ```
  +  建立資料表資源連結範例

    ```
    aws glue create-table \
      --cli-input-json \
        '{
            "CatalogId": "111122223333:linkcontainer",
             "DatabaseName": "db1",
            "TableInput": {
                "Name": "tablelink",
                "TargetTable": {
                    "CatalogId": "123456789012:nscatalog/dev",
                   "DatabaseName": "schema1", 
                    "Name": "table1"
                 }
            }
        }'
    ```

# 刪除聯合目錄
<a name="delete-rs-fed-catalog"></a>

 您可以使用 AWS Glue Data Catalog `glue:DeleteCatalog`操作或 AWS Lake Formation 主控台刪除您在 中建立的聯合目錄。

**刪除聯合目錄 （主控台）**

1. 開啟 Lake Formation 主控台，網址為 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在導覽窗格中，選擇資料**目錄**下的目錄。 ****

1. 從目錄清單中選擇要刪除的目錄。

1. 選擇從**動作****刪除**。

1. 選擇**捨**棄以確認，聯合目錄將從資料目錄中刪除。  
![\[刪除目錄確認。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/delete-fed-catalog.png)

**刪除聯合目錄 (CLI)**
+ 

  ```
  aws glue delete-catalog 
   --catalog-id 123456789012:catalog name
  ```

# 查詢聯合目錄
<a name="query-redshift-fed-catalog"></a>

將許可授予其他主體之後，他們可以使用 Amazon Redshift、Amazon EMR Amazon Athena、 和 AWS Glue ETL 登入 SQL 工具，登入並開始查詢聯合目錄中的資料表。

 如需 AWS Glue Data Catalog 使用 Apache Iceberg Rest 延伸端點或獨立 Spark 應用程式連線至 的詳細資訊，請參閱[《 開發人員指南》中的存取 AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/access_catalog.html)一節。 AWS Glue 

您可以使用資料定義語言 (DDL) 查詢，在 Amazon EMR 上使用 Apache Spark 在資料庫中建立和管理資料表。若要在 Amazon Redshift 資料庫中建立和刪除資料表，委託人必須具有 Lake Formation `Create table`、 `Drop`許可。

 如需授予 Data Catalog 許可的詳細資訊，請參閱 [授予 Data Catalog 資源的許可](granting-catalog-permissions.md)。

如需從 查詢目錄資源的詳細資訊 Amazon Athena，請參閱《Amazon Athena 使用者指南》中的[AWS Glue Data Catalog 從 查詢 Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/gdc-register.html)。

# 其他資源
<a name="additional-resources-byod"></a>

您可以使用 [Amazon SageMaker Lakehouse](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse.html) 來統一存取資料倉儲和資料湖中的資料。透過 SageMaker Lakehouse，您可以透過開放的 Apache Iceberg REST API 使用偏好的分析、機器學習和商業智慧引擎，以協助確保以一致、精細的存取控制安全地存取資料。
+ [Amazon SageMaker 研討會 ](https://catalog.us-east-1.prod.workshops.aws/workshops/107188af-3663-4bbf-bb35-93d514d406da/en-US/03lakehouse)
+ [ 使用 Amazon SageMaker Lakehouse 簡化企業的資料存取 ](https://aws.amazon.com/blogs/big-data/simplify-data-access-for-your-enterprise-using-amazon-sagemaker-lakehouse/)