下载源时,AWS Codebuild失败。消息:访问被拒绝

时间:2018-01-12 11:52:50

标签: node.js amazon-web-services elastic-beanstalk aws-codepipeline aws-codebuild

我创建了一个使用docker image for node8的CodeBuild项目。 CodeBuild项目的目的是进行单元测试。它需要CodeCommit的输入工件。在buildspec.yml中,它运行一个测试命令。

这是我的(简单)buildspec文件:

version: 0.2

phases:
  install:
    commands:
     - echo "install phase started"
     - npm install
     - echo "install phase ended"
  pre_build: 
    commands:
     - echo "pre_build aka test phase started"
     - echo "mocha unit test"
     - npm test
     - echo "mocha unit test ended"
  build:
    commands:
     - echo "build phase started"
     - echo "build complete"

DOWNLOAD_SOURCE阶段的构建失败,其中包含以下内容:

  

PHASE - DOWNLOAD_SOURCE

     

开始时间 2分钟前

     

结束时间 2分钟前

     

消息拒绝访问

构建日志中的唯一日志是以下

  

[Container] 2018/01/12 11:30:22等待代理ping

     

[Container] 2018/01/12 11:30:22等待DOWNLOAD_SOURCE

提前致谢。

CodeBuild政策的屏幕截图。

enter image description here

5 个答案:

答案 0 :(得分:7)

我找到了解决办法。这是我的权限问题。我添加了这个以使它工作。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:logs:eu-west-1:723698621383:log-group:/aws/codebuild/project",
            "arn:aws:logs:eu-west-1:723698621383:log-group:/aws/codebuild/project:*"
        ],
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ]
    },
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::codepipeline-eu-west-1-*"
        ],
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "ssm:GetParameters"
        ],
        "Resource": "arn:aws:ssm:eu-west-1:723698621383:parameter/CodeBuild/*"
    }
]

}

答案 1 :(得分:1)

我有类似的错误,如果有帮助,它将发布我的修复程序。我正在使用CodePipeline,并且发生了两个单独的构建。 Build#1将完成其构建,并且其输出工件将成为Build#2的输入工件。版本2在DOWNLOAD_SOURCE阶段失败,出现以下错误:

AccessDenied: Access Denied status code: 403

问题在于,在我针对Build#1的构建规范中,我没有定义工件。在Build#1中调出工件文件/文件夹后,Build#2便可以毫无问题地下载源代码。

答案 2 :(得分:1)

我遇到了同样的错误,访问S3存储桶url时出现权限问题。最初,我将自动生成的codepipeline-us-west-2- *存储桶名称与策略一起使用:

{
  "Effect": "Allow",
  "Resource": [
      "arn:aws:s3:::codepipeline-us-west-2-*"
  ],
  "Action": [
      "s3:PutObject",
      "s3:GetObject",
      "s3:GetObjectVersion",
      "s3:GetBucketAcl",
      "s3:GetBucketLocation"
  ]
}

更改为我自己的存储桶名称后,该策略必须更新为:

{
  "Effect": "Allow",
  "Resource": [
      "arn:aws:s3:::project-name-files/*"
  ],
  "Action": [
      "s3:PutObject",
      "s3:GetObject",
      "s3:GetObjectVersion",
      "s3:GetBucketAcl",
      "s3:GetBucketLocation"
  ]
}

答案 3 :(得分:0)

我遇到了同样的问题。

我的来源来自S3文件夹。解决方法是在源路径的末尾放置一个/。似乎没有/的CodeBuild认为它是关键。

希望这可以帮助某人节省时间。

答案 4 :(得分:0)

我遇到相同的症状,但是我的问题是由于this post中所述的S3存储桶上的默认加密。

因此,S3中的所有内容都在静止状态下进行了加密。如果不指定加密方式,则S3中的对象将使用默认的KMS密钥进行加密。其他帐户将无法访问存储桶中的对象,因为它们没有用于解密的KMS密钥。因此,要解决此问题,您需要创建自己的KMS密钥并使用它进行加密(在这种情况下,请让CodeBuild使用您创建的此KMS密钥)。然后,通过配置AssumeRole权限,允许其他帐户中的角色使用此密钥。从我看来,大多数S3访问拒绝都发生在无法解密对象的过程中。并且在“故障排除S3 403访问被拒绝”中进行了指定-加密的对象也将导致403访问被拒绝。

在我的情况下,正在使用的密钥不匹配,这导致了解密失败。