docker-compose — hashicorp vault

Hashicop Vault будем ставить в docker-compose




ставим docker:




yum remove docker docker-engine docker.io
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager —add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker




ставим docker-compose




https://github.com/docker/compose/releases
на текущий момент самая последняя версия:
2,6,1





https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64




выкачиваем её:




curl -L «https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64» -o /usr/local/bin/docker-compose




chmod +x /usr/local/bin/docker-compose




всё готово.




теперь приступим к установке  Vault




cat docker-compose.yml




version: '3.8'



services:



  vault:

    build:

      context: ./vault

      dockerfile: Dockerfile

    ports:

      - 8200:8200

    volumes:

      - ./vault/config:/vault/config

      - ./vault/policies:/vault/policies

      - ./vault/data:/vault/data

      - ./vault/logs:/vault/logs

    environment:

      - VAULT_ADDR=http://127.0.0.1:8200

      - VAULT_API_ADDR=http://127.0.0.1:8200

    command: server -config=/vault/config/vault-config.json

    cap_add:

      - IPC_LOCK

    depends_on:

      - consul



  consul:

    build:

      context: ./consul

      dockerfile: Dockerfile

    ports:

      - 8500:8500

    command: agent -server -bind 0.0.0.0 -client 0.0.0.0 -bootstrap-expect 1 -config-file=/consul/config/config.json

    volumes:

      - ./consul/config/consul-config.json:/consul/config/config.json

      - ./consul/data:/consul/data



  consul-worker:

    build:

      context: ./consul

      dockerfile: Dockerfile

    command: agent -server -join consul -config-file=/consul/config/config.json

    volumes:

      - ./consul/config/consul-config.json:/consul/config/config.json

    depends_on:

      - consul





cat consul/Dockerfile




# base image

FROM alpine:3.14



# set consul version

ENV CONSUL_VERSION 1.10.2



# create a new directory

RUN mkdir /consul



# download dependencies

RUN apk --no-cache add 

      bash 

      ca-certificates 

      wget



# download and set up consul

RUN wget --quiet --output-document=/tmp/consul.zip https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip && 

    unzip /tmp/consul.zip -d /consul && 

    rm -f /tmp/consul.zip && 

    chmod +x /consul/consul



# update PATH

ENV PATH="PATH=$PATH:$PWD/consul"



# add the config file

COPY ./config/consul-config.json /consul/config/config.json



# expose ports

EXPOSE 8300 8400 8500 8600



# run consul

ENTRYPOINT ["consul"]





cat consul/config/consul-config.json




{

  "datacenter": "localhost",

  "data_dir": "/consul/data",

  "log_level": "DEBUG",

  "server": true,

  "ui": true,

  "ports": {

    "dns": 53

  }

}





mkdir consul/data/




cat vault/Dockerfile




# base image

FROM alpine:3.14



# set vault version

ENV VAULT_VERSION 1.11.2



# create a new directory

RUN mkdir /vault



# download dependencies

RUN apk --no-cache add 

      bash 

      ca-certificates 

      wget



# download and set up vault

RUN wget --quiet --output-document=/tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip && 

    unzip /tmp/vault.zip -d /vault && 

    rm -f /tmp/vault.zip && 

    chmod +x /vault



# update PATH

ENV PATH="PATH=$PATH:$PWD/vault"



# add the config file

COPY ./config/vault-config.json /vault/config/vault-config.json



# expose port 8200

EXPOSE 8200



# run vault

ENTRYPOINT ["vault"]





cat vault/config/vault-config.json




{

  "backend": {

    "consul": {

      "address": "consul:8500",

      "path": "vault/"

    }

  },

  "listener": {

    "tcp":{

      "address": "0.0.0.0:8200",

      "tls_disable": 1

    }

  },

  "ui": true

}





mkdir vault/data/
mkdir vault/logs/




cat vault/policies/app-policy.json




{

  "path": {

    "kv/data/app/*": {

      "policy": "read"

    }

  }

}





запускаем:




docker-compose up -d




ждём пока соберётся.
потом заходим в Vault:




http://192.168.1.170:8200





ставим
Key shares = 5
Key threshold = 3
но вы можете установить любое другое значение




мы получаем 5 ключей.





внизу справа можно скачать json




{

  "keys": [

    "22b07e26d89c620dc68cab7a7e5046d8a807390fe55a477d091f9178bc8339af3c",

    "140b672e0b9fdfae320d80a023261be6a72c019fd85f19f58a29eb1fccd82f26f2",

    "6cec6d35d5f2250e4e007f1a8d88f252f725751d3383d1d0dff8aabc0e1738e16b",

    "17752ae8096c64efe213bc63eccb496a87c8525ad24c0597ecab386adbfc8c86b5",

    "e23fc4247807c314d1590dcb706e131218ae7fdf8b6d6959d208d9398c5ec2168e"

  ],

  "keys_base64": [

    "IrB+JticYg3GjKt6flBG2KgHOQ/lWkd9CR+ReLyDOa88",

    "FAtnLguf364yDYCgIyYb5qcsAZ/YXxn1iinrH8zYLyby",

    "bOxtNdXyJQ5OAH8ajYjyUvcldR0zg9HQ3/iqvA4XOOFr",

    "F3Uq6AlsZO/iE7xj7MtJaofIUlrSTAWX7Ks4atv8jIa1",

    "4j/EJHgHwxTRWQ3LcG4TEhiuf9+LbWlZ0gjZOYxewhaO"

  ],

  "root_token": "s.Rw5WixMGCf84xZD1nHhndj3K"

}




далее нужно ввести ключи по очереди:






далее выбираем рутовый токен который мы скачали вместе с ключами:





мы так же можем выбрать и другие методы:





но мы остановимся на токене




всё ок.
попадаем в панель:





проверим Consul




http://192.168.1.170:8500/





==========================================




добавим аутентификацию по логину и паролю:










ну всё готово. пользователь есть теперь зададим политику.





идём на офф сайт
https://www.vaultproject.io/docs/concepts/policies
или смотрим в default возможные варианты настройки




вставляем политику:




path "secret/*" {

  capabilities = ["create", "read", "update", "patch", "delete", "list"]

}





всё можно создавать секрет












Источник: https://sidmid.ru/docker-compose-hashicorp-vault/



2022-12-02T00:26:07
DevOps

docker-compose — hashicorp vault

Hashicop Vault будем ставить в docker-compose

ставим docker:

yum remove docker docker-engine docker.io
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager —add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker

ставим docker-compose

https://github.com/docker/compose/releases
на текущий момент самая последняя версия:
2,6,1

https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64

выкачиваем её:

curl -L «https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64» -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

всё готово.

теперь приступим к установке  Vault

cat docker-compose.yml

YAMLversion: ‘3.8’services: vault: build: context: ./vault dockerfile: Dockerfile ports: — 8200:8200 volumes: — ./vault/config:/vault/config — ./vault/policies:/vault/policies — ./vault/data:/vault/data — ./vault/logs:/vault/logs environment: — VAULT_ADDR=http://127.0.0.1:8200 — VAULT_API_ADDR=http://127.0.0.1:8200 command: server -config=/vault/config/vault-config.json cap_add: — IPC_LOCK depends_on: — consul consul: build: context: ./consul dockerfile: Dockerfile ports: — 8500:8500 command: agent -server -bind 0.0.0.0 -client 0.0.0.0 -bootstrap-expect 1 -config-file=/consul/config/config.json volumes: — ./consul/config/consul-config.json:/consul/config/config.json — ./consul/data:/consul/data consul-worker: build: context: ./consul dockerfile: Dockerfile command: agent -server -join consul -config-file=/consul/config/config.json volumes: — ./consul/config/consul-config.json:/consul/config/config.json depends_on: — consul123456789101112131415161718192021222324252627282930313233343536373839404142434445version: ‘3.8’ services:   vault:    build:      context: ./vault      dockerfile: Dockerfile    ports:      — 8200:8200    volumes:      — ./vault/config:/vault/config      — ./vault/policies:/vault/policies      — ./vault/data:/vault/data      — ./vault/logs:/vault/logs    environment:      — VAULT_ADDR=http://127.0.0.1:8200      — VAULT_API_ADDR=http://127.0.0.1:8200    command: server -config=/vault/config/vault-config.json    cap_add:      — IPC_LOCK    depends_on:      — consul   consul:    build:      context: ./consul      dockerfile: Dockerfile    ports:      — 8500:8500    command: agent -server -bind 0.0.0.0 -client 0.0.0.0 -bootstrap-expect 1 -config-file=/consul/config/config.json    volumes:      — ./consul/config/consul-config.json:/consul/config/config.json      — ./consul/data:/consul/data   consul-worker:    build:      context: ./consul      dockerfile: Dockerfile    command: agent -server -join consul -config-file=/consul/config/config.json    volumes:      — ./consul/config/consul-config.json:/consul/config/config.json    depends_on:      — consul 

cat consul/Dockerfile

YAML# base imageFROM alpine:3.14# set consul versionENV CONSUL_VERSION 1.10.2# create a new directoryRUN mkdir /consul# download dependenciesRUN apk —no-cache add bash ca-certificates wget# download and set up consulRUN wget —quiet —output-document=/tmp/consul.zip https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip && unzip /tmp/consul.zip -d /consul && rm -f /tmp/consul.zip && chmod +x /consul/consul# update PATHENV PATH=»PATH=$PATH:$PWD/consul»# add the config fileCOPY ./config/consul-config.json /consul/config/config.json# expose portsEXPOSE 8300 8400 8500 8600# run consulENTRYPOINT [«consul»]123456789101112131415161718192021222324252627282930313233# base imageFROM alpine:3.14 # set consul versionENV CONSUL_VERSION 1.10.2 # create a new directoryRUN mkdir /consul # download dependenciesRUN apk —no-cache add       bash       ca-certificates       wget # download and set up consulRUN wget —quiet —output-document=/tmp/consul.zip https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip &&     unzip /tmp/consul.zip -d /consul &&     rm -f /tmp/consul.zip &&     chmod +x /consul/consul # update PATHENV PATH=»PATH=$PATH:$PWD/consul» # add the config fileCOPY ./config/consul-config.json /consul/config/config.json # expose portsEXPOSE 8300 8400 8500 8600 # run consulENTRYPOINT [«consul»] 

cat consul/config/consul-config.json

YAML{ «datacenter»: «localhost», «data_dir»: «/consul/data», «log_level»: «DEBUG», «server»: true, «ui»: true, «ports»: { «dns»: 53 }}1234567891011{  «datacenter»: «localhost»,  «data_dir»: «/consul/data»,  «log_level»: «DEBUG»,  «server»: true,  «ui»: true,  «ports»: {    «dns»: 53  }} 

mkdir consul/data/

cat vault/Dockerfile

YAML# base imageFROM alpine:3.14# set vault versionENV VAULT_VERSION 1.11.2# create a new directoryRUN mkdir /vault# download dependenciesRUN apk —no-cache add bash ca-certificates wget# download and set up vaultRUN wget —quiet —output-document=/tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip && unzip /tmp/vault.zip -d /vault && rm -f /tmp/vault.zip && chmod +x /vault# update PATHENV PATH=»PATH=$PATH:$PWD/vault»# add the config fileCOPY ./config/vault-config.json /vault/config/vault-config.json# expose port 8200EXPOSE 8200# run vaultENTRYPOINT [«vault»]123456789101112131415161718192021222324252627282930313233# base imageFROM alpine:3.14 # set vault versionENV VAULT_VERSION 1.11.2 # create a new directoryRUN mkdir /vault # download dependenciesRUN apk —no-cache add       bash       ca-certificates       wget # download and set up vaultRUN wget —quiet —output-document=/tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip &&     unzip /tmp/vault.zip -d /vault &&     rm -f /tmp/vault.zip &&     chmod +x /vault # update PATHENV PATH=»PATH=$PATH:$PWD/vault» # add the config fileCOPY ./config/vault-config.json /vault/config/vault-config.json # expose port 8200EXPOSE 8200 # run vaultENTRYPOINT [«vault»] 

cat vault/config/vault-config.json

YAML{ «backend»: { «consul»: { «address»: «consul:8500», «path»: «vault/» } }, «listener»: { «tcp»:{ «address»: «0.0.0.0:8200», «tls_disable»: 1 } }, «ui»: true}12345678910111213141516{  «backend»: {    «consul»: {      «address»: «consul:8500»,      «path»: «vault/»    }  },  «listener»: {    «tcp»:{      «address»: «0.0.0.0:8200»,      «tls_disable»: 1    }  },  «ui»: true} 

mkdir vault/data/
mkdir vault/logs/

cat vault/policies/app-policy.json

YAML{ «path»: { «kv/data/app/*»: { «policy»: «read» } }}12345678{  «path»: {    «kv/data/app/*»: {      «policy»: «read»    }  }} 

 

запускаем:

docker-compose up -d

ждём пока соберётся.
потом заходим в Vault:

http://192.168.1.170:8200

 

ставим
Key shares = 5
Key threshold = 3
но вы можете установить любое другое значение

мы получаем 5 ключей.

внизу справа можно скачать json

YAML{ «keys»: [ «22b07e26d89c620dc68cab7a7e5046d8a807390fe55a477d091f9178bc8339af3c», «140b672e0b9fdfae320d80a023261be6a72c019fd85f19f58a29eb1fccd82f26f2», «6cec6d35d5f2250e4e007f1a8d88f252f725751d3383d1d0dff8aabc0e1738e16b», «17752ae8096c64efe213bc63eccb496a87c8525ad24c0597ecab386adbfc8c86b5», «e23fc4247807c314d1590dcb706e131218ae7fdf8b6d6959d208d9398c5ec2168e» ], «keys_base64»: [ «IrB+JticYg3GjKt6flBG2KgHOQ/lWkd9CR+ReLyDOa88», «FAtnLguf364yDYCgIyYb5qcsAZ/YXxn1iinrH8zYLyby», «bOxtNdXyJQ5OAH8ajYjyUvcldR0zg9HQ3/iqvA4XOOFr», «F3Uq6AlsZO/iE7xj7MtJaofIUlrSTAWX7Ks4atv8jIa1», «4j/EJHgHwxTRWQ3LcG4TEhiuf9+LbWlZ0gjZOYxewhaO» ], «root_token»: «s.Rw5WixMGCf84xZD1nHhndj3K»}1234567891011121314151617{  «keys»: [    «22b07e26d89c620dc68cab7a7e5046d8a807390fe55a477d091f9178bc8339af3c»,    «140b672e0b9fdfae320d80a023261be6a72c019fd85f19f58a29eb1fccd82f26f2»,    «6cec6d35d5f2250e4e007f1a8d88f252f725751d3383d1d0dff8aabc0e1738e16b»,    «17752ae8096c64efe213bc63eccb496a87c8525ad24c0597ecab386adbfc8c86b5»,    «e23fc4247807c314d1590dcb706e131218ae7fdf8b6d6959d208d9398c5ec2168e»  ],  «keys_base64»: [    «IrB+JticYg3GjKt6flBG2KgHOQ/lWkd9CR+ReLyDOa88»,    «FAtnLguf364yDYCgIyYb5qcsAZ/YXxn1iinrH8zYLyby»,    «bOxtNdXyJQ5OAH8ajYjyUvcldR0zg9HQ3/iqvA4XOOFr»,    «F3Uq6AlsZO/iE7xj7MtJaofIUlrSTAWX7Ks4atv8jIa1»,    «4j/EJHgHwxTRWQ3LcG4TEhiuf9+LbWlZ0gjZOYxewhaO»  ],  «root_token»: «s.Rw5WixMGCf84xZD1nHhndj3K»}

далее нужно ввести ключи по очереди:

далее выбираем рутовый токен который мы скачали вместе с ключами:

мы так же можем выбрать и другие методы:

но мы остановимся на токене

всё ок.
попадаем в панель:

 

проверим Consul

http://192.168.1.170:8500/

 

==========================================

добавим аутентификацию по логину и паролю:

ну всё готово. пользователь есть теперь зададим политику.

идём на офф сайт
https://www.vaultproject.io/docs/concepts/policies
или смотрим в default возможные варианты настройки

вставляем политику:

YAMLpath «secret/*» { capabilities = [«create», «read», «update», «patch», «delete», «list»]}123path «secret/*» {  capabilities = [«create», «read», «update», «patch», «delete», «list»]}

всё можно создавать секрет

 

2022-10-16T11:34:10devops