我需要在两个不同帐户的两个存储桶之间复制对象的权限?

时间:2019-08-06 21:52:38

标签: amazon-web-services amazon-s3 aws-lambda

我正在使用javascript SDK和lambda函数将文件从源帐户复制到我的lambda所在的当前帐户。在我调用copyObject api之前,我假设有一个跨帐户访问源帐户S3存储桶的角色。但是我被拒绝访问!这是我的跨帐户角色:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListAllMyBuckets"
        ],
        "Resource": [
            "*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::sourceBucket/*"
        ]
    }
]
}

这是我的lambda权限:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Resource": "arn:aws:s3:::destinationbucket/*",
        "Effect": "Allow"
    },
    {
        "Action": [
            "sts:*"
        ],
        "Resource": "*",
        "Effect": "Allow"
    }
]
}

我认为当我承担交叉帐户角色时,我放弃了lambda权限,然后无法将文件复制到目标位置。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:1)

您似乎有:

  • Bucket-A中的源存储桶(Account-A
  • Bucket-B中的目标存储区(Account-B
  • Account-B中的AWS Lambda函数
  • Lambda函数可以承担的Role-A中的IAM角色(Account-A

您的要求是让Lambda函数将对象从Bucket-A复制到Bucket-B

使用CopyObject命令时,凭据必须具有:

  • 读取Bucket-A上的权限
  • Bucket-B上写权限

但是,尽管Role-A确实具有对Bucket-A的读取权限,但它没有写入Bucket-B的权限。

因此,您有两种选择:

  • 选项1:Bucket-B添加存储桶策略,该策略授予Role-A
  • 的写权限
  • 选项2:代替使用Role-ABucket-AAccount-A的管理员可以向IAM角色授予Bucket-A的读取权限通过在Bucket-A上创建存储桶策略来被Lambda函数使用。也就是说,Lambda函数假定Role-A。它只是使用自己的角色直接从Bucket-A中读取。

选项2更好,因为它涉及的运动部件较少。即,不需要扮演角色。建议您在使用AssumeRole方法之前尝试此方法。

如果您希望继续使用Role-A,请注意,CopyObject()命令将需要将ACL设置为bucket-owner-full-control。如果不这样做,Account-B将无权访问/删除复制的对象。 (如果使用第二种方法,则将使用Account-B凭据复制对象,因此不是必需的。)

底线:对于涉及Role-A的描述情况,Bucket-B添加存储桶策略,以授予对Role-A的写权限

相关问题