AWS IAM策略配置问询:读取他人S3桶及K8s Worker权限实现
AWS IAM 策略问题解答
问题1:如何编写IAM策略以授予读取其他所有用户S3桶的权限?
首先得明确一个核心前提:光有IAM策略还不够——其他用户的S3桶必须通过桶策略或者ACL主动授予你的IAM用户访问权限,否则即使IAM策略允许,你还是会被拒绝访问。
下面是能实现IAM层面授权的策略,它允许你的用户执行所有S3桶的列表操作和对象读取操作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::*/*" } ] }
重要提示
拿到这个策略后,你需要联系目标桶的所有者,让他们在桶策略中添加一条允许你IAM用户ARN的权限规则(比如允许ListBucket和GetObject),或者调整桶的ACL开放对应权限。否则这个IAM策略无法生效。
问题2:Kubernetes Worker的IAM策略实现
你的需求很明确:指定桶全权限、禁止本账号其他桶、允许访问所有第三方公开桶。之前用NotResource被拒绝是因为AWS不允许在同一个Statement里混用Resource和NotResource,而且逻辑上需要更清晰的权限组合。
完整策略方案
我给你整理了一个符合所有需求的策略,关键是用条件判断区分本账号和第三方账号的桶,再配合明确的拒绝规则:
{ "Version": "2012-10-17", "Statement": [ // 可选:允许查看所有桶的位置和全局桶列表,方便工具(比如s3cmd、kubectl)发现资源 { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, // 1. 允许指定桶(vg-k8s)的全读写权限 { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::vg-k8s", "arn:aws:s3:::vg-k8s/*" ] }, // 2. 允许读取所有非本账号的桶(覆盖所有第三方公开桶) { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::*", "arn:aws:s3:::*/*" ], "Condition": { "StringNotEquals": { "s3:ResourceAccount": "${aws:accountId}" } } }, // 3. 明确拒绝本账号内除vg-k8s外的所有S3操作,确保权限最小化 { "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::*", "arn:aws:s3:::*/*" ], "Condition": { "StringEquals": { "s3:ResourceAccount": "${aws:accountId}" }, "StringNotLike": { "s3:ResourceArn": [ "arn:aws:s3:::vg-k8s", "arn:aws:s3:::vg-k8s/*" ] } } } ] }
关键逻辑说明
s3:ResourceAccount条件:这个内置条件可以自动识别S3资源所属的AWS账号,${aws:accountId}会替换为当前IAM用户所在的账号ID,完美区分本账号和第三方账号的桶。- 第2个Statement:专门授权非本账号桶的读取操作,所有第三方公开桶(只要它们的桶策略允许公开访问)都能被访问,不用逐个添加授权。
- 第3个Statement:明确拒绝本账号内除指定桶外的所有操作,彻底杜绝意外访问本账号其他桶的可能,符合权限最小化原则。
你可以用AWS IAM Access Analyzer工具验证这个策略的有效性,确保没有权限冲突或者漏洞。
内容的提问来源于stack exchange,提问作者interfect
相关产品推荐
相关产品推荐

