amazon-web-services - Control Tower AWS - 共享 s3 存储桶
问题描述
我最近开始使用 AWS 的 Control Tower 来管理我的多账户环境。
我当前的问题是:我有一个属于主账户的存储桶,我想与组织的一些账户共享控制台访问权限。我怎样才能做到这一点?我尝试添加一个存储桶策略,指定帐户和附加到该帐户的 SSO 权限集,以授予对存储桶的访问权限,但是当使用该角色访问 s3 时,我看不到该存储桶。
不过,我可以通过 CLI 访问存储桶,但不能通过控制台访问。即当通过 CLI 使用分配的角色访问时,我可以做到aws s3 ls s3://mybucket
,它会显示其中的文件夹(其他命令也可以)。但是做aws s3 ls
bucket的时候没有列出来。
存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": [
"123456789101",
"112131415161",
]
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket"
}
]
}
权限集:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::mybucket",
"arn:aws:s3:::mybucket/*"
]
}
]
}
有谁知道如何允许用户将其与其他帐户存储桶以及通过 s3 页面上的控制台一起列出?
谢谢!!
戴安娜
解决方案
据我了解 ControlTower,您不应该在 root 帐户中做任何有意义的事情。
此外,除非您允许其他用户“联合”到创建存储桶的同一帐户中,否则没有共享控制台访问权限。使用 ControlTower,这通常通过单点登录 (SSO)完成
我的建议是:创建一个共享服务/资源帐户,并允许组织的任何成员访问这些资源。通过使用新的AWS:PrincipalOrgID
. 例如,请参阅此 CloudFormation Snippet 以sns:Publish
获得 AWS 组织内部的许可,以了解中央 SNS 队列。:
Resources:
Topic:
Type: AWS::SNS::Topic
Properties:
DisplayName: Name
TopicName: name
TopicPolicy:
Type: AWS::SNS::TopicPolicy
Properties:
Topics:
- !Ref Topic
PolicyDocument:
Version: '2012-10-17'
Statement:
# default permission allow same account: https://www.terraform.io/docs/providers/aws/r/sns_topic_subscription.html
- Sid: __default_statement_ID
Effect: Allow
Principal:
AWS: "*"
Action:
- SNS:GetTopicAttributes
- SNS:SetTopicAttributes
- SNS:AddPermission
- SNS:RemovePermission
- SNS:DeleteTopic
- SNS:Subscribe
- SNS:ListSubscriptionsByTopic
- SNS:Publish
- SNS:Receive
Resource: !Ref Topic
Condition:
StringEquals:
AWS:SourceOwner: !Sub ${AWS::AccountId}
- Sid: SnsTopicPolicy
Effect: Allow
Principal:
AWS: "*"
Condition:
StringEquals:
# allow access from within your organization
AWS:PrincipalOrgID: "o-xxxxxxxxxx"
Action: sns:Publish
Resource: !Ref Topic
推荐阅读
- network-programming - 在不改变 Netlogo 中网络特征的情况下,用新的代理扩展现有的 Preferential-Attachment-Network (Barabási/Albert)
- azure - Azure 上的 Kubeflow - 无法运行管道
- tensorrt - TensorRT 警告:由于驱动程序或 nvrtc 不兼容,卷积 + 通用激活融合被禁用
- java - Java Image IO“无法读取输入文件”
- ios-simulator - 如何对在模拟器上运行 iphone 应用程序进行故障排除?
- javascript - 已解决:如何在 mongoose 中创建子文档?MongoDB、NodeJS
- python - 如何使用 python 请求抓取非 restful API?
- html - 为什么我的 h1 的内容会出现在一个固定的导航栏组件之上?
- python - 如何从方程 x+yx*y 中找到 x 和 y
- c - 收到 sigchld 后 Getline 停止工作