从S3下载工件

时间:2018-12-13 05:55:03

标签: amazon-web-services aws-codepipeline aws-codebuild

我的CodeBuild使用CodePipeline配置。 S3是我的工件商店。尽管已附加具有足够访问权限的IAM角色,但我仍然收到拒绝访问消息。

错误消息的屏幕截图

Code Build Error message

我已经检查了与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策略验证器对其进行测试时,会收到以下错误消息。

enter image description here

基于对这个问题的公认答案,我目前所拥有的策略应该允许我从S3获得工件,而不会出现任何问题-AWS Codebuild fails while downloading source. Message: Access Denied

如何摆脱拒绝访问的消息?

1 个答案:

答案 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": "*"
  }
 ]
}

策略模拟器

enter image description here

AWS Reference