You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:42:53