访问共享的联合目录 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

访问共享的联合目录

Amazon Lake Formation 跨账户功能允许用户在多个 Amazon Web Services 账户 Amazon 组织之间安全地共享分布式数据湖,或者直接与其他账户中的 IAM 委托人共享分布式数据湖,从而提供对元数据和底层数据的精细访问权限。

Lake Formation 使用 Amazon Resource Access Manager (Amazon RAM) 服务来促进资源共享。当您与其他账户共享目录资源时, Amazon RAM 会向被授权者账户发送接受或拒绝资源授予的邀请。

Amazon Athena 和 Redshift Spectrum 等集成分析服务需要资源链接才能在查询中包含共享资源。委托人需要在自己的资源中创建指 Amazon Glue Data Catalog 向其他 Amazon Web Services 账户共享资源的资源链接。有关资源链接的更多信息,请参阅 Lake Formation 中资源链接的工作原理

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

要创建目录链接容器,您需要 Lake Formation CREATE_CATALOGglue:CreateCatalog 权限。

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

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

创建指向共享目录的目录链接容器(控制台)
  1. 打开 Amazon Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/。以拥有 Lake Formation CREATE_CATALOG 权限的主体身份登录。

  2. 在导航窗格中,选择目录,然后选择创建目录

  3. 设置目录详细信息页面上,提供以下信息:

    Name

    输入一个与目录名称遵循相同规则的名称。该名称可以与目标共享目录的名称相同。

    Type

    选择目录链接容器作为目录类型。

    来源

    选择 Redshift

    目标 Redshift 目录

    选择 Redshift 数据库级联合目录或从列表中选择本地(自有)目录。

    列表中列出了与您的账户共享的所有目录。记下与每个目录一起列出的目录所有者账户 ID。如果您未看到您知道已与您的账户共享的目录,请检查以下内容:

    • 如果您不是数据湖管理员,请检查数据湖管理员是否向您授予了对该目录的 Lake Formation 权限。

    • 如果您是数据湖管理员,并且您的账户与授予账户不在同一个 Amazon Organizations 中,请确保您已接受关于该目录的 Amazon Resource Access Manager (Amazon RAM)资源共享邀请。有关更多信息,请参阅 接受来自 Amazon RAM 的资源共享邀请

    注意

    通过控制台创建目录链接容器时,如果尝试选择跨账户 Redshift 目录,目标 Redshift 目录下拉列表可能会显示 No matches。尽管显示了此内容,但您仍可以在输入字段中手动输入 Amazon Redshift 数据库级联合目录(Amazon Redshift 数据库)的目标 ARN,并且该表单仍然可以正常工作。例如:arn:aws:glue:us-east-1:123456789012:catalog/federated-catalog-redshift/dev

    之所以出现这种情况,是因为控制台只能在当前登录的账户中搜索可能的候选项。下拉列表旨在作为自动完成功能,但您仍然可以手动输入 ARNs 以进行跨账户访问。

  4. 要使 Apache Iceberg 查询引擎能够读取和写入亚马逊 Redshift 命名空间,请 Amazon Glue 创建一个托管的 Amazon Redshift 集群,该集群具有在不影响 Amazon Redshift 数据仓库工作负载的情况下执行读写操作所需的计算和存储资源。您需要为 IAM 角色提供向 Amazon S3 存储桶或从中传输数据所需的权限。

  5. 选择下一步

  6. (可选)选择添加权限以向其他主体授予权限。

    但是,授予对目录链接容器的权限不会授予对目标(已链接)目录的权限。您必须单独授予对目标目录的权限,才能在 Athena 中显示目录链接。

  7. 接下来,查看目录链接容器详细信息,并选择创建目录

    然后,您可以在目录页面中查看链接容器名称。

    现在,您可以在目录链接容器中创建数据库链接和表链接,以允许通过查询引擎进行访问。

创建目录链接容器 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"
                 } 
               }
            }
        }'
              

您还可以在目录链接容器中创建数据库资源链接和表资源链接。创建数据库资源链接或表资源链接时,必须指定位于同一个目标 Amazon Redshift 数据库级目录(Amazon Redshift 数据库)下面,链接容器所指向的目标资源。

您可以使用 Amazon Lake Formation 控制台、API 或 Amazon Command Line Interface ()Amazon CLI创建指向共享的 Amazon Redshift 数据库或表的资源链接。

  • 有关详细说明,请参阅创建指向共享数据目录数据库的资源链接

    以下是在目录链接容器下创建数据库资源链接的 Amazon CLI 示例。

    aws glue create-database \
      --cli-input-json \
        '{
            "CatalogId": "111122223333:linkcontainer",
            "DatabaseInput": {
                "Name": "dblink",
                 "TargetDatabase": {
                   "CatalogId": "123456789012:nscatalog/dev",
                    "DatabaseName": "schema1"
                 }
            }
        }'
            
  • 要在目录链接容器下创建表资源链接,需要先在本地 Amazon Glue Data Catalog 创建一个包含表资源链接 Amazon Glue 的数据库。

    有关创建共享表的资源链接的更多信息,请参阅创建指向共享数据目录表的资源链接

    • 创建数据库来包含表资源链接的示例

      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"
                   }
              }
          }'