2016-11-02 3 views
0

HashCorps Vault에서 HTTP API를 사용하여 dockerfile 내부의 환경 변수에 비밀을 얻으려고합니다. 비공개 자식 저장소에서 파일을 다운로드하려면 비밀이 필요합니다.HashiCorp의 Vault HTTP API에서 도커 컨테이너로 비밀을 얻는 방법은 무엇입니까?

Dockerfile 관련 부분 docker-compose build 반환과 함께 다음과 같은 출력 실행

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 관련 부분

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" 

:

그것은 PRIVATE_TOKEN처럼 보이는
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] 

이 설정되어 있지 않습니다 지정된 위치. 개인 저장소에서 로그인 페이지를 다운로드하기 만하면됩니다.

답변

0

Docker는 쉘에서 "ENV"를 해석하지 않습니다. Docker는 사용자가 포함 시켰을 수있는 모든 도커 arg에 대해 구문 분석을 통해 리터럴 문자열을 설정하는 것입니다. RUN 명령에서 환경 변수는 문자열로 확장되지만 두 번째로 포함 된 명령을 실행하기 위해 평가되지는 않습니다. 당신의 RUN 명령 내부의 PRIVATE_TOKEN에 대한 귀하의 컬을 넣어,이 테스트되지 않은 코드 같은 : 재사용 할 수 없습니다 때문에이 디자인과 함께 PRIVATE_TOKEN, 당신의 일 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" 

주 나중에.

관련 문제