适用于只能访问特定S3存储桶的IAM组的AWS CloudFormation模板

时间:2017-01-23 22:08:35

标签: amazon-web-services amazon-s3 amazon-cloudformation amazon-iam

有关此主题的类似问题已经被问到here,但该帖子上没有一个解决方案对我有用而且它已经很老了,这让我相信可能在AWS中发生了一些变化问一个新问题。

基本上,我使用CloudFormation模板来定义具有内联策略的IAM组,以便其用户只能访问单个S3存储桶。根据链接的问题,我到达了以下模板(原始帖子使用的是JSON,但我使用的是YAML):

BucketAccessGroup:
    Type: AWS::IAM::Group
    Properties:
      GroupName: my-bucket-admins
      Path: /my-bucket-admins/
      Policies:
      - PolicyName: MyBucketAccess
        PolicyDocument:
          Version: 2012-10-17
          Statement:
          -
            Effect: Allow
            Action: s3:*
            Resource:
            - arn:aws:s3:::my-bucket-name
            - arn:aws:s3:::my-bucket-name/*
          -
            Effect: Allow
            Action: s3:ListAllMyBuckets
            Resource: "*"

不幸的是,该组中的IAM用户不仅可以列出所有其他存储桶(控制台访问所需),还可以打开,修改和删除它们及其对象!显然这不是理想的行为! AWS发生了哪些变化导致此政策不再有效?该策略在CloudFormation模板中的工作方式与它自身的工作方式不同吗?任何帮助将不胜感激!

修改

正如@ wjordan的回答所述,事实证明另一项政策已经给予该组完整的S3权限。我正在添加AWSLambdaFullAccess托管策略,它意外地有一个允许s3:*行(我在上面的代码中省略了b / c我不认为它是相关的!)。鉴于需要与该策略共存,这是我更新的CF模板,它按预期工作,并且更安全一点:

  BucketAccessGroup:
    Type: AWS::IAM::Group
    Properties:
      GroupName: my-bucket-admins
      ManagedPolicyArns: [ "arn:aws:iam::aws:policy/AWSLambdaFullAccess" ]
      Policies:
      - PolicyName: MyBucketAccess
        PolicyDocument:
          Version: 2012-10-17
          Statement:
          - # Prevent changing permissions in any way on the desired bucket
            Effect: Deny
            Action:
            - s3:DeleteBucket
            - s3:DeleteBucketPolicy
            - s3:PutBucketPolicy
            - s3:PutBucketAcl
            Resource:
            - arn:aws:s3:::my-bucket-name
            - arn:aws:s3:::my-bucket-name
          - # Prevent all S3 actions except listing buckets, on everything except the desired bucket (AWSLambdaFullAccess already allows s3:*)
            Effect: Deny
            NotAction: s3:ListAllMyBuckets
            NotResource:
            - arn:aws:s3:::my-bucket-name
            - arn:aws:s3:::my-bucket-name

1 个答案:

答案 0 :(得分:1)

所提供的政策看起来是正确的,并没有过时。您确定有问题的IAM用户是否在指定的AWS::IAM::Group之外没有应用任何额外的组/策略来授予他们意外的权限吗?

确认这一点的一种方法是从头开始创建一个新的IAM用户并尝试在那里重现问题。