Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Lockbox
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Создать секрет
    • Изменить секрет
    • Настроить права доступа к секрету
    • Удалить секрет
    • Деактивировать и активировать секрет
    • Управление версиями секрета
  • Практические руководства
    • Все руководства
    • Синхронизация с секретами Managed Service for Kubernetes
  • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • PayloadService
      • SecretService
      • OperationService
    • REST (англ.)
      • Overview
      • Payload
        • Overview
        • get
      • Secret
        • Overview
        • activate
        • addVersion
        • cancelVersionDestruction
        • create
        • deactivate
        • delete
        • get
        • list
        • listAccessBindings
        • listOperations
        • listVersions
        • scheduleVersionDestruction
        • setAccessBindings
        • update
        • updateAccessBindings
  • Вопросы и ответы
  1. Практические руководства
  2. Синхронизация с секретами Managed Service for Kubernetes

Синхронизация с секретами Yandex Managed Service for Kubernetes

Статья создана
Yandex Cloud
  • Перед началом работы
    • Создайте инфраструктуру
    • Подготовьте окружение
  • Установите External Secrets Operator
  • Настройте Yandex Lockbox
  • Настройте кластер Managed Service for Kubernetes
  • Создайте External Secret
  • Удалите созданные ресурсы

External Secrets Operator позволяет настроить синхронизацию секретов Yandex Lockbox с секретами кластера Managed Service for Kubernetes.

Существует несколько схем интеграции Yandex Lockbox с сервисом Managed Service for Kubernetes. Далее для примера рассматривается схема ESO as a Service:

Чтобы настроить синхронизацию секретов:

  1. Установите External Secrets Operator.
  2. Настройте Yandex Lockbox.
  3. Настройте кластер Kubernetes.
  4. Создайте External Secret.

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

Перед началом работы

Создайте инфраструктуру

Вручную
С помощью Terraform
  1. Создайте облачную сеть и подсеть.
  2. Создайте сервисный аккаунт с именем eso-service-account, необходимый для работы External Secrets Operator.
  3. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации.
  1. Если у вас еще нет Terraform, установите его.

  2. Скачайте файл с настройками провайдера. Поместите его в отдельную рабочую директорию и укажите значения параметров.

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

    • Сеть.
    • Сеть.
    • Группа безопасности и правила, необходимые для работы кластера Managed Service for Kubernetes:
      • Правила для служебного трафика.
      • Правила для доступа к API Kubernetes и управления кластером с помощью kubectl через порты 443 и 6443.
    • Кластер Managed Service for Kubernetes.
    • Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.
  4. Укажите в файле конфигурации:

    • Идентификатор каталога.
    • Версии Kubernetes для кластера и групп узлов Managed Service for Kubernetes.
    • CIDR кластера Managed Service for Kubernetes.
    • Имя сервисного аккаунта кластера.
  5. Выполните команду terraform init в директории с конфигурационными файлами. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера.

  6. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

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

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

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

      terraform plan
      

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

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

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

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

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

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

Подготовьте окружение

  1. Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.

    По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

  2. Установите менеджер пакетов Helm.

  3. Установите утилиту jq:

    sudo apt update && sudo apt install jq
    
  4. Создайте сервисный аккаунт с именем eso-service-account, необходимый для работы External Secrets Operator.

  5. Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл authorized-key.json:

    yc iam key create \
      --service-account-name eso-service-account \
      --output authorized-key.json
    
  6. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации.

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

Установите External Secrets Operator

Чтобы установить External Secrets Operator, воспользуйтесь инструкцией.

Настройте Yandex Lockbox

  1. Создайте секрет:

    • Имя — lockbox-secret.
    • Ключ/Значение:
      • Ключ — password.
      • Значение → Текст — p@$$w0rd.
  2. Получите идентификатор секрета:

    yc lockbox secret list
    

    Результат выполнения команды:

    +--------------------------------------------+----------------+------------+---------------------+----------------------+--------+
    |                     ID                     |      NAME      | KMS KEY ID |     CREATED AT      |  CURRENT VERSION ID  | STATUS |
    +--------------------------------------------+----------------+------------+---------------------+----------------------+--------+
    | <идентификатор Yandex Lockbox-секрета> | lockbox-secret |            | 2021-09-19 04:33:44 | e6qlkguf0hs4q3i6jpen | ACTIVE |
    +--------------------------------------------+----------------+------------+---------------------+----------------------+--------+
    
  3. Чтобы сервисный аккаунт eso-service-account имел доступ к секрету, присвойте этому аккаунту роль lockbox.payloadViewer:

    yc lockbox secret add-access-binding \
      --name lockbox-secret \
      --service-account-name eso-service-account \
      --role lockbox.payloadViewer
    

Настройте кластер Managed Service for Kubernetes

  1. Создайте пространство имен ns, в котором будут размещены объекты External Secrets Operator:

    kubectl create namespace ns
    
  2. Создайте секрет yc-auth, содержащий в себе ключ сервисного аккаунта eso-service-account:

    kubectl --namespace ns create secret generic yc-auth \
      --from-file=authorized-key=authorized-key.json
    
  3. Создайте хранилище секретов SecretStore, содержащее секрет yc-auth:

    kubectl --namespace ns apply -f - <<< '
    apiVersion: external-secrets.io/v1alpha1
    kind: SecretStore
    metadata:
      name: secret-store
    spec:
      provider:
        yandexlockbox:
          auth:
            authorizedKeySecretRef:
              name: yc-auth
              key: authorized-key'
    

Создайте External Secret

  1. Создайте объект ExternalSecret, указывающий на секрет lockbox-secret в хранилище secret-store:

    kubectl --namespace ns apply -f - <<< '
    apiVersion: external-secrets.io/v1alpha1
    kind: ExternalSecret
    metadata:
      name: external-secret
    spec:
      refreshInterval: 1h
      secretStoreRef:
        name: secret-store
        kind: SecretStore
      target:
        name: k8s-secret
      data:
      - secretKey: password
        remoteRef:
          key: <идентификатор Yandex Lockbox-секрета>
          property: password'
    

    В параметре spec.target.name указано имя нового ключа: k8s-secret. External Secret Operator создаст этот ключ и поместит в него параметры секрета lockbox-secret.

  2. Убедитесь, что новый ключ k8s-secret содержит значение секрета lockbox-secret:

    kubectl --namespace ns get secret k8s-secret \
      --output=json | \
      jq --raw-output ."data"."password" | \
      base64 --decode
    

    В выводе команды будет содержаться значение ключа password секрета lockbox-secret:

    p@$$w0rd
    

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

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

Вручную
С помощью Terraform
  1. Удалите кластер Managed Service for Kubernetes.
  2. Если вы зарезервировали для кластера публичный статический IP-адрес, удалите его.
  3. Удалите секрет lockbox-secret.
  1. В командной строке перейдите в директорию, в которой расположен актуальный конфигурационный файл Terraform с планом инфраструктуры.

  2. Удалите конфигурационный файл k8s-cluster.tf.

  3. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

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

  4. Подтвердите изменение ресурсов.

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

      terraform plan
      

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

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

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

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

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

    Все ресурсы, которые были описаны в конфигурационном файле k8s-cluster.tf, будут удалены.

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

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Создайте инфраструктуру
  • Подготовьте окружение
  • Установите External Secrets Operator
  • Настройте Yandex Lockbox
  • Настройте кластер Managed Service for Kubernetes
  • Создайте External Secret
  • Удалите созданные ресурсы