如何解决代码部署的DownloadBundle阶段出现ACCESS DENIED错误

17

附上的截图显示错误信息。我没有stderr消息可供排除故障。我已经将必要的EC2 IAM访问权限设置为S3。那么问题可能是什么?

[1] [2]

我也添加了IAM用户需求,所以我不确定出了什么问题。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::codepipeline-ap-southeast-1-617020163322/*",
                "arn:aws:s3:::aws-codedeploy-us-east-2/*",
                "arn:aws:s3:::aws-codedeploy-us-east-1/*",
                "arn:aws:s3:::aws-codedeploy-us-west-1/*",
                "arn:aws:s3:::aws-codedeploy-us-west-2/*",
                "arn:aws:s3:::aws-codedeploy-ca-central-1/*",
                "arn:aws:s3:::aws-codedeploy-eu-west-1/*",
                "arn:aws:s3:::aws-codedeploy-eu-west-2/*",
                "arn:aws:s3:::aws-codedeploy-eu-west-3/*",
                "arn:aws:s3:::aws-codedeploy-eu-central-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
                "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
                "arn:aws:s3:::aws-codedeploy-ap-south-1/*",
                "arn:aws:s3:::aws-codedeploy-sa-east-1/*"
            ]
        }
    ]
}
4个回答

20

我遇到了同样的问题,通过查询目标实例的IAM角色(在实例描述选项卡下)和已附加的S3访问策略来解决。


3
如果您要部署到 EC2 实例,并且该实例上的 CodeDeploy 代理正在从 S3 拉取构件,则需要确保 EC2 IAM 实例角色具有访问 S3 的权限。 - alex
1
你有关于如何附加这个S3策略的说明链接吗?策略名称是什么?等等? - mattylantz
还要注意,如果您正在使用KMS密钥加密S3存储桶中的构建工件,则实例配置文件还需要一个允许访问KMS密钥的策略。 - clav

7

DownloadBundle生命周期事件相关的错误有:

  1. 存储桶位于与流水线不同的区域(从您的截图中可以看出不是这种情况)。
  2. 由于附加到您的EC2实例的IAM实例配置文件没有权限访问Amazon S3中的应用程序修订版本。

“arn:aws:s3:::codepipeline-ap-southeast-1-617020163322”存储捆绑包的存储桶是否是指定的?此文件夹是否由CodePipeline创建?

如果是,我的建议是使用与CodePipeline用于存储构件不同的存储桶。特别是因为您需要拥有存储桶策略来授予实例下载应用程序修订版本所需的权限。


5

我有跟你一样的问题并解决了它。 我忘记在我的EC2扮演角色中添加KMS权限。 我的S3构件桶使用KMS加密,因此由于CodePipeline使用KMS,它会向S3桶抛出ACCESS DENIED。 然而,该错误不够友好,无法告诉用户实际问题所在。


那对我有用!被“拒绝访问”语句送入深入研究S3权限和IAM策略是很烦人的 :-( - danielcraigie
我完全同意。我花了好几天的时间追踪这个问题,一直以为是跨账户问题等等。直到我将它分解成最简单的步骤,才意识到错误在于KMS密钥没有授予实例配置文件角色权限。唉。你的评论帮助我找对了方向。谢谢! - badfun
你选择了哪种策略权限? - Érica Santos
已经有一段时间了,但为了使它更简单,请使用kms:*。如果您想要租用特权,请查看操作表中的解密部分--https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html - Rodel

1

今天我遇到了这个问题,想要增加一些解决方法。

我的问题是使用自定义构件桶(不是由CodePipeline创建的),它应该关闭版本控制(暂停),我的EC2配置文件具有以下权限:

          "Effect": 
           "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetEncryptionConfiguration",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": "*"

在我的CodeDeploy盒子上,将添加到EC2策略中解决了问题。
由于版本控制已关闭,这很令人困惑。
简而言之,当有疑问时,请给予版本控制权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接