2016-11-02 4 views
0

HashCorps VaultからHTTP APIを使用してドッカーファイル内の環境変数に秘密を取得しようとしています。プライベートgitリポジトリからファイルをダウンロードする秘密が必要です。HashCorpのVault HTTP APIからドッカーのコンテナにシークレットを取得する方法は?

Dockerfile関連部分

FROM debian:jessie 

ENV REPOSITORY_LOCAL_IP 192.168.1.x 
ENV REPOSITORY_PORT 20080 
ENV REPOSITORY_USER root 

ENV PRIVATE_TOKEN "$(curl -s -H "X-Vault-Token: xxx" -X GET http://192.168.1.x:8200/v1/secret/private-token | jq -r '.data.value')" 

RUN apt install curl jq -y && \ 
    wget http://"$REPOSITORY_LOCAL_IP":"$REPOSITORY_PORT"/"$REPOSITORY_USER"/repository/blob/master/files/file.conf?private_token="$PRIVATE_TOKEN" 

docker-compose.yml関連部分docker-compose buildで実行

version: '2' 
services: 
    hhvm_dev: 
    build: 
     dockerfile: image.df 
     context: ./images/. 
    user: user 
    restart: always 
    stdin_open: true 
    tty: true 
    working_dir: /etc/image 
    ports: 
     - "80" 

は以下の出力を返します。

converted 'http://192.168.1.x:20080/root/repository/blob/master/files/file.conf?private_token=$(curl -s -H X-Vault-Token: xxx-token-xxx -X GET http://192.168.1.x:8200/v1/secret/private-token | jq -r '.data.value')' (ANSI_X3.4-1968) -> 'http://192.168.1.x:20080/root/repository/blob/master/files/file.conf?private_token=$(curl -s -H X-Vault-Token: xxx-token-xxx -X GET http://192.168.1.x:8200/v1/secret/private-token | jq -r '.data.value')' (UTF-8) 
--2016-11-02 12:07:41-- http://192.168.1.x:20080/root/repository/blob/master/files/file.conf?private_token=$(curl%20-s%20-H%20X-Vault-Token:%xxx-token-xxx%20-X%20GET%20http://192.168.1.x:8200/v1/secret/private-token%20%7C%20jq%20-r%20'.data.value') 
Connecting to 192.168.1.x:20080... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: http://192.168.1.x:20080/users/sign_in [following] 
converted 'http://192.168.1.x:20080/users/sign_in' (ANSI_X3.4-1968) -> 'http://192.168.1.x:20080/users/sign_in' (UTF-8) 
--2016-11-02 12:07:41-- http://192.168.1.x:20080/users/sign_in 
Reusing existing connection to 192.168.1.x:20080. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/html] 
Saving to: '/scripts/file.sh' 

    0K ........            6.17M=0.001s 

2016-11-02 12:07:42 (6.17 MB/s) - '/scripts/file.sh' saved [8270] 

PRIVATE_TOKENがに設定されていないように見えます指定された場所。プライベートリポジトリからログインページをダウンロードするだけです。

答えて

0

Dockerは "ENV"をシェルで解釈しません。ドッカーは、あなたが含んでいるかもしれない任意のドッカーargsのための構文解析でリテラル文字列を設定しています。 RUNコマンドでは、環境変数は文字列に展開されますが、2回目に評価されず、そのコマンドに含まれるコマンドが実行されます。あなたのRUNコマンド内PRIVATE_TOKENのためにあなたのカールを入れて、この未テストコードのようなもの:あなたは再利用することができなくなりますので、この設計では、PRIVATE_TOKENは、あなたの1つのRUNコマンドにのみ存在することを

RUN export PRIVATE_TOKEN=$(curl -s -H "X-Vault-Token: xxx" -X GET http://192.168.1.x:8200/v1/secret/private-token | jq -r '.data.value') \ 
&& apt install curl jq -y \ 
&& wget http://"$REPOSITORY_LOCAL_IP":"$REPOSITORY_PORT"/"$REPOSITORY_USER"/repository/blob/master/files/file.conf?private_token="$PRIVATE_TOKEN" 

注意それは後で。

関連する問題