如何维护 Dockerfile 中使用的秘密?

How to maintain secrets used in Dockerfile?

下面是 docker-compose 有密码的文件的片段:

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环境下的这个文件,

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

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

能想到几种可能的方法。

  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 文件夹中找到。

如果您提交容器,则不包括机密。

您可以使用 ECS 和 Secrets Manager 之间的集成,将对存储在 Secrets Manager 中的机密的引用放在 ECS 任务定义中,然后将它们作为环境变量引用。 ECS docs provide a short tutorial on this (and there are more elaborate blog posts).