使用根访问密钥和秘密密钥时的 S3 策略

S3 policy when using root access key and secret key

所以,我最近创建了一个新的 AWS 帐户来使用 S3 存储。我目前只有我的根用户帐户。我正在使用 java aws-sdk 上传文件。 S3Client 对象是使用我的根帐户密钥和访问密钥设置的。此外,只需使用 aws-sdk 内置的 putObject() 方法即可上传。这里没什么特别的。

现在,我尝试将策略附加到我的存储桶以限制存储桶的上传和下载功能。首先,我已将所有 S3object 权限授予我的存储桶,并且可以通过代码成功上传。然后我尝试在我的策略中只附加getObject,putObject,getObjectAcl,putObjectAcl,并且可以再次上传成功。

在此之后,我删除了putObject 和putObjectAcl,只有getObject 权限,但令人惊讶的是仍然可以使用我的代码上传文件。我相信删除上传权限会给我 403 访问被拒绝。是不是因为我正在使用我的根用户访问密钥和密钥,这提供了一些额外的权限?还是我在这里缺少一些基本的东西?

我的政策没有上传权限:

{
  "Id": "PolicyXXXXXXX",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "StmtXXXXXX",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectAcl",
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::11111111111:root"
        ]
      }
    }
  ]
}

您正在使用其访问密钥和秘密密钥的用户应该具有 putObject 权限。

如果基于资源的策略和基于身份的策略都适用于请求,则 AWS 会检查所有策略中至少一个 Allow。请参考here 政策评估逻辑。

如果基于身份的策略和/或基于资源的策略允许某个操作,则 AWS 允许该操作。