如何允许 AWS 从批处理作业访问另一个账户上的 S3



我在账户 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/*"
            ]
        }
    ]
}

相关内容

  • 没有找到相关文章

最新更新