创建 Amazon Redshift 联合目录 - AWS Lake Formation

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

创建 Amazon Redshift 联合目录

本主题介绍接受集群或命名空间邀请、创建联合多级目录以及向其他主体授予权限所需遵循的步骤。你可以使用 Lake Formation 控制台、 AWS Command Line Interface (AWS CLI) 或 APIs /来完成这些任务SDKs。本主题中的示例显示了同一个账户中的创建器集群/命名空间、Data Catalog 和数据使用者。

要了解有关 Lake Formation 跨账户功能的更多信息,请参阅Lake Formation 中的跨账户数据共享

在 Data Catalog 中管理 Amazon Redshift 命名空间
  1. 查看命名空间邀请并接受邀请。

    Console
    1. 以数据湖管理员的身份登录 Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/。导航到数据目录下的目录页面。

    2. 查看您已获授权可以访问的命名空间邀请。状态列表示您当前参与命名空间的状态。未接受状态表示您已添加到命名空间,但尚未接受或已拒绝邀请。

      带有待处理邀请的目录页面。
    3. 要响应命名空间或集群邀请,请选择邀请名称,然后选择查看邀请。在接受或拒绝邀请中,查看邀请详细信息。选择接受接受邀请,或选择拒绝拒绝邀请。如果您拒绝邀请,就无法访问该命名空间。

    AWS CLI

    以下示例显示如何查看、接受和注册邀请。将 AWS 账户 身份证替换为有效的 AWS 账户 身份证。将 data-share-arn 替换为引用命名空间的实际 Amazon 资源名称(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' \
    2. 接受邀请。

      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'
    3. 在 Lake Formation 账户中注册集群或命名空间。使用 RegisterResourceAPI 操作在 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'
  2. 创建联合目录。

    接受邀请后,您需要在 Data Catalog 中创建一个联合目录,以便将 Amazon Redshift 命名空间中的对象映射到 Data Catalog。您必须是数据湖管理员或具有创建目录所需权限的用户或角色。

    Console
    1. 接受命名空间邀请后,将显示设置目录详细信息页面。

    2. 设置目录详细信息页面上,输入目录的唯一名称。目录名称使用小写。目录名称长度必须小于或等于 255 个字符。可以使用此标识符在元数据层次结构(catalogid.dbName.schema.table)内部映射命名空间。

    3. 输入目录的描述。描述的长度必须小于或等于 2048 个字符。

    4. 接下来,选择从 Iceberg 兼容的引擎访问此目录复选框,来启用在 Amazon EMR 上使用与 Apache Iceberg 兼容的分析引擎(例如 Athena 和 Apache Spark)访问 Amazon Redshift 资源。

      您无需启用数据湖访问权限,即可使用 Amazon Redshift 访问联合目录。

      带有访问启用选项的创建目录页面。
    5. 为了使这些查询引擎能够读取和写入 Amazon Redshift 命名空间,请 AWS Glue 创建一个托管的 Amazon Redshift 集群,该集群具有在不影响 Amazon Redshift 数据仓库工作负载的情况下执行读取和写入操作所需的计算和存储资源。

      您还需要为 IAM 角色提供与 Amazon S3 存储桶进行数据传输所需的权限。

    6. 默认情况下,Amazon Redshift 集群中的数据使用 AWS 托管密钥进行加密。Lake Formation 提供了创建自定义 KMS 密钥进行加密的选项。如果您使用客户管理型密钥,您必须向密钥添加特定的密钥策略。

      如果您使用客户管理型密钥对 Amazon Redshift 集群/命名空间中的数据进行加密,请选择自定义加密设置。要使用自定义密钥,必须向 KMS 密钥添加额外的自定义托管式密钥策略。有关更多信息,请参阅 在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog

    AWS CLI

    使用以下示例代码创建一个目录,其中包含使用 AWS CLI发布到 Data Catalog 的 Amazon Redshift 数据。

    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" } } } }'
  3. 向您的账户或外部账户中的用户授予权限。

    AWS 管理控制台
    1. 选择下一步,向其他用户授予对共享目录、数据库和表的权限。

    2. 添加权限屏幕上,选择主体和要授予的权限类型。

      包含主体类型和授予选项的目录权限页面。
      1. 主体部分中,选择主体类型,然后指定要授予权限的主体。

        • IAM 用户和角色:从 IAM 用户和角色列表中选择一个或多个用户或角色。

        • SAML 用户和群组 — 对于 SAML 以及 Amazon Quick Suite 用户和群组,请为通过 SAML 联合的用户或群组或 Amazon Quick Suite 用户或群组输入一个或多个 ARNs 亚马逊资源名称 (ARNs)。在每个 ARN 后按 Enter

          有关如何构造的信息 ARNs,请参阅 AWS CLI 授予和撤消 AWS CLI 命令。

        • 外部账户 — 对于 AWS、 AWS 组织或 IAM 委托人为 IAM 用户或角色输入一个或多个有效的 AWS 账户 IDs IDs IDs、组织、组织单位或 ARN。在每个 ID 后按 Enter。组织 ID 由“o-”后跟 10 到 32 个小写字母或数字组成。单位 ID 以“ou-”开头,后跟 4 到 32 个小写字母或数字(包含 OU 的根的 ID)。该字符串后跟第二个“-”短横线和 8 到 32 个额外的小写字母或数字。

      2. 权限部分中,选择权限和可授予的权限。

        目录权限下,选择要授予的一项或多项权限。在 “可授予权限” 下,选择授予接受者可以向其 AWS 账户中的其他委托人授予的权限。当您从外部账户向 IAM 委托人授予权限时,不支持此选项。

        选择超级用户可向用户授予对目录中资源(数据库、表、视图)的不受限权限。

    3. 选择添加

    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" ] }'
  4. 选择下一步来查看目录详细信息和创建联合目录。新创建的联合目录和目录对象会显示在目录页面中。

    通过 catalogID = 123456789012:Redshift-federated catalog id 方式来引用 Amazon Redshift 联合目录。