После развертывания контейнеров с помощью Container Optimized Image (COI) может возникнуть необходимость передать приватную информацию внутрь контейнера с помощью ENV. Из UI консоли в данном случае, в свойствах ВМ будут видны передарнные ENV в открытом виде. Возникает риск компрометации приватной информации.
Пример небезопасной конфигурации:
Yandex Cloud KMS имеет возможность шифрования секретов в Terraform Предлагается использовать данную функцию для передачи зашифрованных секретов в контейнер в виде ENV, с последующей расшифровкой изнутри python приложения. Расшифровка секретов из python кода будет выполнена с помощью привязанного к ВМ COI сервисного аккаунта (с ролью KMS decrypter). Token сервисного аккаунта будет получен с помощью сервиса мета-даты.
Terraform пример выполняет:
- развертывание тестовой инфраструктуры (сети, подсети)
- создание тестового service account и его статических ключей
- развертывание COI с контейнером на базе простого python приложения
- создание KMS ключа и шифрование приватных данных (в данном случае статических ключей сервисного аккаунта)
- приватные данные передаются в зашифрованном виде внутрь контейнера
- простое python приложение внутри кода расшифровывет приватные данные и делает print в лог
Важно:
Данное решение не отменяет необходимости применения лучших практик защиты terraform конфигурации. Yandex Cloud Object Storage может выступать в роли terraform remote state и выполнять функции блокировки с помощью Yandex Database - https://github.com/yandex-cloud/examples/tree/master/terraform-ydb-state
- установить и настроить yc client
- установить terraform
- заполнить файл variables.tf своими данными
- запустить terraform
В UI консоли мы видим секреты только в зашифрованном виде:
В логах контейнера мы видим секреты в расшифрованном виде: