我的CodeBuild使用CodePipeline配置。 S3是我的工件商店。尽管已附加具有足够访问权限的IAM角色,但我仍然收到拒绝访问消息。
错误消息的屏幕截图
我已经检查了与Codebuild相关的服务角色。它具有以下政策。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build",
"arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build:*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-ap-southeast-1-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
]
}
]
}
但是当我使用IAM策略验证器对其进行测试时,会收到以下错误消息。
基于对这个问题的公认答案,我目前所拥有的策略应该允许我从S3获得工件,而不会出现任何问题-AWS Codebuild fails while downloading source. Message: Access Denied
如何摆脱拒绝访问的消息?
答案 0 :(得分:2)
通常在已经有CodeBuild项目并将其集成到CodePipeline管道中时发生。当您将Codebuild项目与CodePipeline集成时,该项目将从CodePipeline Source输出中检索其源。源输出将存储在工件存储位置,该位置是一个S3存储桶,可以是CodePipeline创建的默认存储桶,也可以是在管道创建时指定的存储桶。
因此,您需要向CodeBuild Service角色提供权限,才能访问S3中的CodePipline存储桶。该角色将需要权限才能将S3对象放入存储桶以及获取对象。
我尝试过并且同样有效的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CodeBuildDefaultPolicy",
"Effect": "Allow",
"Action": [
"codebuild:*",
"iam:PassRole"
],
"Resource": "*"
},
{
"Sid": "CloudWatchLogsAccessPolicy",
"Effect": "Allow",
"Action": [
"logs:FilterLogEvents",
"logs:GetLogEvents"
],
"Resource": "*"
},
{
"Sid": "S3AccessPolicy",
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:GetObject",
"s3:List*",
"s3:PutObject"
],
"Resource": "*"
}
]
}
策略模拟器