Amazon web services 在两个不同帐户的两个存储桶之间复制对象需要什么权限?
我正在使用javascript SDK和lambda函数将文件从源帐户复制到lambda所在的当前帐户。在调用Amazon web services 在两个不同帐户的两个存储桶之间复制对象需要什么权限?,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我正在使用javascript SDK和lambda函数将文件从源帐户复制到lambda所在的当前帐户。在调用copyObjectapi之前,我将担任跨帐户访问源帐户S3 bucket的角色。但我的访问被拒绝了!以下是我的跨账户角色: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets"
copyObject
api之前,我将担任跨帐户访问源帐户S3 bucket的角色。但我的访问被拒绝了!以下是我的跨账户角色:
{
"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权限,然后无法将文件复制到目标。非常感谢您的帮助 您似乎有:
Account-A
Account-B
Account-B
- Lambda函数可以承担的
中的IAM角色(Account-A
)Role-A
Bucket-A
复制到Bucket-B
使用CopyObject
命令时,凭据必须具有:
Bucket-A的读取权限
- 对
Bucket-B的写入权限
Role-A
对Bucket-A
具有读取权限,但它没有写入Bucket-B
的权限
因此,您有两种选择:
- 选项1:向
添加一个Bucket策略,该策略向Bucket-B
授予写入权限,或Role-a
- 选项2:通过在
上创建Bucket策略,Bucket-A
中Account-A
的管理员可以将Bucket-A
的读取权限授予Lambda函数正在使用的IAM角色,而不是使用Bucket-A
。也就是说,Lambda函数不承担Role-A
。它只是使用自己的角色直接从角色-A
读取Bucket-A
AssumeRole
方法之前尝试此方法
如果您确实希望继续使用Role-A
,请注意CopyObject()
命令将需要将ACL
设置为bucket owner full control
。如果未执行此操作,帐户B
将无权访问/删除复制的对象。(如果使用第二种方法,则将使用Account-B
凭据复制对象,因此不需要此方法。)
底线:对于您描述的涉及
Role-A
的场景,向Bucket-B
添加一个Bucket策略,向Role-A
授予写入权限。您是对的,当您担任跨帐户角色时,您将失去当前的权限。如果要保持这种工作方式,您需要承担跨帐户角色,将文件本地复制到lambda环境中,重新承担lambda角色并将文件放入目标存储桶。或者您可以将所有策略放入lambda使用的相同角色中,并在bucket上放置一个允许此跨帐户角色从中获取对象的策略。谢谢您的回答。我还可以选择承担角色A并调用getObject(),然后承担lambda角色并调用putObject()使其工作。使用这两个操作而不是单个copyObject()操作是否有任何性能差异?copyObject()
操作将直接在S3存储桶之间进行。这甚至可以在区域之间工作!它比下载和上传要高效得多。我怀疑它还会复制其他信息,比如元数据和创建日期。这比下载和上传要好得多。