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

EC2实例执行S3上传遇AccessDenied权限问题求助

问题排查与解决方案

核心问题定位

EC2实例上执行aws sts get-caller-identity返回与本地相同的IAM用户身份,说明EC2没有使用你配置的EC2-to-S3实例角色,而是加载了本地用户的AWS凭证(比如~/.aws/credentials文件里的密钥)。这直接导致:

  • 桶策略仅允许EC2-to-S3角色访问,当前使用的my-user不在允许范围内;
  • 虽然本地my-user是管理员,但EC2环境下可能存在额外限制(如VPC端点策略、区域不匹配等)导致权限被拒。

具体排查步骤

1. 确认EC2实例的凭证来源

执行以下命令查看当前AWS CLI使用的凭证配置:

aws configure list

如果输出中显示credentials file路径(如~/.aws/credentials),说明确实在使用本地用户凭证,而非实例角色的临时凭证。

2. 切换到实例角色凭证

删除或重命名EC2实例上的本地AWS配置文件:

mv ~/.aws/credentials ~/.aws/credentials.bak
mv ~/.aws/config ~/.aws/config.bak

重新执行aws sts get-caller-identity,确认返回的Arn为arn:aws:iam::123123:role/EC2-to-S3(你的实例角色)。

3. 修正桶策略的账号ID

你的桶策略中Principal的账号是123123123,但本地用户的Account是123123,存在位数不一致的问题。修正桶策略中的账号ID为实际的12位AWS账号ID:

{
    "Version": "2012-10-17",
    "Id": "MyPolicy",
    "Statement": [
        {
            "Sid": "AllowGetPutFrom_EC2-to-S3_role",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123123:role/EC2-to-S3"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::lambda-layer-myapp/*",
                "arn:aws:s3:::lambda-layer-myapp"
            ]
        }
    ]
}

(替换123123为你的实际账号ID)

4. 排查VPC网络限制(若EC2在VPC内)

如果EC2部署在VPC中:

  • 若配置了S3 VPC端点,检查端点策略是否允许EC2-to-S3角色访问目标桶;
  • 若没有端点,确认EC2有互联网访问权限(通过NAT网关或公网IP),否则无法访问S3。

5. 验证实例角色权限

进入IAM控制台,确认EC2-to-S3角色附加的策略包含s3:*权限,且资源范围覆盖目标桶。

测试验证

完成上述步骤后,重新执行上传命令:

aws s3 cp myapp-layer.zip s3://lambda-layer-myapp/myapp-layer.zip

同时检查VS Code的AWS Toolkit是否能正常加载S3桶。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:47