正确的aws-cli容器用户配置

问题描述

AWS CLI v2文档提供了一个选项和installing / configuring the cli via docker指南。该指南非常简单易懂,并且容器与关键项配合良好

  • 安装本地.aws目录以向容器提供凭据
  • 为所需的任何I / O工作安装$pwd

我正在s3中使用它,并且意识到我从s3复制到本地驱动器的所有文件显示root所拥有。

>docker run --rm -v "$HOME/.aws:/root/.aws:rw" -v "$PWD:/aws:rw" amazon/aws-cli s3 cp s3://xxx/hello .
download: s3://xxx/hello to ./hello
>ls -l
total 0
-rw-r--r-- 1 root root 0 Oct  2 09:43 hello

这是有道理的,因为该过程在容器中以root的身份运行,但并不理想。容器中没有其他任何用户,因此我不能只以“ kirk”身份运行。

>docker run --rm -u kirk -v "$HOME/.aws:/root/.aws:rw" -v "$PWD:/aws:rw" amazon/aws-cli s3 cp s3://xxx/hello .
docker: Error response from daemon: unable to find user kirk: no matching entries in passwd file.

是否可以以用户身份或通过委派用户对容器的访问来挂载卷?我不在乎(&不确定是否可以控制)容器内的用户,但是我希望该过程在主机系统上的用户上下文中运行。什么是正确的方法

解决方法

您可以使用-u ${UID}:${GID}的数值以图像中不存在的用户身份运行容器。例如:

docker run --rm \
    -u 1000:1000 \
    -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
    -e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
    -v ${PWD}:/aws:rw \
    amazon/aws-cli s3 cp s3://devops-example/lolz.gif .

...将文件复制为UID 1000 GID 1000。

注意:使用AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY环境变量来传递凭据,而不是装入凭据文件。 here提供了环境变量的完整列表。

AWS CLI copy as UID:GID 1000