我在帐户A
和帐户B
有一个批处理作业。当我的工作请求s3:GetBucketLocation
时,它返回Access Denied
。
我已经在我的批处理作业(帐号A
)上设置了这样的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::bucket-in-account-B",
"arn:aws:s3:::bucket-in-account-B/*"
]
}
]
}
和存储区权限(帐户B
):
{
"Version": "2012-10-17",
"Statement": [
...,
{
"Sid": "123",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{{numbers}}:role/{{name}}"
},
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::bucket-in-account-B",
"arn:aws:s3:::bucket-in-account-B/*"
]
}
]
}
这些权限不起作用。
存储桶B的策略应该包括来自帐户A的用户访问它的权限,例如
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountQ:user/AccountAUserName"
},
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::AccountBBucketName/*"
]
}
]
}
您是否尝试在批处理作业开始运行后从批处理作业内访问存储桶,或者您是否尝试连接存储桶文件登陆事件以触发批处理作业?
我假设它是前者。在这种情况下,存储桶策略应该足以授予跨帐户访问权限。它可能是你正在放入存储桶策略的实际问题。
它可能不是“arn:aws:iam :: {{numbers}}:role / {{name}}”......你可能必须将assume-role放在那里或者放置实例配置文件arn。这取决于。你是如何建立这份工作的。工作在哪里得到证书。来自附加到底层实例的IAM角色(通过实例配置文件)或ecs任务角色(基本上是批处理容器的角色)
在你的工作中,你可以做类似的事情
$ aws sts get-caller-identity
尝试授予对该命令打印的arn的存取桶访问权限减去会话名称(arn的最后一位)