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

AWS S3控制台移动对象返回403 Forbidden问题排查

问题原因与解决方案

你的推测完全正确:S3控制台的「移动对象」操作本质是后台执行复制对象到新路径 + 删除原对象两个步骤,而这两个操作的请求并非来自你当前所在的VPC,而是由AWS管理的控制台服务端发起的——这些请求的来源IP属于AWS内部网络,不满足你存储桶策略中aws:SourceVpc的校验条件,因此触发了Deny规则,返回403 Forbidden。

可行解决方案

1. 临时调整策略(最快实现)

直接移除当前的Deny策略语句,完成对象层级调整后再恢复。这是你目前正在使用的方式,适合一次性的层级整理操作。

2. 修改存储桶策略,添加IAM身份例外

在现有Deny规则中添加条件,允许指定的IAM用户/角色绕过VPC限制执行GetObject操作(移动时需要读取原对象)。修改后的策略示例:

{
    "Sid": "VpcGetObjectAccessOnly",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": [
        "arn:aws:s3:::XXXX",
        "arn:aws:s3:::XXXXXX/*"
    ],
    "Condition": {
        "And": [
            {
                "StringNotEquals": {
                    "aws:SourceVpc": "vpc-YYYYYY"
                }
            },
            {
                "StringNotEquals": {
                    "aws:PrincipalArn": "arn:aws:iam::你的账号ID:user/允许操作的用户名"
                }
            }
        ]
    }
}

这样,指定的IAM用户即可通过控制台正常移动对象,同时保留对其他非VPC来源GetObject请求的限制。

3. 在VPC内使用CLI/SDK执行移动操作

如果需要频繁调整对象结构,建议在VPC内的EC2、Lambda等资源上使用AWS CLI或SDK执行移动命令。例如用CLI:

# 移动单个对象
aws s3 mv s3://你的桶名/原路径/对象名 s3://你的桶名/新路径/对象名

# 递归移动整个目录下的对象
aws s3 mv s3://你的桶名/原目录/ s3://你的桶名/新目录/ --recursive

这类请求来自VPC内部(如果配置了S3 VPC端点,还能走私网访问),会满足aws:SourceVpc的条件,不会触发Deny规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:20:04