我有一个 AWS 代码构建作业,当我以根用户身份手动初始化时,它工作正常。
我有一个代码管道行,当代码提交合并到 master 时,它应该启动构建作业。它会触发作业并启动构建,但在尝试下载源代码时失败。
我将完整的 S3/codebuild/codecommit 策略附加到管道,但它仍然抛出拒绝访问。
我缺少哪些权限?
当您已经有一个 CodeBuild 项目并将其集成到 CodePipeline 项目中时,通常会发生这种情况。Codebuild 现在不会从 CodeCommit/Github 存储库下载源代码。相反,它将尝试下载在 S3 的代码管道存储桶中创建的源构件。因此,您需要向 CodeBuild 角色提供权限,以访问 S3 中的代码pipline 存储桶。
您可以通过修改 Codebuild 角色的附加策略(或附加新策略(来执行此操作,该策略授予对以下操作的访问权限
s3:ListObjects
s3:GetObject
s3:ListBucket
代码管道存储桶及其对象
"arn:aws:s3:::codepipeline-bucket",
"arn:aws:s3:::codepipeline-bucket/*"
或者,您可以选择为此存储桶及其对象添加所有操作。您可以发布更改,它将起作用。如果不是,则为 LMK。
原因是 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 控制台上执行以下操作来跟踪错误源:
- 转到代码构建
- 在左侧面板上选择"生成项目">
- 选择您的项目,将显示构建历史记录
- 单击状态为失败的生成运行项
- 如果存在,请参阅生成日志中的错误
- 选择阶段详细信息
- CodeBuild 很可能在DOWNLOAD_SOURCE阶段失败,并显示以下错误消息:
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