Codepipeline:权限不足无法使用Amazon S3对象密钥访问工件

Abr*_*rmo 9 amazon-s3 amazon-web-services amazon-ecs docker aws-codepipeline

您好我使用以下配置创建了一个codepipeline项目:

  • S3中的源代码来自Bitbucket.
  • 使用CodeBuild构建,生成docker镜像并将其存储到Amazon ECS存储库中.
  • 部署提供商Amazon ECS.

所有进程都可以正常工作,直到它尝试部署时,由于某种原因,我在部署期间遇到以下错误:

权限不足无法使用位于Amazon S3工件桶'codepipeline-us-west-2-913731893217'中的Amazon S3对象密钥"FailedScanSubscriber/MyAppBuild/Wmu5kFy"访问工件.提供的角色没有足够的权限.

在构建阶段,它甚至能够在ECS存储库中创建新的docker镜像.

我尝试了一切,改变了IAM角色和策略,添加了对S3的完全访问权限,我甚至将S3存储桶设置为公共,没有任何效果.我没有选择,如果有人可以帮助我那将是美好的,我对AWS的经验很差,所以任何帮助都表示赞赏.

Abr*_*rmo 12

我找到了解决方案.真正的问题是,当部署提供程序设置为Amazon ECS时,我们需要生成一个输出工件,指示任务定义的名称和图像uri,例如:

post_build:
    commands:
      - printf '[{"name":"your.task.definition.name","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json

artifacts:
    files: imagedefinitions.json
Run Code Online (Sandbox Code Playgroud)

  • 根据[文档](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec),工件不在“阶段”序列中(pre_build、post_build)例如)如本回复中的代码所示。它不在相序之外! (3认同)
  • 这确实是解决方案,但就我而言,“name”应该是容器的名称。 (2认同)

Sha*_*era 8

当 AWS CodeDeploy 无法从 AWS CodeBuild 找到构建工件时,就会发生这种情况。如果您进入 S3 存储桶并检查路径,您实际上会看到工件对象不存在!

即使错误说明权限问题。由于缺少工件对象,可能会发生这种情况。

解决方案:正确配置artifacts部分buildspec.yml并正确配置AWS Codepipeline 阶段,指定输入和输出工件名称。

artifacts:
  files:
    - '**/*'
  base-directory: base_dir
  name: build-artifact-name
  discard-paths: no
Run Code Online (Sandbox Code Playgroud)

参考这篇文章 - https://medium.com/@shanikae/insufficient-permissions-unable-to-access-the-artifact-with-amazon-s3-247f27e6cdc3