New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何创建对 AWS Glue 和 Amazon S3 的 Amazon Redshift Spectrum 跨账户存取?
我想使用 Amazon Redshift Spectrum 访问同一 AWS 区域内不同 AWS 账户中的 AWS Glue 和 Amazon Simple Storage Service(Amazon S3)。我该怎么做?
简短描述
要访问与 Amazon Redshift Spectrum 不同的账户中的 AWS 资源,请执行以下步骤:
1.在账户 1 中,创建一个与 Amazon Redshift 建立信任关系的 AWS Identity and Access Management(AWS IAM)角色。此角色应附加到 Amazon Redshift 集群。
2.在账户 2 中,创建另一个可以同时访问 AWS Glue 和 Amazon S3 的角色。此角色编辑信任关系并允许 Amazon Redshift 账户代入此角色。
3.在账户 1 中,编辑现有角色的权限,使其代入在 AWS Glue 和 Amazon S3 账户中创建的角色。
解决方法
账户 1: 创建与 Amazon Redshift 建立信任关系的 AWS Identity and Access Management(AWS IAM)角色
1.打开 IAM 控制台。
2.在导航窗格中选择角色,然后选择创建角色。
3.对于选择受信任实体的类型,选择 AWS 服务。
4.选择 Redshift。
5.在选择您的用例中,选择 Redshift - 可自定义。
6.依次选择下一步: 权限、下一步: 标签和下一步: 审核。您无需添加策略或标签。
7.输入角色名称,然后选择创建角色。在以下示例中,我们将此角色称为 redshift_role1。
8.将 redshift_role1 与 Amazon Redshift 集群相关联。这种关联允许您的集群代入新创建的角色来访问 Amazon S3、Amazon Athena 和 AWS Glue。
账户 2: 创建另一个可以访问 AWS Glue 和 Amazon S3 的角色
1.打开 IAM 控制台。
2.选择策略,然后选择创建策略。
3.选择 JSON 选项卡,然后输入类似于以下内容的 IAM 策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "glue:BatchCreatePartition", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteDatabase", "glue:GetTables", "glue:GetPartitions", "glue:BatchDeletePartition", "glue:UpdateTable", "glue:BatchGetPartition", "glue:DeleteTable", "glue:GetDatabases", "glue:GetTable", "glue:GetDatabase", "glue:GetPartition", "glue:CreateDatabase", "glue:BatchDeleteTable", "glue:CreatePartition", "glue:DeletePartition", "glue:UpdatePartition" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucketMultipartUploads", "s3:ListBucket", "s3:GetBucketLocation", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::your_bucket", "arn:aws:s3:::your_bucket/*" ] }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "<KMS_KEY_ARN>" ] } ] }
将 your_bucket 替换为您想要通过 Amazon Redshift Spectrum 访问的 S3 存储桶的名称。将 KMS_KEY_ARN 替换为加密您的 S3 存储桶的 KMS 密钥的 ARN。
**注意:**如果您的 S3 存储桶中的文件已加密,请务必向 Amazon Redshift 授予适当的权限。
4.选择查看策略。
5.输入策略的名称,然后选择创建策略。
6.在导航窗格中,选择角色,然后选择创建角色。
7.对于选择受信任实体类型,选择其他 AWS 账户。
8.在账户 ID中,输入使用 Amazon Redshift 的账户的 ID。有关更多信息,请参阅查找您的 AWS 账户 ID。
9.依次选择下一步: 权限。
10.在策略列表中,选中您创建的策略名称旁边的复选框。
11.依次选择下一步: 标签,然后选择下一步: 审核。您不需要添加标签。
12.输入角色名称,然后选择创建角色。在以下示例中,我们将其称为 glue_s3_role2。
13.在导航窗格中,选择角色。
14.选择您创建的角色的名称,然后选择信任关系选项卡。
15.选择编辑信任关系。
16.删除现有策略,然后将其替换为类似于以下内容的策略。将 redshift_account1 替换为使用 Amazon Redshift 的账户的 ID。将 redshift_role1 替换为您创建的第一个角色的名称。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::redshift_account1:role/redshift_role1" }, "Action": "sts:AssumeRole" } ] }
17.选择更新信任策略。
账户 1: 编辑在 Amazon Redshift 中创建的角色的权限
1.打开 IAM 控制台。
2.从导航窗格中选择角色,然后选择您之前创建的第一个角色的名称 (redshift_role1)。
3.从“权限”部分中,选择添加内联策略。
4.选择 JSON 选项卡。删除现有策略,然后输入类似于以下内容的 IAM 策略。将 glue_s3_account2 替换为使用 AWS Glue 和 Amazon S3 的账户的 ID。将 glue_s3_role2 替换为您创建的第二个角色的名称:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487639602000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::glue_s3_account2:role/glue_s3_role2" } ] }<br>
5.选择查看策略。
6.输入策略的名称,然后选择创建策略。
8.使用您在两个账户中创建的角色创建外部架构,如以下示例所示:
create external schema spectrum_schema from data catalog database 'your_db' iam_role 'arn:aws:iam::redshift_account1:role/redshift_role1,arn:aws:iam::glue_s3_account2:role/glue_s3_role2'
替换以下值:
your_db:您在 AWS Glue 中的数据库的名称。
redshift_account1:Amazon Redshift 账户的 ID。
redshift_role1:您在 Amazon Redshift 账户中创建的角色的名称。
glue_s3_account2:AWS Glue 和 Amazon S3 账户的 ID。
glue_s3_role2:您在 AWS Glue 和 Amazon S3 账户中创建的角色的名称。
现在,只要所有资源都在同一个区域中,您就可以从 redshift_account1 中的 Amazon Redshift 集群使用 Amazon Redshift Spectrum 查询 glue_s3_account2 中的 AWS Glue 表。您无需重新创建外部表,因为 Redshift Spectrum 可以访问您现有的 AWS Glue 表。
以下示例中的查询返回在外部架构中创建的 AWS Glue 表中的行数:
select count(*) from spectrum_schema.glue_table;
**注意:**将 spectrum_schema 和 glue_table 替换为您的架构和 AWS Glue 表的名称。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前