AWS错误:"访问被拒绝"在Jenkins构建之后的CodeDeploy中

时间:2016-12-06 17:12:04

标签: jenkins amazon-s3 aws-code-deploy

我已经在EC2实例上设置了Jenkins,该实例在更改推送到github中的主分支时运行构建。一旦jenkins上的构建通过,它就会触发一个压缩源代码并将其放入特定S3存储桶的过程。然后是Jenkins在配置中知道的CodeDeploy应用程序并触发部署以尝试从S3获取源代码ZIP,但它引发错误拒绝访问。看起来IAM角色没有从S3下载ZIP的正确访问权限和权限。

我的问题是试图了解IAM角色,它与Jenkins用户的关系以及IAM服务角色?如何设置权限以及谁应该获得这些权限?请指教并帮助我理解这一点。

1 个答案:

答案 0 :(得分:7)

CodeDeploy设置中通常有两种情况......“创建”部署的部分(通常是CI服务器/构建代理)和在目标实例上运行的CodeDeploy代理并执行实际部署。上半部分基本上推送进入CodeDeployment,后半部分是从中拉 ......这就是我喜欢它的形象。

对于CI服务器/构建代理,它们应具有IAM角色,其权限如下所示...这允许构建代理(1)访问您指定用于部署的S3存储桶,以及(2)访问CodeDeploy服务以创建修订等。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::YourDeploymentBucket"
        },
        {
            "Effect": "Allow",
            "Action": [
                "codedeploy:*"
            ],
            "Resource": "*"
        }
    ]
}

在目标EC2实例上,它们需要具有类似的内容......这使得CodeDeploy代理服务(1)可以访问S3存储桶以获取修订版本,以及(2)访问所有通用代码部署存储桶所以代理可以自我更新。当然,这些实例需要满足所有其他标准......通常,它们需要IAM角色并且需要安装代码部署代理。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::YourDeploymentBucket/*",
                "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-ap-northeast-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
                "arn:aws:s3:::aws-codedeploy-ap-south-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
                "arn:aws:s3:::aws-codedeploy-eu-central-1/*",
                "arn:aws:s3:::aws-codedeploy-eu-west-1/*",
                "arn:aws:s3:::aws-codedeploy-sa-east-1/*"
            ]
        }
    ]
}

如何分配这些权限取决于您...如果您的构建代理是EC2实例,最好将这些属性分配为附加到与实例关联的IAM角色的策略。对于目标部署计算机,您可以执行相同操作...创建策略并将其分配给与要作为目标的实例关联的IAM角色。