在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog - AWS Lake Formation

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

在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog

  1. 创建数据湖管理员-创建有权接受命名空间邀请的 IAM 角色,创建 AWS Glue Data Catalog 对象(目录、数据库、表/视图),并向其他用户授予 Lake Formation 权限。

    有关创建数据湖管理员的 step-by-step说明,请参阅创建数据湖管理员

  2. 更新数据湖管理员权限。

    除了数据湖管理员权限外,数据湖管理员还需要以下权限才能在 Lake Formation 中接受 Amazon Redshift 命名空间邀请、创建或更新数据目录资源以及启用数据湖访问权限:

    JSON
    { "Version": "2012-10-17", "Id": "glue-enable-datalake-access", "Statement": [{ "Effect": "Allow", "Action": [ "redshift:AssociateDataShareConsumer", "redshift:DescribeDataSharesForConsumer", "redshift:DescribeDataShares", "redshift-serverless:CreateNamespace", "redshift-serverless:CreateWorkgroup", "redshift-serverless:DeleteNamespace", "redshift-serverless:DeleteWorkgroup", "ec2:DescribeAccountAttributes", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "s3:createBucket", "s3:deleteBucket", "s3:putBucketPolicy", "s3:putEncryptionConfiguration", "s3:putLifecycleConfiguration", "s3:putBucketVersioning", "iam:CreateRole" ], "Resource": "*" }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "arn:aws:iam::*:role/data transfer role name", "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } } ] }
  3. 如果用于创建联合目录的 IAM 角色不是数据湖管理员,则需要向该角色授予Create catalog权限。

    创建目录创建者
    1. 打开 Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/

    2. 在 “管理” 下选择 “管理角色和任务”。

    3. 选择授权

    4. 授予权限屏幕上,选择一个 IAM 用户或角色。

    5. 选择创建目录权限。

    6. 或者,您也可以授予可授予的 “创建目录” 权限。可授予权限允许目录创建者将Create catalog权限授予其他委托人。

    7. 选择授权

    AWS CLI 授予创建联合目录权限的示例。

    aws lakeformation grant-permissions \ --cli-input-json \ '{ "Principal": { "DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/Admin" }, "Resource": { "Catalog": { } }, "Permissions": [ "CREATE_CATALOG", "DESCRIBE" ] }'
  4. 创建只读管理员角色,通过亚马逊 Redshift 查询编辑器 v2 在数据目录中发现亚马逊 Redshift 联合目录。

    要从 Amazon Redshift 查询编辑器 v2 查询联合目录中的亚马逊 Redshift 表,请确保只读管理员角色策略包含亚马逊 Redshift 服务相关角色的 ARN-。AWSServiceRoleForRedshift

    aws lakeformation put-data-lake-settings --region us-east-1 \ --data-lake-settings \ '{ "DataLakeAdmins": [{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/Admin"}], "ReadOnlyAdmins":[{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift"}], "CreateDatabaseDefaultPermissions":[], "CreateTableDefaultPermissions":[], "Parameters":{"CROSS_ACCOUNT_VERSION":"4","SET_CONTEXT":"TRUE"} }'
  5. 创建一个数据传输角色,Amazon Redshift 可以代表您担任该角色,用于向 Amazon S3 存储桶传输数据和从该存储桶传输数据。

    当您为兼容 Apache Iceberg 的查询引擎(例如亚马逊上的 Athena、Amazon EMR)启用数据湖访问权限以 EC2 访问数据目录中的 Amazon Redshift 资源时,您需要创建一个具有所需权限的 IAM 角色来执行与亚马逊 S3 存储桶之间的数据传输。

    JSON
    { "Version": "2012-10-17", "Id": "glue-enable-datalake-access", "Statement": [{ "Sid": "DataTransferRolePolicy", "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetDatabase", "kms:GenerateDataKey", "kms:Decrypt"], "Resource": "*" } ] }
  6. 将以下信任策略添加到 AWS Glue 和 Amazon Redshift 服务的数据传输角色中,以代入和传出 Amazon S3 存储桶的数据的角色。

    JSON
    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "glue.amazonaws.com" ] }, "Action": "sts:AssumeRole" }] }
  7. 如果您使用客户托管密钥加密 Amazon Redshift 集群/命名空间中的数据,请将以下密钥策略添加到密钥中。 AWS KMS 将账号替换为有效的 AWS 账号,并指定数据传输角色名称。默认情况下,Amazon Redshift 集群中的数据使用 KMS 密钥进行加密。Lake Formation 提供了一个选项来创建用于加密的自定义 KMS 密钥。如果您使用的是客户管理的密钥,则必须为密钥添加特定的密钥策略。

    有关管理客户管理型密钥权限的更多信息,请参阅客户管理型密钥