使用根访问密钥和秘密密钥时的 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 允许该操作。
所以,我最近创建了一个新的 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 允许该操作。