

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 访问共享的联合目录
<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)。

*目录链接容器*是一个数据目录对象，它引用来自其他账户的本地或跨账户联合数据库级目录。 AWS 您还可以在目录链接容器中创建数据库链接和表链接。创建数据库链接或表链接时，必须指定位于同一个目标 Amazon Redshift 数据库级目录（Amazon Redshift 数据库）下的目标资源。

要创建目录链接容器，您需要 Lake Formation `CREATE_CATALOG` 或 `glue:CreateCatalog` 权限。

 您必须具有**跨账户版本设置**版本 4 或更高版本，才能跨 AWS 账户越多个共享联合目录中的数据库或表。

## 创建指向跨账户联合目录的目录链接容器
<a name="create-resource-link-catalog"></a>

您可以使用 AWS Lake Formation 控制台、 AWS Glue `CreateCatalog` API 或 () 创建指向任何 AWS 地区的 Redshift 数据库级联合目录的目录链接容器。 AWS Command Line Interface AWS CLI

**创建指向共享目录的目录链接容器（控制台）**

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以拥有 Lake Formation `CREATE_CATALOG` 权限的主体身份登录。

1. 在导航窗格中，选择**目录**，然后选择**创建目录**。

1. 在**设置目录详细信息**页面上，提供以下信息：  
**Name**  
输入一个与目录名称遵循相同规则的名称。该名称可以与目标共享目录的名称相同。  
**Type**  
选择**目录链接容器**作为目录类型。  
**来源**  
选择 `Redshift`。  
**目标 Redshift 目录**  
选择 Redshift 数据库级联合目录或从列表中选择本地（自有）目录。  
列表中列出了与您的账户共享的所有目录。记下与每个目录一起列出的目录所有者账户 ID。如果您未看到您知道已与您的账户共享的目录，请检查以下内容：  
   + 如果您不是数据湖管理员，请检查数据湖管理员是否向您授予了对该目录的 Lake Formation 权限。
   + 如果您是数据湖管理员，并且您的账户与授予账户不在同一个 AWS Organizations 中，请确保您已接受关于该目录的 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 查询引擎能够读取和写入亚马逊 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 ()AWS CLI创建指向共享的 Amazon Redshift 数据库或表的资源链接。
+ 有关详细说明，请参阅[创建指向共享数据目录数据库的资源链接](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 Data Catalog 创建一个包含表资源链接 AWS Glue 的数据库。

  有关创建共享表的资源链接的更多信息，请参阅[创建指向共享数据目录表的资源链接](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"
                 }
            }
        }'
    ```