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

时间:2018-02-23 20:06:12

标签: amazon-web-services docker amazon-s3 amazon-ecs aws-codepipeline

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

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

所有过程都可以正常运行,直到它尝试部署为止,由于某种原因,我在部署期间遇到以下错误:

  

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

在构建阶段,它甚至可以在ECS存储库中创建新的docker镜像。

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

3 个答案:

答案 0 :(得分:10)

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

#include <QApplication>
#include <QDialog>
#include <QLabel>
#include <QTimer>
#include <QVBoxLayout>

void notify (int intTime=1000)
{
    QDialog notify;
    QVBoxLayout *lay = new QVBoxLayout(&notify);
    //notify.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    notify.setWindowFlag(Qt::FramelessWindowHint);
    QLabel *lbl = new QLabel;
    lay->addWidget(lbl);
    lbl->setText("This is a test This is a test This is a test This is a test This is a test This is a test This is a test");
    QApplication::processEvents();
    QTimer::singleShot(intTime, &notify, SLOT(close()));
    notify.exec();
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    notify(5000);
    exit(0);
//  return a.exec();
}

答案 1 :(得分:2)

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

即使错误显示了权限问题。这可能是由于缺少工件对象而发生的。

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

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

答案 2 :(得分:0)

对我来说,问题是我的 CodeBuild 步骤使用默认的 AWS Managed S3 密钥加密工件。

我的部署步骤使用跨账户角色,因此无法检索工件。在我将 Codebuild 加密密钥更改为我的 CMK 之后,我的部署步骤就成功了。