【问题标题】:AWS Codebuild fails while downloading source. Message: Access DeniedAWS Codebuild 在下载源代码时失败。消息:拒绝访问
【发布时间】:2018-06-21 21:17:56
【问题描述】:

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

这是我的(简单)构建规范文件:

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 分钟前

消息拒绝访问

构建日志中唯一的日志如下

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

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

提前致谢。

CodeBuild 政策的屏幕截图。

【问题讨论】:

  • 您能否发布您用于 CodeBuild 项目的 IAM 角色的策略?
  • 完成。我编辑了帖子并添加了政策。
  • 所有这些策略是否都附加到您的 CodeBuild 项目中使用的角色?下载源期间的“拒绝访问”让我认为该策略没有像 codecommit:GitPull 或 s3:GetObject 这样的权限。

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


【解决方案1】:

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

{
"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/*"
    }
  ]
}

【讨论】:

    【解决方案2】:

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

    AccessDenied: Access Denied status code: 403
    

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

    【讨论】:

    • 如果在步骤之间未正确定义输出和输入(我的情况),单个构建可能会发生同样的情况
    【解决方案3】:

    我遇到了同样的错误,访问 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"
      ]
    }
    

    【讨论】:

    • 这是对我的修复!谢谢!
    【解决方案4】:

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

    所以 S3 中的所有内容都是静态加密的。如果您未指定加密方式,S3 中的对象将使用默认 KMS 密钥进行加密。其他账户将无法访问存储桶中的对象,因为他们没有用于解密的 KMS 密钥。因此,要解决此问题,您需要创建自己的 KMS 密钥并使用它进行加密(让 CodeBuild 使用您在本例中创建的此 KMS 密钥)。然后通过配置 AssumeRole 权限允许其他账户中的角色使用此密钥。据我所知,大多数 S3 访问拒绝发生在无法解密对象时。这在此处指定了 Troubleshoot S3 403 Access Denied - 加密对象也会导致 403 Access Denied。

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

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题。

      我的来源来自 S3 文件夹。修复涉及将/ 放在源路径的末尾。似乎没有/ CodeBuild 认为这是一个关键。

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

      【讨论】:

      • / 是从哪里丢失的?
      • / 在源路径的末尾。 (更正)
      猜你喜欢
      • 1970-01-01
      • 2018-07-03
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      相关资源
      最近更新 更多