diff --git a/readme.md b/readme.md index 067f92b..d94d3eb 100644 --- a/readme.md +++ b/readme.md @@ -68,3 +68,4 @@ * [13.4. инструменты для упрощения написания конфигурационных файлов. Helm и Jsonnet](/src/homework/13-kubernetes-config/13.4) * [13.5. поддержка нескольких окружений на примере Qbec](/src/homework/13-kubernetes-config/13.5) * [14.1. Создание и использование секретов](/src/homework/14-kubernetes-security/14.1) +* [14.2 Синхронизация секретов с внешними сервисами. Vault](/src/homework/14-kubernetes-security/14.2) diff --git a/src/homework/14-kubernetes-security/14.2/config/vault-pod.yml b/src/homework/14-kubernetes-security/14.2/config/vault-pod.yml new file mode 100644 index 0000000..baac0b1 --- /dev/null +++ b/src/homework/14-kubernetes-security/14.2/config/vault-pod.yml @@ -0,0 +1,17 @@ +--- +apiVersion: v1 +kind: Pod +metadata: + name: 14.2-netology-vault +spec: + containers: + - name: vault + image: vault:1.12.2 + ports: + - containerPort: 8200 + protocol: TCP + env: + - name: VAULT_DEV_ROOT_TOKEN_ID + value: "aiphohTaa0eeHei" + - name: VAULT_DEV_LISTEN_ADDRESS + value: 0.0.0.0:8200 diff --git a/src/homework/14-kubernetes-security/14.2/img/vault_ui_secret.png b/src/homework/14-kubernetes-security/14.2/img/vault_ui_secret.png new file mode 100644 index 0000000..33f3df3 Binary files /dev/null and b/src/homework/14-kubernetes-security/14.2/img/vault_ui_secret.png differ diff --git a/src/homework/14-kubernetes-security/14.2/readme.md b/src/homework/14-kubernetes-security/14.2/readme.md new file mode 100644 index 0000000..c2bcbd4 --- /dev/null +++ b/src/homework/14-kubernetes-security/14.2/readme.md @@ -0,0 +1,105 @@ +Выполнение [домашнего задания](https://github.com/netology-code/clokub-homeworks/blob/clokub-5/14.2.md) +по теме "14.2 Синхронизация секретов с внешними сервисами. Vault" + +## Q/A + +### Задача 1 + +> Работа с модулем Vault. +> +> Запустить модуль Vault конфигураций через утилиту kubectl в установленном minikube +> +> ``` +> kubectl apply -f config/vault-pod.yml +> ``` + +```text +pod/14.2-netology-vault created +``` + +> Получить значение внутреннего IP пода +> +> ``` +> kubectl get pod 14.2-netology-vault -o json | jq -c '.status.podIPs' +> ``` +> +> Примечание: jq - утилита для работы с JSON в командной строке + +```text +[{"ip":"10.233.102.130"}] +``` + +> Запустить второй модуль для использования в качестве клиента +> +> ``` +> kubectl run -i --tty fedora --image=fedora --restart=Never -- sh +> ``` +> +> Установить дополнительные пакеты +> +> ``` +> dnf -y install pip +> pip install hvac +> ``` + +```shell +pip list +``` + +```text +Package Version +------------------ --------- +certifi 2022.12.7 +charset-normalizer 2.1.1 +gpg 1.17.0 +hvac 1.0.2 +idna 3.4 +libcomps 0.1.18 +pip 22.2.2 +pyhcl 0.4.4 +requests 2.28.1 +rpm 4.18.0 +setuptools 62.6.0 +urllib3 1.26.13 +``` + +> Запустить интерпретатор Python и выполнить следующий код, предварительно +> поменяв IP и токен +> +> ``` +> import hvac +> client = hvac.Client( +> url='http://10.10.133.71:8200', +> token='aiphohTaa0eeHei' +> ) +> client.is_authenticated() +> +> # Пишем секрет +> client.secrets.kv.v2.create_or_update_secret( +> path='hvac', +> secret=dict(netology='Big secret!!!'), +> ) +> +> # Читаем секрет +> client.secrets.kv.v2.read_secret_version( +> path='hvac', +> ) +> ``` + +Предварительно необходимо создать файл `vault.py`, поместить скрипт в него и запустить: + +```shell +python3 vault.py +``` + +Следующим шагом необходимо проверить, что секрет успешно записался в `vault`. Для этого будет выполнено два шага: +* Выполнить `port-forward` до пода `vault`: + + ```shell + kubectl port-forward pods/14.2-netology-vault 8200:8200 + ``` + +* Не выключая консоль зайти в web-версию `vault` по адресу `http://localhost:8200`, авторизоваться + и просмотреть все секреты в хранилище `secrets`: + + ![vault_ui_secret.png](./img/vault_ui_secret.png) diff --git a/src/homework/14-kubernetes-security/14.2/vault.py b/src/homework/14-kubernetes-security/14.2/vault.py new file mode 100644 index 0000000..9087508 --- /dev/null +++ b/src/homework/14-kubernetes-security/14.2/vault.py @@ -0,0 +1,17 @@ +import hvac +client = hvac.Client( + url='http://10.10.133.71:8200', + token='aiphohTaa0eeHei' +) +client.is_authenticated() + +# Пишем секрет +client.secrets.kv.v2.create_or_update_secret( + path='hvac', + secret=dict(netology='Big secret!!!'), +) + +# Читаем секрет +client.secrets.kv.v2.read_secret_version( + path='hvac', +)