AWS Error: "Access Denied" in CodeDeploy after Jenkins build
我已经在一个 EC2 实例上设置了 Jenkins,该实例在将更改推送到 github 中的主分支时运行构建。一旦在 jenkins 上的构建通过,它就会触发一个过程来压缩源代码并将其放入特定的 S3 存储桶中。然后 Jenkins 在配置中知道的 CodeDeploy 应用程序并触发部署以尝试从 S3 获取源代码 ZIP,但它引发错误访问被拒绝。似乎 IAM 角色没有从 S3 下载 ZIP 的正确访问权限。
我的问题是试图了解 IAM 角色、它与 Jenkins 用户的关系以及 IAM 服务角色?如何设置权限以及谁应该获得这些权限?请建议并帮助我理解这一点。
在 CodeDeploy 设置中通常有两种情况..."创建"部署的部分(通常是您的 CI 服务器/构建代理)和 CodeDeploy 代理在目标实例上运行并执行实际部署。前半部分本质上是推进 CodeDeployment,后半部分是从中拉出来的……这就是我喜欢将其可视化的方式。
对于 CI 服务器/构建代理,他们应该有一个具有以下权限的 IAM 角色... 这允许构建代理 (1) 访问您指定用于部署的 S3 存储桶和 (2) 访问用于创建修订等的 CodeDeploy 服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | { "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 角色并且需要安装代码部署代理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | { "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 角色。