如何解决如何验证跨账户AWS S3存储桶是否存在?
我有一个使用AWS帐户A的应用程序,该应用程序需要检查AWS帐户B中的存储桶是否存在。如果存储桶不存在,那么我希望应用程序在一开始就失败。
我为帐户B中的存储桶设置了"s3:ListBucket","s3:GetObject","s3:GetBucketLocation"
至帐户A。我正在使用下面的方法来获取所有存储桶,然后遍历该列表以匹配帐户B的存储桶名称。我知道这只会给帐户A拥有的存储桶的列表。
s3Client = s3.New(session)
list,err := s3Client.ListBuckets(nil)
找出此处是否存在帐户B中的存储桶的最佳方法是什么?
这是帐户B中存储区的存储区策略:
{
"Effect": "Allow","Principal": {
"AWS": "arn:aws:iam::<accountA_no>:root"
},"Action": [
"s3:ListBucket","s3:GetBucketLocation"
],"Resource": [
"<AccountB_bucket_arn>/*","<AccountB_bucket_arn>"
]
}
解决方法
仅列出一个存储桶似乎可以指示一个存储桶是否存在:
"{ResponseCode":"ok"}
我不是Go语言的人,但是从Python我得到了以下结果:
$ aws s3 ls s3://example-bucket
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
$ aws s3 ls s3://example-bucketzz
An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: The specified bucket does not exist
,
我发现我们无法列出跨帐户存储桶(s3Client.ListBuckets(nil))。它只会返回经过身份验证的用户拥有的存储桶列表。请参阅https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-cross-account-access/
我更新了代码以使用ListObjectsV2 https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#S3.ListObjectsV2。 在使用ListObjectsV2函数之前,我在帐户A上设置了IAM角色策略,如下所示。
def show_popup(conten):
# make sure the content has no parent
if conten.parent is not None:
conten.parent.remove_widget(conten)
show = conten
popupWindow = Popup(title="Popup Window",content=show)
clButt.bind(on_press=popupWindow.dismiss)
popupWindow.open()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。