Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Создание кластера Kubernetes без доступа в интернет
    • Запуск рабочих нагрузок с GPU
    • Использование групп узлов c GPU без предустановленных драйверов
    • Установка Time-Slicing GPUs
    • Миграция ресурсов в другую зону доступности
    • Использование модулей Yandex Cloud в Terraform
    • Шифрование секретов в Managed Service for Kubernetes
      • Интеграция с Argo CD
      • Интеграция с Crossplane
      • Синхронизация с секретами Yandex Lockbox
      • Настройка Fluent Bit для работы с Cloud Logging
      • Настройка Gateway API
      • Настройка L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
      • Настройка логирования для L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
      • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
      • Проверка состояния приложений в кластере Managed Service for Kubernetes с помощью L7-балансировщика Application Load Balancer
      • Использование Jaeger для трассировки запросов в Managed Service for YDB
      • Настройка Kyverno & Kyverno Policies
      • Использование Metrics Provider для трансляции метрик
      • Редактирование изображений для сайтов с помощью Thumbor
      • Использование Istio
      • Использование HashiCorp Vault для хранения секретов
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Необходимые платные ресурсы
  • Подготовьте облако к работе
  • Установите HashiCorp Vault
  • Войдите в HashiCorp Vault
  • Создайте секрет
  • Настройте метод аутентификации Kubernetes
  • Установите драйвер SCI для хранилища секретов
  • Создайте ресурс SecretProviderClass
  • Создайте под со смонтированным секретом
  • Удалите созданные ресурсы
  • См. также
  1. Практические руководства
  2. Использование продуктов Cloud Marketplace
  3. Использование HashiCorp Vault для хранения секретов

Использование HashiCorp Vault для хранения секретов

Статья создана
Yandex Cloud
Обновлена 28 марта 2025 г.
  • Необходимые платные ресурсы
  • Подготовьте облако к работе
  • Установите HashiCorp Vault
  • Войдите в HashiCorp Vault
  • Создайте секрет
  • Настройте метод аутентификации Kubernetes
  • Установите драйвер SCI для хранилища секретов
  • Создайте ресурс SecretProviderClass
  • Создайте под со смонтированным секретом
  • Удалите созданные ресурсы
  • См. также

HashiCorp Vault — инструмент с открытым исходным кодом, который обеспечивает безопасное хранение и доступ к различным секретам (паролям, сертификатам, токенам).

Настройте хранение и доступ к секретам внутри кластера Yandex Managed Service for Kubernetes с помощью продукта Yandex Cloud Marketplace HashiCorp Vault с поддержкой Key Management Service.

В этом руководстве описан пример монтирования секрета из хранилища HashiCorp Vault через том Container Storage Interface (CSI).

Чтобы организовать доступ к секрету в кластере Managed Service for Kubernetes с помощью HashiCorp Vault:

  1. Подготовьте облако к работе.
  2. Установите HashiCorp Vault.
  3. Войдите в HashiCorp Vault.
  4. Создайте секрет.
  5. Настройте метод аутентификации Kubernetes.
  6. Установите драйвер SCI для хранилища секретов.
  7. Создайте ресурс SecretProviderClass.
  8. Создайте под со смонтированным секретом.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за публичный IP-адрес, если он назначен узлам кластера (см. тарифы Virtual Private Cloud).
  • Плата за сервис Key Management Service: количество активных версий ключа (в статусах Active и Scheduled For Destruction) и выполненных криптографических операций (см. тарифы Key Management Service).

Подготовьте облако к работеПодготовьте облако к работе

  1. Создайте кластер и группу узлов Kubernetes.

    Вручную
    С помощью Terraform
    1. Если у вас еще нет сети, создайте ее.

    2. Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Kubernetes и группа узлов.

    3. Создайте сервисные аккаунты:

      • Сервисный аккаунт с ролями k8s.clusters.agent и vpc.publicAdmin на каталог, в котором создается кластер Kubernetes. От его имени будут создаваться ресурсы, необходимые кластеру Kubernetes.
      • Сервисный аккаунт с ролью container-registry.images.puller. От его имени узлы будут скачивать из реестра необходимые Docker-образы.

      Совет

      Вы можете использовать один и тот же сервисный аккаунт для управления кластером Kubernetes и его группами узлов.

    4. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

      Важно

      От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.

    5. Создайте кластер Kubernetes и группу узлов любой подходящей конфигурации. При создании укажите группы безопасности, подготовленные ранее.

    1. Если у вас еще нет Terraform, установите его.

    2. Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.

    3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

    4. Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

    5. Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf. В файле описаны:

      • Сеть.

      • Подсеть.

      • Кластер Kubernetes.

      • Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.

      • Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.

        Важно

        От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.

    6. Укажите в файле k8s-cluster.tf:

      • Идентификатор каталога.
      • Версию Kubernetes для кластера и групп узлов Kubernetes.
      • CIDR кластера Kubernetes.
      • Имя сервисного аккаунта кластера Managed Service for Kubernetes.
    7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    8. Создайте необходимую инфраструктуру:

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

      В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

  2. Установите kubectl и настройте его на работу с созданным кластером.

Установите HashiCorp VaultУстановите HashiCorp Vault

Установите HashiCorp Vault с помощью Helm и инициализируйте хранилище по инструкции. В команде установки укажите пространство имен hcv и добавьте дополнительные параметры, чтобы задействовать механизм Vault CSI provider:

--namespace hcv \
--set "injector.enabled=false" \
--set "csi.enabled=true"

Войдите в HashiCorp VaultВойдите в HashiCorp Vault

  1. Запустите сеанс интерактивной оболочки HashiCorp Vault для пода hashicorp-vault-0.

    kubectl exec -it hashicorp-vault-0 \
       --namespace hcv \
       -- /bin/sh
    
  2. Распечатайте (unseal) хранилище.

    vault operator unseal
    

    Введите один из ключей восстановления (Recovery Key), полученных при инициализации хранилища.

  3. Аутентифицируйтесь в HashiCorp Vault с помощью корневого токена:

    vault login
    

    Введите корневой токен (Initial Root Token), полученный при инициализации хранилища.

Создайте секретСоздайте секрет

  1. Включите механизм секретов kv по пути secret:

    vault secrets enable -path=secret kv
    
  2. Создайте секрет по пути secret/db-pass. В качестве секрета укажите пароль:

    vault kv put secret/db-pass password="12345678"
    
  3. Убедитесь, что секрет доступен для чтения по пути secret/db-pass:

    vault kv get secret/db-pass
    

    Результат:

    ====== Data ======
    Key         Value
    ---         -----
    password    12345678
    

Настройте метод аутентификации KubernetesНастройте метод аутентификации Kubernetes

Этот метод позволяет аутентифицироваться с помощью токена сервисного аккаунта Kubernetes.

  1. Включите метод аутентификации Kubernetes:

    vault auth enable kubernetes
    
  2. Настройте аутентификацию через API-адрес Kubernetes:

    vault write auth/kubernetes/config \
       kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443"
    

    Переменная окружения KUBERNETES_PORT_443_TCP_ADDR ссылается на внутренний сетевой адрес узла Kubernetes.

  3. Создайте политику internal-app, которая позволит сервисному аккаунту Kubernetes читать созданный ранее секрет:

    vault policy write internal-app - <<EOF
    path "secret/db-pass" {
      capabilities = ["read"]
    }
    EOF
    
  4. Создайте роль database, которая свяжет политику internal-app с сервисным аккаунтом Kubernetes webapp-sa (будет создан позднее):

    vault write auth/kubernetes/role/database \
       bound_service_account_names=webapp-sa \
       bound_service_account_namespaces=hcv \
       policies=internal-app \
       ttl=20m
    

    Токены, возвращаемые после аутентификации, будут действительны в течение 20 минут.

  5. Выйдите из HashiCorp Vault:

    exit
    

Установите драйвер SCI для хранилища секретовУстановите драйвер SCI для хранилища секретов

  1. Добавьте Helm-репозиторий secrets-store-csi-driver:

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
    
  2. Установите драйвер SCI:

    helm install csi secrets-store-csi-driver/secrets-store-csi-driver \
       --namespace=hcv \
       --set syncSecret.enabled=true
    
  3. Убедитесь, что драйвер запущен и готов:

    kubectl get pods -n hcv -l "app=secrets-store-csi-driver"
    

    Результат:

    NAME                                 READY   STATUS    RESTARTS   AGE
    csi-secrets-store-csi-driver-nbxcd   3/3     Running   0          4m28s
    

Создайте ресурс SecretProviderClassСоздайте ресурс SecretProviderClass

  1. Создайте файл spc-vault-database.yaml с настройками, которые предоставляются CSI-провайдеру:

    spc-vault-database.yaml
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: vault-database
    spec:
      provider: vault
      parameters:
        vaultAddress: "http://hashicorp-vault.hcv:8200"
        roleName: "database"
        objects: |
          - objectName: "db-password"
            secretPath: "secret/db-pass"
            secretKey: "password"
    
  2. Создайте ресурс SecretProviderClass:

    kubectl apply -f spc-vault-database.yaml -n hcv
    

Создайте под со смонтированным секретомСоздайте под со смонтированным секретом

  1. Создайте сервисный аккаунт webapp-sa в кластере Kubernetes:

    kubectl create serviceaccount webapp-sa \
       --namespace hcv
    
  2. Создайте файл webapp-pod.yaml, который содержит конфигурацию пода webapp:

    spc-vault-database.yaml
    kind: Pod
    apiVersion: v1
    metadata:
      name: webapp
    spec:
      serviceAccountName: webapp-sa
      containers:
      - image: jweissig/app:0.0.1
        name: webapp
        volumeMounts:
        - name: secrets-store-inline
          mountPath: "/mnt/secrets-store"
          readOnly: true
      volumes:
        - name: secrets-store-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "vault-database"
    
  3. Создайте под webapp:

    kubectl apply -f webapp-pod.yaml -n hcv 
    
  4. Убедитесь, что под webapp запущен и готов:

    kubectl get pod webapp -n hcv
    

    Результат:

    NAME     READY   STATUS    RESTARTS   AGE
    webapp   1/1     Running   0          5m25s
    
  5. Отобразите секретный пароль, записанный в файловую систему по пути /mnt/secrets-store/db-password:

    kubectl exec webapp -n hcv -- cat /mnt/secrets-store/db-password
    

    Результат:

    12345678
    

Удалите созданные ресурсыУдалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать.

Вручную
С помощью Terraform
  1. Удалите кластер Kubernetes.
  2. Удалите группы безопасности.
  3. Удалите подсеть и сеть.
  4. Удалите сервисные аккаунты.
  5. Удалите симметричный ключ шифрования.
  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

    Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

  2. Удалите ресурсы:

    1. Выполните команду:

      terraform destroy
      
    2. Подтвердите удаление ресурсов и дождитесь завершения операции.

    Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

См. такжеСм. также

  • Документация HashiCorp Vault
  • Установка HashiCorp Vault с поддержкой Key Management Service
  • Установка External Secrets Operator с поддержкой Yandex Lockbox
  • Синхронизация с секретами Yandex Lockbox

Была ли статья полезна?

Предыдущая
Использование Istio
Следующая
Взаимосвязь ресурсов сервиса
Проект Яндекса
© 2025 ООО «Яндекс.Облако»