可能只访问特定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用户,并尝试在该处重现该问题。
你是对的!我还将AWSLambdaFullAccess托管策略添加到组中,并且我没有意识到该策略正在添加完整的S3权限。我会将修改后的政策添加到问题中。 – Rabadash8820