繁体   English   中英

从 AWS SAM 管道中的 Dockerfile 运行 AWS CLI 时,如何指定 AWS 凭证?

[英]How do you specify AWS credentials when running AWS CLI from a Dockerfile in an AWS SAM pipeline?

我有一个应用程序使用:

  • 山姆
  • AWS S3
  • AWS Lambda 基于 Docker
  • AWS SAM 管道
  • Github function

在 Dockerfile 我有:

RUN aws s3 cp s3://mylambda/distilBERT distilBERT.tar.gz

导致错误消息:

Step 6/8 : RUN aws s3 cp s3://mylambda/distilBERT distilBERT.tar.gz
 ---> Running in 786873b916db
fatal error: Unable to locate credentials
Error: InferenceFunction failed to build: The command '/bin/sh -c aws s3 cp s3://mylambda/distilBERT distilBERT.tar.gz' returned a non-zero code: 1

我需要找到一种方法以安全的方式存储凭证。 是否有可能使用 GitHub 秘密或其他什么?

谢谢

Docker 默认无权访问主机上运行的.aws文件夹。 您可以将 AWS 凭证作为环境变量传递给 Docker 映像:

ENV AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
ENV AWS_SECRET_ACCESS_KEY=...

请记住,在 Dockerfile 中硬编码 AWS 凭证是一种不好的做法。 为了避免这种情况,您可以在运行时使用docker run -e MYVAR1docker run --env MYVAR2=foo arguments 传递环境变量。 其他解决方案是使用.env文件作为环境变量。

一个更复杂的解决方案是 map 从 Docker 映像中的主机的~/.aws文件夹的卷。

我的解决方案可能会更长一些,但我觉得它可以解决您的问题,并且

  1. 它不暴露任何秘密
  2. 它不需要任何手动工作
  3. 如果需要,以后可以轻松更改您的 AWS 密钥。

脚步:

  1. 您可以在 Github 操作(因为您已经提到 Github 操作)中添加环境变量作为机密。

  2. 在您的 Github CI/CD 流程中,当您构建 Dockerfile 时,您可以创建一个 aws 凭证文件。

      - name: Configure AWS credentials
        echo "
        [default]
        aws_access_key_id = $ACCESS_KEY
        aws_secret_access_key = $SECRET_ACCESS_KEY
        " > credentials
        with:
          ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }}
          SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

  1. 在您的 Dockerfile 中,您可以添加说明以复制此凭证文件并存储它
COPY credentials credentials
RUN mkdir ~/.aws
RUN mv credentials ~/.aws/credentials

更改您的凭据只需要更改您的 github 操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM