Apache Airflow镜像中非root用户无法访问AWS凭证求助
解决Airflow非root用户无法访问AWS凭证的问题
问题原因
- 当前
docker-compose.yml将本地$HOME/.aws挂载到容器的/root/.aws,仅root用户可访问该路径 - Airflow默认以非root用户(uid通常为50000)运行,其AWS CLI默认读取路径为
/home/airflow/.aws,无法访问root目录下的凭证文件 - 本地
.aws目录及文件的权限设置可能限制了非root用户的读取权限
解决方案
方案1:调整挂载路径并修正权限
修改docker-compose.yml中的volumes配置,将本地.aws挂载到Airflow用户的家目录:
volumes: - ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags - ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs - ${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config - ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins - $HOME/Desktop/project1:/opt/airflow/project1 - $HOME/Desktop/project2:/opt/airflow/project2 - $HOME/.aws:/home/airflow/.aws:ro user: "${AIRFLOW_UID:-50000}:0"
在宿主机执行命令,确保本地.aws目录权限允许容器内Airflow用户读取:
# 赋予其他用户读取权限(较宽松) chmod -R o+r $HOME/.aws # 更安全的方式:赋予root组读取权限(容器内Airflow用户属于root组) chmod -R g+r $HOME/.aws
方案2:通过环境变量指定凭证路径
若不想修改挂载路径,可在docker-compose.yml中添加环境变量,强制AWS CLI读取root目录下的凭证,同时调整权限:
environment: - AWS_CONFIG_FILE=/root/.aws/config - AWS_SHARED_CREDENTIALS_FILE=/root/.aws/credentials volumes: # 保持原有挂载配置不变 - $HOME/.aws:/root/.aws:ro user: "${AIRFLOW_UID:-50000}:0"
在宿主机执行命令开放权限:
chmod -R o+r $HOME/.aws
方案3:Dockerfile内配置安全权限(生产环境推荐)
在Dockerfile末尾添加步骤,创建Airflow用户专属的.aws目录并设置严格权限:
# 安装AWS CLI后新增 RUN mkdir -p /home/airflow/.aws && \ chown -R airflow:airflow /home/airflow/.aws && \ chmod -R 700 /home/airflow/.aws
配合方案1的挂载路径,确保仅Airflow用户可访问凭证文件。
验证方法
进入Airflow容器,切换到airflow用户后执行:
aws configure list-profiles
若返回profile_1、profile_2则说明问题已解决。
内容的提问来源于stack exchange,提问作者Nazim Tairov
相关产品推荐
相关产品推荐

