【问题标题】:How to maintain secrets used in Dockerfile?如何维护 Dockerfile 中使用的秘密?
【发布时间】:2020-02-14 13:58:32
【问题描述】:

下面是带有密码的docker-compose文件的sn-p:

test:
  build: ../../
  dockerfile: docker/dev/Dockerfile
  volumes_from:
    - cache
  links:
    - db
  environment:
    DJANGO_SETTINGS_MODULE: todobackend.settings.test
    MYSQL_HOST: db
    MYSQL_USER: root
    MYSQL_PASSWORD: password
    TEST_OUTPUT_DIR: /reports

db:
  image: mysql:5.6
  hostname: db
  expose:
    - "3386"
  environment:
    MYSQL_ROOT_PASSWORD: password

在 AWS 环境中运行此文件,

可以在 s3 中使用 KMS 存储,另一种方法是 AWS 参数存储

在使用docker-compose 构建 dockerfile 和启动容器时,如何安全地维护秘密,而不将其暴露给文本文件?任何代码 sn-p...

【问题讨论】:

  • 您可以将文本文件保存到存储桶中。然后每次运行 docker 时,它都会下载文件,将秘密设置为 env 变量并删除文件。但我会赞成这个问题,因为我不知道把秘密放在哪里!
  • @daudnadeem 可以分享一下代码 sn-p 吗?
  • AWS 中有一种叫做参数存储的东西...
  • 我没有sn-p代码,需要自己写。但是在伪代码(python)中。 1. 下载文件(使用 Boto3 库) 2. 读取文件with open (/file) 3. os.environ[mysq] = 密码 4. os.remove(/file) 我可以为你写,但它实际上是非常简单的代码。
  • 如果您将上述内容保存为 python 脚本。在你的 Dockerfile 中总是将 RUN my_script.py 作为倒数第二个命令。

标签: docker docker-compose aws-secrets-manager aws-parameter-store


【解决方案1】:

能想出几种可能的方法。

  1. 将机密存储在环境变量中,引用撰写文件中的环境变量,例如this
environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

没有任何值的键在机器上解析为它们的值。

另一种方法是使用docker secret。 创建秘密

$ printf "This is a secret" | docker secret create db_password -

如果它是一个文件,它可以像这样保存

$docker secret create site.key site.key

按如下方式访问您的撰写中的秘密

version: '3.1'

services:
   db:
     image: mysql:latest
     volumes:
       - db_data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD_FILE: /run/secrets/db_password
     secrets:
       - db_root_password
       - db_password

秘密位于 /run/secrets 文件夹中。

如果您提交容器,则不包含秘密。

【讨论】:

  • Docker 秘密方法适用于任何云环境?
  • 集群模式和非集群模式?
  • docker secret 是否将数据以加密形式存储在 docker 容器中?
【解决方案2】:

您可以使用 ECS 和 Secrets Manager 之间的集成,将对存储在 Secrets Manager 中的 Secrets 的引用放在 ECS 任务定义中,然后将它们作为环境变量引用。 ECS docs 提供了一个简短的教程(还有更详细的 blog posts)。

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 2019-11-29
    • 2018-08-26
    • 2018-07-04
    • 2023-03-13
    • 2021-06-01
    • 2022-11-02
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多