我有一个AWS codebuild作业,当我以root用户身份手动启动时,它可以正常工作。
我有一个codepipe行,当codecommit合并到master时,它应该启动构建作业。它会触发作业和构建开始,但在尝试下载源时失败。
我已将完整的S3 / codebuild / codecommit策略附加到管道,但它仍然会拒绝访问。
我错过了哪些权限?
答案 0 :(得分:6)
当您已经拥有CodeBuild项目并将其集成到CodePipeline项目时,通常会发生这种情况。 Codebuild现在不从CodeCommit / Github repo下载源代码。相反,它将尝试下载在S3中的codepipeline存储桶中创建的源工件。 因此,您需要提供CodeBuild角色的权限才能访问S3中的codepipline存储桶。
您可以通过修改 Codebuild角色的附加政策(或附加新政策)来执行此操作,以便访问以下操作
s3:ListObjects
s3:GetObject
s3:ListBucket
您的 Codepipeline存储桶及其对象
"arn:aws:s3:::codepipeline-bucket",
"arn:aws:s3:::codepipeline-bucket/*"
或者您可以选择为此存储桶及其对象添加所有操作。您可以发布更改,它可以工作。 Lmk如果没有。
答案 1 :(得分:0)
原因是CodeBuild服务角色需要访问CodePipeline S3存储桶的权限。 要解决此问题,您可以附加一个内联策略或修改现有策略,以允许这些操作访问您的CodePipeline S3存储桶中的对象(为该策略指定资源)
s3:GetObject
s3:GetObjectVersion
s3:PutObject
这是json中的策略,请记住将S3-BUCKET-NAME替换为您的实际代码管道s3存储桶名称。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
}
]
}
要查找S3存储桶名称,您可以在AWS控制台上执行以下操作以跟踪错误源:
CLIENT_ERROR: AccessDenied: Access Denied status code: 403, request id:
requestId, host id: hostId for primary source and source version
arn:aws:s3:::S3-BUCKET-NAME/path