创建 Amazon Redshift 联合目录
本主题介绍接受集群或命名空间邀请、创建联合多级目录以及向其他主体授予权限所需遵循的步骤。您可以使用 Lake Formation 控制台、Amazon Command Line Interface(Amazon CLI)或 API/SDK 来完成这些任务。本主题中的示例显示了同一个账户中的创建器集群/命名空间、Data Catalog 和数据使用者。
要了解有关 Lake Formation 跨账户功能的更多信息,请参阅Lake Formation 中的跨账户数据共享。
在 Data Catalog 中管理 Amazon Redshift 命名空间
-
查看命名空间邀请并接受邀请。
- Console
-
-
通过 https://console.aws.amazon.com/lakeformation/ 以数据湖管理员的身份登录 Lake Formation 控制台。导航到数据目录下的目录页面。
-
查看您已获授权可以访问的命名空间邀请。状态列表示您当前参与命名空间的状态。未接受状态表示您已添加到命名空间,但尚未接受或已拒绝邀请。
-
要响应命名空间或集群邀请,请选择邀请名称,然后选择查看邀请。在接受或拒绝邀请中,查看邀请详细信息。选择接受接受邀请,或选择拒绝拒绝邀请。如果您拒绝邀请,就无法访问该命名空间。
-
- Amazon CLI
-
以下示例显示如何查看、接受和注册邀请。将 Amazon Web Services 账户 ID 替换为有效的 Amazon Web Services 账户 ID。将
data-share-arn替换为引用命名空间的实际 Amazon 资源名称(ARN)。-
查看待处理的邀请。
aws redshift describe-data-shares \ --data-share-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace' \ -
接受邀请。
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' -
在 Lake Formation 账户中注册集群或命名空间。使用 RegisterResource API 操作在 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'
-
-
创建联合目录。
接受邀请后,您需要在 Data Catalog 中创建一个联合目录,以便将 Amazon Redshift 命名空间中的对象映射到 Data Catalog。您必须是数据湖管理员或具有创建目录所需权限的用户或角色。
- Console
-
-
接受命名空间邀请后,将显示设置目录详细信息页面。
-
在设置目录详细信息页面上,输入目录的唯一名称。目录名称使用小写。目录名称长度必须小于或等于 255 个字符。可以使用此标识符在元数据层次结构(catalogid.dbName.schema.table)内部映射命名空间。
-
输入目录的描述。描述的长度必须小于或等于 2048 个字符。
接下来,选择从 Iceberg 兼容的引擎访问此目录复选框,来启用在 Amazon EMR 上使用与 Apache Iceberg 兼容的分析引擎(例如 Athena 和 Apache Spark)访问 Amazon Redshift 资源。
您无需启用数据湖访问权限,即可使用 Amazon Redshift 访问联合目录。
-
为了使这些查询引擎能够读取和写入 Amazon Redshift 命名空间,Amazon Glue 创建一个托管式 Amazon Redshift 集群,该集群具有在不影响 Amazon Redshift 数据仓库工作负载的情况下执行读写操作所需的计算和存储资源。
您还需要为 IAM 角色提供与 Amazon S3 存储桶进行数据传输所需的权限。
-
默认情况下,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" } } } }'
-
向您的账户或外部账户中的用户授予权限。
- Amazon Web Services 管理控制台
-
-
选择下一步,向其他用户授予对共享目录、数据库和表的权限。
-
在添加权限屏幕上,选择主体和要授予的权限类型。
-
在主体部分中,选择主体类型,然后指定要授予权限的主体。
-
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 个额外的小写字母或数字。
-
-
在权限部分中,选择权限和可授予的权限。
在目录权限下,选择要授予的一项或多项权限。在可授予的权限下,选择授权接收者可以向其 Amazon 账户中的其他主体授予的权限。当您从外部账户向 IAM 主体授予权限时,不支持此选项。
选择超级用户可向用户授予对目录中资源(数据库、表、视图)的不受限权限。
-
-
选择添加。
-
- 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" ] }'
-
选择下一步来查看目录详细信息和创建联合目录。新创建的联合目录和目录对象会显示在目录页面中。
通过
catalogID = 123456789012:Redshift-federated catalog id方式来引用 Amazon Redshift 联合目录。