0

我正在尝试使用 docker secrets 来存储在 AWS Elastic Beanstalk 上使用的外部 api 密钥,尽管我似乎遗漏了什么?这是我当前的配置,屏幕截图和 api 密钥模糊:

with_secret

没有秘密

docker-compose.yml 与秘密:

version: "3.8"
services:
  backend:
    image: "s_censored_p:latest"
    environment:
      bestbuy.api.url: /run/secrets/api_key
    ports:
      - "80:8080"
    secrets:
      - api_key

secrets:
  api_key:
    external: true

docker-compose.yml 没有秘密:

version: "3.8"
services:
  backend:
    image: "s_censored_p:latest"
    environment:
      bestbuy.api.url: "https://api.bestbuy.com/v1/products(sku in(6462266))?pageSize=100&cursorMark=*&format=csv&apiKey=qU_censored_CJ"
    ports:
      - "80:8080"

码头工人终端详细信息

➜  ~ docker secret ls
ID                          NAME      DRIVER    CREATED       UPDATED
pp8vsbxqk9z85zmdlnaxrudsl   api_key             2 hours ago   2 hours ago
➜  ~
➜  ~ docker service ls
ID             NAME      MODE         REPLICAS   IMAGE                        PORTS
gen8g85of3b2   api_key   replicated   1/1        s_censored_p:latest
➜  ~
➜  ~ docker exec -it $(docker ps --filter name=api_key -q) cat /run/secrets/api_key
https://api.bestbuy.com/v1/products(sku in(6462266))?pageSize=100&cursorMark=*&format=csv&apiKey=qU_censored_CJ%
➜  ~
➜  ~
4

1 回答 1

0
   environment:
      bestbuy.api.url: /run/secrets/api_key

这些行将bestbuy.api.urlURL 的值设置为字符串/run/secrets/api_key——除非您的应用程序知道检查是否bestbuy.api.url是文件路径并从那里加载 URL,否则您将需要一个额外的步骤。Docker 不会自动为您将机密加载到环境变量中,这是他们深思熟虑的安全决定。

我经常看到的一个 Docker 约定是_FILE对这些类型的中间变量使用后缀——在这种情况下,我猜想bestbuy.api.url_FILE——然后从该文件(如果指定)而不是bestbuy.api.url变量加载秘密。

于 2021-11-27T01:15:06.857 回答