首页 > 解决方案 > Control Tower AWS - 共享 s3 存储桶

问题描述

我最近开始使用 AWS 的 Control Tower 来管理我的多账户环境。

我当前的问题是:我有一个属于主账户的存储桶,我想与组织的一些账户共享控制台访问权限。我怎样才能做到这一点?我尝试添加一个存储桶策略,指定帐户和附加到该帐户的 SSO 权限集,以授予对存储桶的访问权限,但是当使用该角色访问 s3 时,我看不到该存储桶。

不过,我可以通过 CLI 访问存储桶,但不能通过控制台访问。即当通过 CLI 使用分配的角色访问时,我可以做到aws s3 ls s3://mybucket,它会显示其中的文件夹(其他命令也可以)。但是做aws s3 lsbucket的时候没有列出来。

存储桶策略:

{
    "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 页面上的控制台一起列出?

谢谢!!

戴安娜

标签: amazon-web-servicesamazon-s3amazon-iam

解决方案


据我了解 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

推荐阅读