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

跨AWS账号从S3复制文件到EC2时遇AccessDenied错误求助

跨账号SSE-S3加密对象复制到EC2的权限问题解决

你遇到的问题核心是跨账号访问SSE-S3加密的S3对象时,AWS托管KMS密钥(aws/s3)的权限配置缺失——虽然你给了EC2角色KMS Decrypt权限,但还需要S3账号下的KMS密钥策略允许该角色访问,同时要确保权限中的密钥ARN精准匹配。

1. 修正EC2角色的KMS权限目标ARN

SSE-S3使用的是AWS托管的KMS密钥,其ARN格式为:arn:aws:kms:区域:S3账号ID:key/aws/s3。你的EC2角色权限中必须明确指定这个ARN,不能用自定义密钥ARN或泛化的资源范围。

正确的IAM权限示例:

{
    "Version": "2012-10-17",
    "Statement": [
        // 保留已配置的S3权限
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::你的S3桶名",
                "arn:aws:s3:::你的S3桶名/*"
            ]
        },
        // 修正后的KMS解密权限
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:你的区域:S3账号ID:key/aws/s3"
        }
    ]
}

2. 修改S3账号下AWS托管KMS密钥的密钥策略

AWS托管的aws/s3密钥默认策略不允许跨账号访问,需要手动添加允许EC2角色的解密权限:

  1. 登录S3所在账号的AWS控制台,进入KMS服务
  2. 在左侧菜单选择AWS管理的密钥,找到aws/s3密钥
  3. 切换到密钥策略标签,点击编辑
  4. 在原策略中插入以下语句(替换占位符为实际信息):
{
    "Sid": "AllowCrossAccountEC2Decrypt",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::EC2所在账号ID:role/ec2-role"
    },
    "Action": "kms:Decrypt",
    "Resource": "*"
}
  1. 保存修改

3. 排查额外限制因素

  • 确认S3桶、EC2实例、KMS密钥的区域完全一致(比如us-east-1不能写成us-east-1a或其他变体)
  • 检查AWS Organizations的服务控制策略(SCP)是否禁止了跨账号的kms:Decrypt操作,若有需要调整SCP规则

4. 验证权限

修改完成后,在EC2实例上执行测试命令验证:

aws s3 cp s3://你的S3桶名/测试文件 ./

若仍报错,查看CloudTrail中kms:Decrypt事件的详细拒绝原因,定位是否存在策略未生效或资源ARN不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:16:11