0

我有一个应用程序使用:

  • 山姆
  • AWS S3
  • 基于 Docker 的 AWS Lambda
  • AWS SAM 管道
  • Github 功能

在 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秘密或其他东西有可能吗?

谢谢

4

2 回答 2

2

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

ENV AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
ENV AWS_SECRET_ACCESS_KEY=...

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

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

于 2021-12-10T21:36:51.810 回答
2

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

  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 操作。

于 2021-12-10T21:59:35.630 回答