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
我正在尝试 运行 在 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