Docker compose build with GitLab CI/CD throws botocore.exceptions.NoCredentialsError: Unable to locate credentials

Docker compose build with GitLab CI/CD throws botocore.exceptions.NoCredentialsError: Unable to locate credentials

我正在尝试 运行 在 GitLab CI/CD 管道上使用 docker 的应用程序。工作很成功,但我遇到了无法找到凭据的 boto3(AWS SDK)问题。

我已将 .aws 文件夹放在 /root/ 中,并且用于该文件夹的配置和凭据文件具有 aws_access_key_id 和 aws_secret_access_key。 docker文件也在复制这些:

COPY ./.aws/ /root/

现在,一旦 运行ning boto 似乎无法找到它们。

运行 aws 配置列表 returns 正确设置的配置文件。我没有做的一件事是设置配置文件名称并使用 [default].

查看文档应该在 .aws/credentials 和 .aws/config directory/files.

中搜索

现在在各种资源中搜索我发现所有关于需要 IAM 任务角色的信息,有些人说你不需要它们,你需要设置一个配置文件名称才能使其工作,看来我找不到解决方案.

有谁知道这里的解决方案是什么并且遇到了同样的问题?

也许您在源代码尾部的斜杠复制的是内容而不是 /root 中的文件夹。你应该试试:

COPY ./.aws /root/

您可以通过 sh.

执行您的容器来验证它们是否在您期望的位置
docker exec -it your-image sh
ls -al ~/.aws/

这应该会在正确的位置显示您的文件。


综上所述,我不知道这对您的管道设置有何影响。我没怎么用过这个 CI 工具。但是,如果您的任务 运行 允许您使用任务角色,那么使用角色几乎总是比将凭据复制到容器中更可取。

决议:

所以,我当时确实解决了这个问题,看来这是实现此目的的最安全、最简单的方法。

使用密码管理程序包,我从那里获取 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY,并在执行应用程序的主脚本中硬编码 AWS_REGION,然后将它们添加为环境变量容器是 运行.

这只需要几行代码就可以工作,无需对实例等进行任何更改...

os.environ["AWS_ACCESS_KEY_ID"] = AWS_ACCESS_KEY_ID
os.environ["AWS_SECRET_ACCESS_KEY"] = AWS_SECRET_ACCESS_KEY
os.environ["AWS_REGION"] = AWS_REGION