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

创建 Amazon Redshift 联合目录

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

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

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

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

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

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

    Amazon CLI

    以下示例显示如何查看、接受和注册邀请。将 Amazon Web Services 账户 ID 替换为有效的 Amazon Web Services 账户 ID。将 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 账户中注册集群或命名空间。使用 RegisterResource API 操作在 Lake Formation 中注册数据共享。DataShareArnResourceArn 的输入参数。

      注意

      此步骤为必需步骤。

      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 命名空间,Amazon Glue 创建一个托管式 Amazon Redshift 集群,该集群具有在不影响 Amazon Redshift 数据仓库工作负载的情况下执行读写操作所需的计算和存储资源。

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

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

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

    Amazon CLI

    使用以下示例代码创建一个目录,其中包含使用 Amazon 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. 向您的账户或外部账户中的用户授予权限。

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

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

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

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

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

          有关如何构造 ARN 的信息,请参阅 Amazon CLI 授予和撤销 Amazon CLI 命令。

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

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

        目录权限下,选择要授予的一项或多项权限。在可授予的权限下,选择授权接收者可以向其 Amazon 账户中的其他主体授予的权限。当您从外部账户向 IAM 主体授予权限时,不支持此选项。

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

    3. 选择添加

    Amazon CLI

    在 Amazon 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 联合目录。