我已经在EC2实例上设置了Jenkins,该实例在更改推送到github中的主分支时运行构建。一旦jenkins上的构建通过,它就会触发一个压缩源代码并将其放入特定S3存储桶的过程。然后是Jenkins在配置中知道的CodeDeploy应用程序并触发部署以尝试从S3获取源代码ZIP,但它引发错误拒绝访问。看起来IAM角色没有从S3下载ZIP的正确访问权限和权限。
我的问题是试图了解IAM角色,它与Jenkins用户的关系以及IAM服务角色?如何设置权限以及谁应该获得这些权限?请指教并帮助我理解这一点。
答案 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角色。