访问共享的联合目录 - AWS Lake Formation

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

访问共享的联合目录

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 中资源链接的工作原理

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

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

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

您可以使用 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/。以拥有 Lake Formation CREATE_CATALOG 权限的主体身份登录。

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

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

    Name

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

    Type

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

    来源

    选择 Redshift

    目标 Redshift 目录

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

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

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

    • 如果您是数据湖管理员,并且您的账户与授予账户不在同一个 AWS Organizations 中,请确保您已接受关于该目录的 AWS Resource Access Manager (AWS RAM)资源共享邀请。有关更多信息,请参阅 接受来自 AWS 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 命名空间,请 AWS 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 数据库)下面,链接容器所指向的目标资源。

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

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

    以下是在目录链接容器下创建数据库资源链接的 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 的数据库。

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

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

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