我尝试在account-A中的Redshift集群上运行一个复制命令,从account-B的存储桶中加载文件:
COPY inventory FROM 's3://account-A-bucket/redshiftManifest' IAM_ROLE 'arn:aws:iam::account-A:role/readS3Role' DELIMITER ',' REGION 'us-west-2' MANIFEST GZIP COMPUPDATE OFF REMOVEQUOTESreadS3Role具有以下权限:
{
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::account-A-bucket*",
"arn:aws:s3:::account-B-bucket*"
],
"Effect": "Allow"
}s3://account-A-bucket/redshiftManifest是account-B-bucket中的文件列表。account-B-bucket具有以下策略:
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account-A:root"
},
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::account-B-bucket",
"arn:aws:s3:::account-B-bucket/*"
]
}我还在account-B-bucket的访问控制列表中添加了account-A。
根据S3 to Redshift : Copy with Access Denied,我启用了增强的VPC路由,并且我的集群的子网似乎有一个与其关联的com.amazonaws.us-west 2.s3端点。
但是,当Redshift尝试加载清单中定义的account-B-bucket中的一个文件时,我仍然收到S3ServiceException:访问被拒绝。
发布于 2017-10-25 12:22:58
无需启用增强型VPC路由-- Access Denied错误提示您可以正常到达S3,但您的权限不足。
帐户A无权访问帐户B中的任何内容,因此您的readS3Role角色不应引用Bucket-B。
Bucket-B上的Bucket Policy应该授予对arn:aws:iam::account-A:role/readS3Role (而不是root)的访问权限。
这样,红移集群将使用Account-A中的readS3Role访问Bucket-B。
发布于 2017-10-26 04:53:18
问题最终是,尽管我有一个有效的存储桶策略,但S3存储桶中的对象是由第三个帐户放置的,因此无法从我的帐户访问。
我必须在副本中直接使用AWS凭据才能访问Redshift中的资源
https://stackoverflow.com/questions/46921653
复制相似问题