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

AWS CodeDeploy访问S3出现权限拒绝错误求助

解决AWS CodeDeploy无法访问S3存储桶的Access Denied问题

先把你遇到的错误信息贴出来,方便精准定位:

2018-04-20 16:52:35 INFO [codedeploy-agent(2983)]: [Aws::CodeDeployCommand::Client 200 0.023779 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{"error_code":5,"script_name":"","message":"Access Denied","log":""}"},host_command_identifier:"WyJjb20uYW1hem9uLmFwb2xsby5kZXBsb3ljb250cm9sLmRvbWFpbi5Ib3N0Q29tbWFuZElkZW50aWZpZXIiLHsiZ...

我之前碰到过一模一样的问题,CodeDeploy的错误码5基本就是资源访问权限受阻的信号,咱们从这几个方向一步步排查:

1. 检查EC2实例的IAM角色权限

如果是用EC2实例部署,CodeDeploy Agent是通过实例绑定的IAM角色来访问S3的,这个角色必须具备访问目标桶的核心权限:

  • 至少要包含s3:GetObject(拉取部署包)和s3:ListBucket(遍历桶内文件)的权限
  • 给你个可直接复用的策略模板,记得把<your-bucket-name>换成你的实际桶名:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<your-bucket-name>",
                "arn:aws:s3:::<your-bucket-name>/*"
            ]
        }
    ]
}

注意:要把这个策略附加到EC2实例的IAM角色上,不是随便给某个IAM用户哦。

2. 排查S3存储桶的桶策略

有时候即使IAM角色有权限,桶策略里的Deny规则会直接覆盖允许权限:

  • 打开S3控制台,找到目标桶,进入「权限」-「桶策略」页面
  • 检查有没有针对CodeDeploy服务、实例角色ARN的拒绝语句,如果有,要么删除要么调整为允许规则
  • 也可以直接在桶策略里明确允许实例角色访问,示例如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<your-account-id>:role/<your-ec2-instance-role>"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<your-bucket-name>",
                "arn:aws:s3:::<your-bucket-name>/*"
            ]
        }
    ]
}

3. 检查S3桶的KMS加密设置

如果你的S3桶启用了KMS服务器端加密,那实例角色还需要额外的KMS解密权限:

  • 给实例角色附加包含kms:Decrypt权限的策略,目标资源是你用来加密桶的KMS密钥ARN
  • 示例策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>"
        }
    ]
}

4. 升级CodeDeploy Agent版本

旧版本的Agent可能存在兼容性问题,导致权限验证逻辑出错:

  • 对于Ubuntu/Debian系统,执行升级命令:
sudo apt-get update && sudo apt-get install codedeploy-agent
  • 对于CentOS/RHEL系统,执行升级命令:
sudo yum update codedeploy-agent

升级完成后记得重启Agent:sudo service codedeploy-agent restart

按照这几步排查下来,我当时很快就解决了Access Denied的问题,你可以挨个试试!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:31:35