我有一个私有 S3 存储桶(我们称之为
test-bucket
),所有公共访问都被阻止,还有一个为其提供服务的 CloudFront 发行版。
我的 Web 应用程序有一个 IAM 用户以编程方式访问 AWS 资源,我向该用户附加了托管授权策略
AmazonS3FullAccess
。
我还设置了以下存储桶策略:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ••••••••••••••"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::test-bucket/*"
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::••••••••••••:user/••••••••••••"
},
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::test-bucket/*"
}
]
}
不过,当尝试删除存储桶中的对象时,我得到了
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied
我一直在阅读与该主题相关的其他答案(像这个),但似乎没有一个有帮助,因为我的
DeleteObject
策略是在 IAM 用户和存储桶上设置的。
DeleteObject 权限已授予 IAM 用户,但使用 boto3 客户端的程序遇到删除错误?
看起来主体是某个使用boto3调用delete api的程序,并且上述策略没有授予它DeleteObject权限。 建议:将DeleteObject权限授予某个角色,并让从boto3调用的程序承担该角色。