可能只访问特定S3存储区的IAM组的AWS CloudFormation模板

问题描述:

有关此主题的类似问题已被要求here,但该帖子上的解决方案没有一个适用于我,而且这个解决方案非常陈旧,导致我相信可能AWS中的某些内容已经发生了变化,需要提出一个新问题。可能只访问特定S3存储区的IAM组的AWS CloudFormation模板

基本上,我使用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 

提供的政策看起来是正确的,而不是过时的给我。您确定相关的IAM用户没有任何额外的组/策略应用于指定的AWS::IAM::Group之后吗?将授予他们意外的权限?

确认此问题的一种方法是从头开始创建一个新的IAM用户,并尝试在该处重现该问题。

+0

你是对的!我还将AWSLambdaFullAccess托管策略添加到组中,并且我没有意识到该策略正在添加完整的S3权限。我会将修改后的政策添加到问题中。 – Rabadash8820