在Docker文件中访问AWS Secret

57次阅读
没有评论

问题描述

在AWS上运行一个Docker文件,希望在Docker文件中访问AWS Secret。用户的Docker文件如下所示:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y python3
RUN apt-get install -y git
RUN git init
RUN git clone https://<HARDCODED-ACCESS-TOKEN>@github.com/<folder>/<repo>.git ./new_folder

用户已经创建了一个名为”git_access_secret”的AWS Secret,其中包含他的访问令牌,他希望在Docker文件中访问该Secret,使得Docker文件可以像下面的示例一样工作:

RUN git clone https://secrets[git_access_secret]@github.com/<folder>/<repo>.git ./new_folder

用户想知道如何实现这个目标。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Docker中,可以使用--build-arg参数将AWS Secret传递给Docker构建过程中的环境变量。以下是实现这一目标的步骤:
1. 在Docker文件中,使用ARG指令定义一个环境变量,用于接收AWS Secret的值。例如:

ARG GIT_ACCESS_SECRET
  1. 在构建Docker镜像时,使用--build-arg参数将AWS Secret的值传递给构建过程中的环境变量。例如:
docker build --build-arg GIT_ACCESS_SECRET=<your_secret_value> -t your_image_name .
  1. 在Docker文件中,使用${GIT_ACCESS_SECRET}来引用环境变量的值。例如:
RUN git clone https://secrets[${GIT_ACCESS_SECRET}]@github.com/<folder>/<repo>.git ./new_folder

完整的Docker文件示例:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y python3
RUN apt-get install -y git
RUN git init
ARG GIT_ACCESS_SECRET
RUN git clone https://secrets[${GIT_ACCESS_SECRET}]@github.com/<folder>/<repo>.git ./new_folder

在上面的示例中,我们首先使用ARG指令定义了一个名为GIT_ACCESS_SECRET的环境变量,用于接收AWS Secret的值。然后,在构建Docker镜像时,我们使用--build-arg参数将AWS Secret的值传递给环境变量。最后,在Docker文件中,我们使用${GIT_ACCESS_SECRET}来引用环境变量的值,从而实现了在Docker文件中访问AWS Secret的目标。

方案2

使用AWS Systems Manager Parameter Store来存储和访问AWS Secret可能是更安全和可管理的方法。
另一种更安全和可管理的方法是使用AWS Systems Manager Parameter Store来存储和访问AWS Secret。Parameter Store是一种安全的、分层次的存储服务,可以用来存储和检索敏感数据,如密码、API密钥和访问令牌。
以下是实现这一目标的步骤:
1. 在AWS控制台上,打开AWS Systems Manager服务。
2. 在左侧导航栏中,选择”Parameter Store”。
3. 点击”Create parameter”按钮,创建一个新的参数。
4. 在参数的”Name”字段中,输入一个唯一的名称,用于标识参数。
5. 在参数的”Description”字段中,输入参数的描述信息(可选)。
6. 在参数的”Type”字段中,选择”SecureString”。
7. 在参数的”Value”字段中,输入AWS Secret的值。
8. 点击”Create parameter”按钮,创建参数。
9. 在Docker文件中,使用${aws ssm get-parameter --name <parameter_name> --with-decryption --query "Parameter.Value" --output text}来引用Parameter Store中的参数值。例如:

RUN git clone https://secrets[${aws ssm get-parameter --name git_access_secret --with-decryption --query "Parameter.Value" --output text}]@github.com/<folder>/<repo>.git ./new_folder

完整的Docker文件示例:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y python3
RUN apt-get install -y git
RUN git init
RUN git clone https://secrets[${aws ssm get-parameter --name git_access_secret --with-decryption --query "Parameter.Value" --output text}]@github.com/<folder>/<repo>.git ./new_folder

在上面的示例中,我们使用${aws ssm get-parameter --name <parameter_name> --with-decryption --query "Parameter.Value" --output text}来引用Parameter Store中的参数值。这将从Parameter Store中获取参数的值,并将其作为AWS Secret的一部分传递给git clone命令。

请注意,使用Parameter Store来存储和访问AWS Secret可以提供更好的安全性和可管理性。你可以使用AWS Identity and Access Management(IAM)来控制对Parameter Store中参数的访问权限,并且可以轻松地对参数进行轮换和更新。

正文完