2

我在 account 中有一个批处理作业,在 account 中有一个Abucket 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/*"
            ]
        }
    ]
}

这些权限不起作用。

4

2 回答 2

0

您是在批处理作业开始运行后尝试从其内部访问存储桶,还是尝试连接存储桶文件登陆事件以触发批处理作业?

我假设它是前者。在这种情况下,存储桶策略应该足以授予跨账户访问权限。您放入存储桶策略的实际 arn 可能存在问题。

它可能不是 "arn:aws:iam::{{numbers}}:role/{{name}}" ...您可能必须将假设角色放在那里或将实例配置文件 arn。这取决于。你是如何安排工作的。工作从哪里获得它的凭据。来自附加到底层实例的 IAM 角色(通过实例配置文件)或 ecs 任务角色(基本上是批处理容器的角色)

在你的工作中,你可以做类似的事情

$ aws sts get-caller-identity

尝试授予对从该命令打印的 arn 减去会话名称(arn 的最后一位)的存储桶访问权限

于 2019-05-21T15:39:10.870 回答
-1

存储桶 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/*"
            ]
        }
    ]
}
于 2019-04-09T20:36:24.563 回答