You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:16:11