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

AWS CodeDeploy跨账号访问S3失败,请求协助排查

解决跨账号CodeDeploy从S3下载包权限拒绝的问题

手动能从S3复制文件,但CodeDeploy自动部署时权限失败,这种情况大多是因为CodeDeploy执行下载的身份逻辑和手动操作不同,或者配置里藏着细微的格式/权限疏漏,咱们一步步排查:

1. 先修正S3桶策略里的ARN格式错误

你提供的桶策略中,IAM角色的ARN存在多余空格:

"arn:aws:iam:: 222222222222:role/CodeDeployRole", "arn:aws:iam:: 222222222222:role/instanceprofilerole"

ARN的格式要求绝对严格,::和账号ID之间不能有空格——这个小错误会直接导致AWS无法识别权限主体,是权限拒绝的高发原因。修正后的正确ARN应该是:

"arn:aws:iam::222222222222:role/CodeDeployRole",
"arn:aws:iam::222222222222:role/instanceprofilerole"

2. 确认CodeDeploy服务角色的信任关系

CodeDeploy跨账号下载部署包时,用的是你指定的CodeDeployRole,而非EC2实例角色。除了S3权限,必须确保这个角色允许CodeDeploy服务扮演它,信任策略需要包含:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "codedeploy.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

如果没有这个信任关系,CodeDeploy根本无法使用该角色访问S3,自然会触发权限拒绝。

3. 检查部署包的细节权限

  • 确认CodeDeploy部署组里填写的S3路径完全正确,桶名、对象键都不能有拼写错误;
  • 如果你的S3桶开启了版本控制,需要在桶策略中额外添加s3:GetObjectVersion权限——CodeDeploy可能会尝试获取特定版本的部署包;
  • 你当前的Resource配置"arn:aws:s3:::mybucketname/*"已经覆盖了桶内所有子对象,这部分没问题,但要确认部署包确实存放在这个桶下。

4. 验证CodeDeploy执行流程的权限逻辑

手动复制成功可能是因为你用了高权限的IAM用户,但CodeDeploy是服务端发起请求,还要注意:

  • dev账号的S3桶有没有通过ACL限制外部账号访问?确保桶策略是允许跨账号访问的核心配置,没有被ACL覆盖;
  • 虽然手动复制没问题,但还是要确认EC2实例的实例配置文件确实关联了instanceprofilerole——CodeDeploy部署时可能会用实例角色做辅助操作。

最后验证步骤

修改完配置后,建议:

  1. 等待5-10分钟让IAM策略生效(IAM偶尔会有延迟);
  2. 重新触发一次CodeDeploy部署,观察下载阶段是否正常;
  3. 如果还是失败,去EC2实例的/opt/codedeploy-agent/deployment-root/目录查看部署日志,里面会有更具体的权限拒绝细节,能帮你精准定位缺失的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:27:55