docker 代码管道:权限不足无法使用Amazon S3对象密钥访问工件

km0tfn4u  于 2023-04-11  发布在  Docker
关注(0)|答案(3)|浏览(205)

你好,我创建了一个代码管道项目,配置如下:

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

所有过程都正常工作,直到它尝试部署时,由于某种原因,我在部署过程中遇到以下错误:
权限不足无法访问Amazon S3对象密钥为“FailedScanSubscriber/MyAppBuild/Wmu 5 kFy”的对象,该对象位于Amazon S3对象存储桶“codepipeline-us-west-2- 913731893217”中。提供的角色没有足够的权限。
在构建阶段,它甚至可以在ECS存储库中创建新的Docker镜像。
我尝试了所有方法,更改了IAM角色和策略,添加了对S3的完全访问权限,我甚至将S3存储桶设置为公共存储桶,但没有任何效果。我没有选择,如果有人能帮助我,那就太好了,我对AWS的经验很差,因此感谢任何帮助。

shyt4zoc

shyt4zoc1#

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

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

artifacts:
  files: imagedefinitions.json
klh5stk1

klh5stk12#

当AWS CodeDeploy无法从AWS CodeBuild中找到构建工件时,就会发生这种情况。如果您进入S3存储桶并检查路径,您实际上会看到工件对象不在那里!
即使错误指出了权限问题。这可能是由于缺少工件对象而发生的。

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

artifacts:
  files:
    - '**/*'
  base-directory: base_dir
  name: build-artifact-name
  discard-paths: no

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

s3fp2yjn

s3fp2yjn3#

对我来说,问题是我的CodeBuild步骤使用默认的AWS Managed S3密钥加密工件。
我的Deploy步骤使用了一个Cross-Account角色,因此它无法检索工件。一旦我将Codebuild加密密钥更改为我的CMK,因为它本来应该是,我的部署步骤成功了。

相关问题