在帐户A中,我创建了一个带有cloudformation的s3存储桶,CodeBuild构建了一个工件并上传到此存储桶。在帐户B中,我尝试使用云形成创建堆栈,并使用帐户A桶中的工件来部署我的Lambda函数。但是,我收到了拒绝访问错误。有谁知道解决方案?感谢...
"TestBucket": {
"Type": "AWS::S3::Bucket",
"DeletionPolicy": "Retain",
"Properties": {
"AccessControl": "BucketOwnerFullControl"
}
},
"IAMPolicy": {
"Type": "AWS::S3::BucketPolicy",
"Properties": {
"Bucket": {
"Ref": "TestBucket"
},
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::xxxxxxxxxxxx:root",
"arn:aws:iam::xxxxxxxxxxxx:root"
]
},
"Action": [
"s3:GetObject"
],
"Resource": [
{
"Fn::Join": [
"",
[
"arn:aws:s3:::",
{
"Ref": "TestBucket"
},
"/*"
]
]
},
{
"Fn::Join": [
"",
[
"arn:aws:s3:::",
{
"Ref": "TestBucket"
}
]
]
}
]
}
]
}
}
}
答案 0 :(得分:1)
假设下面的语句中的xxxxx是帐户B的帐号:
"AWS": [
"arn:aws:iam::xxxxxxxxxxxx:root",
"arn:aws:iam::xxxxxxxxxxxx:root"
]
您说此存储桶根据客户在帐户B IAM服务中持有的IAM权限/政策授予对帐户B的访问权限。
基本上所有具有显式S3访问权限的用户/实例配置文件/策略都可以访问此帐户A的存储桶。这意味着您附加到帐户B中的lambda角色的IAM策略可能不会有明确的S3访问权限。
我建议让S3访问你的Lambda函数,这应该可行。
请注意,将来如果您想从帐户B写入帐户A的S3存储桶,则必须确保将存储桶所有者完全控制acl放置为对象可以在所有帐户中使用。
示例强>:
使用CLI : $ aws s3api put-object --acl bucket-owner-full-control --bucket my-test-bucket --key dir / my_object.txt --body /path/to/my_object.txt
答案 1 :(得分:0)
不是"arn:aws:iam::xxxxxxxxxxxx:root"
仅授予对root角色的访问权限,而是通过仅指定帐户ID作为Principal/AWS
对象中的项目来授予对帐户中所有身份的访问权限:"xxxxxxxxxxxx"
有关详细信息,请参阅Using a Resource-based Policy to Delegate Access to an Amazon S3 Bucket in Another Account。