我在账户 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/*"
]
}
]
}
这些权限不起作用。
您是在批处理作业开始运行后尝试从存储桶内部访问存储桶,还是尝试挂接存储桶文件登陆事件以触发批处理作业???
我假设是前者。 在这种情况下,存储桶策略应该足以授予跨账户访问权限。 这可能是您放入存储桶策略的实际 ARN 的问题。
它可能不是"ARN:AWS:IAM::{{numbers}}:role/{{name}}" ...您可能需要在其中放置代入角色或放置实例配置文件 ARN。这要看情况。您如何设置作业。作业从哪里获得凭据。从附加到底层实例的 IAM 角色(通过实例配置文件(或 ECS 任务角色(基本上是批处理容器的角色(
在你的工作中,你可以做一些类似的事情
$ aws sts get-caller-identity
尝试授予存储桶对该命令打印的 ARN 的访问权限,但不包括会话名称(ARN 的最后一部分(
存储桶 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/*"
]
}
]
}