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

S3 Bucket访问被拒:如何调整IAM权限及桶策略恢复管理权限?

问题解决:恢复管理员对S3 Bucket的操作权限

问题原因

你当前的桶策略中,DenyAllOtherRequests 语句使用了 Principal: "*",这会拒绝所有主体的所有S3操作。由于AWS权限评估逻辑里,Deny 策略优先级高于任何 Allow 策略(包括IAM管理员权限),所以即便你拥有管理员角色,也会被这个Deny策略阻止操作该桶。

解决方案

核心思路是让Deny策略仅拒绝Role1和你的管理员身份之外的请求,具体有两种实现方式:

方式1:用NotPrincipal修改Deny语句

将原有的Deny语句替换为以下内容,通过NotPrincipal明确排除允许的EC2角色和你的管理员身份:

{
  "Version": "2012-10-17",
  "Id": "MyBucketPolicy",
  "Statement": [
    {
      "Sid": "AllowEC2Instances",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::AWS-ID:role/Role1"          
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket-name",
        "arn:aws:s3:::bucket-name/*"
      ]
    },
    {
      "Sid": "DenyAllOtherRequests",
      "Effect": "Deny",
      "NotPrincipal": {
        "AWS": [
          "arn:aws:iam::AWS-ID:role/Role1",
          "arn:aws:iam::AWS-ID:user/你的管理员用户名" // 替换为你的管理员用户ARN
          // 如果是管理员角色,替换为:"arn:aws:iam::AWS-ID:role/你的管理员角色名"
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket-name",
        "arn:aws:s3:::bucket-name/*"
      ]
    }
  ]
}

方式2:添加管理员专属Allow语句(配合方式1使用)

在Deny语句前添加单独的管理员访问许可,但必须配合方式1的NotPrincipal修改,否则Deny策略依然会覆盖Allow权限:

{
  "Version": "2012-10-17",
  "Id": "MyBucketPolicy",
  "Statement": [
    {
      "Sid": "AllowEC2Instances",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::AWS-ID:role/Role1"          
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket-name",
        "arn:aws:s3:::bucket-name/*"
      ]
    },
    {
      "Sid": "AllowAdminAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AWS-ID:user/你的管理员用户名" // 替换为你的管理员身份ARN
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket-name",
        "arn:aws:s3:::bucket-name/*"
      ]
    },
    {
      "Sid": "DenyAllOtherRequests",
      "Effect": "Deny",
      "NotPrincipal": {
        "AWS": [
          "arn:aws:iam::AWS-ID:role/Role1",
          "arn:aws:iam::AWS-ID:user/你的管理员用户名"
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket-name",
        "arn:aws:s3:::bucket-name/*"
      ]
    }
  ]
}

操作步骤

  1. 确认你的管理员身份ARN:
    • IAM用户ARN格式:arn:aws:iam::你的AWS账号ID:user/用户名
    • IAM角色ARN格式:arn:aws:iam::你的AWS账号ID:role/角色名
  2. 替换示例中的占位符(AWS-ID、bucket-name、管理员ARN)
  3. 将修改后的策略应用到目标S3 Bucket

内容的提问来源于stack exchange,提问作者DrTheiss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:55:04