SCP策略配置疑问:拒绝S3桶公共访问及白名单设置
SCP策略白名单配置建议
你当前的策略尝试用aws:SourceArn做白名单,但这个条件键是用来标识触发请求的源资源ARN(比如Lambda函数、SNS主题等),并不适合匹配你要修改的目标S3桶。针对你的需求,这里提供几种不同场景的白名单配置方案:
1. 白名单特定S3桶(允许修改指定桶的Public Access Block)
使用s3:ResourceArn条件键匹配目标桶的ARN,这样只有白名单内的桶能被修改,其他桶全部拒绝:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyBlockPublicAccessExceptWhitelistedBuckets", "Effect": "Deny", "Action": "s3:PutBucketPublicAccessBlock", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceArn": [ "arn:aws:s3:::blockpublicaccesstest", "arn:aws:s3:::your-second-whitelisted-bucket" ] } } } ] }
如果需要支持多个白名单桶,直接在数组里添加对应的ARN即可。
2. 白名单特定IAM实体(用户/角色)
如果需要允许特定IAM用户或角色执行该操作(不管操作哪个桶),可以用aws:PrincipalArn条件键:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyBlockPublicAccessExceptWhitelistedPrincipals", "Effect": "Deny", "Action": "s3:PutBucketPublicAccessBlock", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789012:role/your-allowed-role" } } } ] }
如果要同时白名单多个IAM实体,同样把值改成数组形式。
3. 白名单整个AWS账号
如果要允许某个账号下的所有实体执行该操作,使用aws:PrincipalAccount条件键:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyBlockPublicAccessExceptWhitelistedAccount", "Effect": "Deny", "Action": "s3:PutBucketPublicAccessBlock", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "123456789012" } } } ] }
4. 组合场景:同时限制桶和IAM实体
如果需要同时满足“白名单桶”和“白名单IAM实体”两个条件,可以用And操作符组合多个条件:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyBlockPublicAccessExceptCombinedWhitelist", "Effect": "Deny", "Action": "s3:PutBucketPublicAccessBlock", "Resource": "arn:aws:s3:::*", "Condition": { "And": [ { "StringNotEquals": { "s3:ResourceArn": "arn:aws:s3:::blockpublicaccesstest" } }, { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789012:user/allowed-user" } } ] } } ] }
这个策略的逻辑是:只有当操作的桶不在白名单,且执行操作的IAM实体不在白名单时,才拒绝请求。换句话说,只要满足其中一个白名单条件,就允许操作。
内容的提问来源于stack exchange,提问作者bzaidi
相关产品推荐
相关产品推荐

