从 S3 下载工件时代码构建访问被拒绝
Code Build Access denied while downloading artifact from S3
我的 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 获取工件 -
如何删除访问被拒绝消息?
这通常发生在您已有 CodeBuild 项目并将其集成到 CodePipeline 管道时。当您将 Codebuild 项目与 CodePipeline 集成时,该项目将从 CodePipeline Source 输出中检索它的源代码。源输出将存储在工件存储位置,这是一个 S3 存储桶,可以是 CodePipeline 创建的默认存储桶,也可以是您在创建管道时指定的存储桶。
因此,您需要向 CodeBuild 服务角色提供访问 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": "*"
}
]
}
政策模拟器
我的 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 获取工件 -
如何删除访问被拒绝消息?
这通常发生在您已有 CodeBuild 项目并将其集成到 CodePipeline 管道时。当您将 Codebuild 项目与 CodePipeline 集成时,该项目将从 CodePipeline Source 输出中检索它的源代码。源输出将存储在工件存储位置,这是一个 S3 存储桶,可以是 CodePipeline 创建的默认存储桶,也可以是您在创建管道时指定的存储桶。
因此,您需要向 CodeBuild 服务角色提供访问 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": "*"
}
]
}
政策模拟器