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

已配置s3:DeleteObject策略仍无法删除S3存储桶对象

问题分析与解决方案

问题背景

我有一个名为test-bucket的私有S3存储桶,已开启阻止所有公共访问,通过CloudFront分发内容。Web应用使用的IAM用户已附加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

已排查常规方案但无效,IAM用户和存储桶均配置了s3:DeleteObject权限。


排查与修复步骤

1. 升级存储桶策略版本

当前桶策略使用的是2008-10-17旧版本,该版本在IAM权限评估逻辑上存在局限性,建议替换为2012-10-17版本:

{
    "Version": "2012-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/*"
        }
    ]
}

新版本的策略与IAM权限模型兼容性更强,能避免旧版本带来的权限评估冲突。

2. 检查IAM用户的权限边界

如果该IAM用户设置了权限边界(Permission Boundary),即使附加了AmazonS3FullAccess托管策略,权限边界也会限制实际可用权限。需确认权限边界是否包含s3:DeleteObject操作,或者移除不必要的权限边界限制。

3. 验证存储桶策略中的ARN准确性

确保桶策略中第2条Statement的IAM用户ARN完全正确:

  • 检查AWS账号ID是否准确(替换打码的••••••••••••部分)
  • 确认用户名拼写无误
    ARN错误会导致桶策略的Allow规则无法匹配到目标用户,直接触发权限拒绝。

4. 排查对象级ACL权限

部分对象可能设置了独立的ACL规则,拒绝了该IAM用户的删除权限。可以通过AWS CLI查看目标对象的ACL:

aws s3api get-object-acl --bucket test-bucket --key your-object-key

如果存在拒绝该用户的条目,需修改对象ACL或通过桶策略覆盖(需确保桶策略优先级生效)。

5. 检查S3版本控制状态

如果存储桶开启了版本控制,s3:DeleteObject仅能删除对象的当前版本指针(生成删除标记),若需彻底删除对象版本,还需权限s3:DeleteObjectVersion。虽然AmazonS3FullAccess包含该权限,但可通过IAM模拟验证:

aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::your-account-id:user/your-username --action-names s3:DeleteObject s3:DeleteObjectVersion --resource-arns arn:aws:s3:::test-bucket/*

若模拟结果显示s3:DeleteObject被拒绝,需进一步定位权限阻塞点。

6. 使用IAM Access Analyzer诊断

通过AWS控制台的IAM Access Analyzer对该用户进行权限分析,它会自动识别导致权限拒绝的原因(如桶策略冲突、权限边界限制、组织SCP规则等),快速定位问题根源。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:04:57