![](/img/trans.png)
[英]do you have to pass SSO profile credentials in order to assume the IAM role using boto3
[英]Why am I getting the error The source profile "default" must have credentials using Boto3 in Docker?
我有一个dockerfile
:
FROM apache/airflow:2.1.2-python3.8
ENV PYTHONPATH "${PYTHONPATH}:/"
ADD ./aws/credentials /home/airflow/.aws/credentials
ADD ./aws/config /home/airflow/.aws/config
RUN pip install -r requirements.pip
还有一个docker-compose.yml
:
version: '3'
services:
webserver:
image: airflow2
command: webserver
ports:
- 8080:8080
healthcheck:
test: [ "CMD", "curl", "--fail", "http://localhost:8080/health" ]
interval: 10s
timeout: 10s
retries: 5
restart: always
build:
context: .
dockerfile: Dockerfile
env_file:
- ./airflow.env
container_name: webserver
volumes:
- ./database_utils:/database_utils
scheduler:
image: sch-airflow2
command: scheduler
healthcheck:
test: [ "CMD-SHELL", 'airflow jobs check --job-type SchedulerJob --hostname "$${HOSTNAME}"' ]
interval: 10s
timeout: 10s
retries: 5
restart: always
container_name: scheduler
build:
context: .
dockerfile: Dockerfile
env_file:
- ./airflow.env
volumes:
volumes:
- ./database_utils:/database_utils
depends_on:
- webserver
当运行使用 boto3 连接到 s3 的脚本时,它工作正常。 这里的问题是我将凭据添加到图像中,这是一种不好的做法。 然后我从dockerfile
中删除这一行:
ADD ./aws/credentials /home/airflow/.aws/credentials
我将其添加到docker-compose
卷部分:
- ./aws:/home/airflow/.aws
如果我现在运行脚本,它会失败:
botocore.exceptions.InvalidConfigError: The source profile "default" must have credentials.
我了解错误并检查了 docker 容器中是否提供了凭据:
aws configure list
看起来不错,所以我不明白为什么会返回错误。 我还尝试在./airflow.env
中设置 ENV 变量:
AWS_ACCESS_KEY_ID=XXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXX
我实现它的唯一方法是使用 dockerfile 中的ADD
。
某处正在指定要使用的默认配置文件。
这可能是因为:
--profile default
指定为命令行参数AWS_PROFILE
环境变量,其值为default
~/.aws/credentials
包含[default]
~/.aws/config
文件包含[default]
以上按优先级排序,告诉 AWS 使用default
配置文件。
仔细检查默认配置文件未在上述任何内容中被引用(很可能是您的配置或凭据文件)。
一个可能的原因是,正如在 Docker 文档中描述ADD
时所解释的:
所有新文件和目录都使用 0 的 UID 和 GID 创建,除非可选的
--chown
标志指定给定的用户名、组名或 UID/GID 组合来请求添加内容的特定所有权。
而当您将主机目录配置为卷时,将保留主机的文件权限。 也许 AWS 开发工具包在通过匹配 UID/GID 查找一组有效凭证时会考虑到这一事实。
另一个可能的原因可能是 AWS 开发工具包在安装软件时执行某种初始化。 您可以通过在 Dockerfile 中运行之前运行pip
来验证这一点:
ADD ./aws/credentials /home/airflow/.aws/credentials
并查看该软件是否仍然可以找到合适的凭据集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.