Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Приглашение нового пользователя и назначение ролей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Создание распределенной инфраструктуры с защищенным доступом
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Базовая настройка SWS
    • Экстренная защита сервисов в Application Load Balancer от DDoS на уровне L7
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
    • Настройка алертов и дашбордов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault
      • GitHub
      • GitLab
      • Пользовательская инсталляция Kubernetes
      • Managed Service for Kubernetes
    • Передача логов кластера Yandex MPP Analytics for PostgreSQL в Yandex Cloud Logging

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

  • Подготовьте кластер Kubernetes
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Загрузите файл с набором публичных ключей в публичный бакет
  • Создайте федерацию сервисных аккаунтов
  • Создайте пользовательский секрет
  • Создайте сервисный аккаунт
  • Привяжите сервисный аккаунт к Федерации
  • Настройте сценарий в Kubernetes
  • Удалите созданные ресурсы
  • Смотрите также
  1. Безопасность
  2. Интеграции федераций удостоверений сервисных аккаунтов
  3. Пользовательская инсталляция Kubernetes

Получение значения секрета Yandex Lockbox на стороне пользовательской инсталляции Kubernetes

Статья создана
Yandex Cloud
Обновлена 23 сентября 2025 г.
  • Подготовьте кластер Kubernetes
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
    • Загрузите файл с набором публичных ключей в публичный бакет
    • Создайте федерацию сервисных аккаунтов
    • Создайте пользовательский секрет
    • Создайте сервисный аккаунт
    • Привяжите сервисный аккаунт к Федерации
  • Настройте сценарий в Kubernetes
  • Удалите созданные ресурсы
  • Смотрите также

Федерации сервисных аккаунтов (Workload Identity Federation) позволяют настроить связь между внешними системами и Yandex Cloud по протоколу OpenID Connect (OIDC). За счет этого внешние системы могут выполнять действия с ресурсами Yandex Cloud от имени сервисных аккаунтов без использования авторизованных ключей. Это более безопасный способ, минимизирующий риск утечки учетных данных и возможность несанкционированного доступа.

В этом руководстве для примера показано, как получить значение секрета Yandex Lockbox со стороны Kubernetes от имени сервисного аккаунта в Yandex Cloud. Аналогичным образом можно выполнить любое действие через Yandex Cloud CLI, API или Terraform.

Примечание

В руководстве представлен пример интеграции пользовательской инсталляции Kubernetes с федерацией сервисных аккаунтов. Руководство по интеграции Managed Service for Kubernetes см. на странице Доступ к API Yandex Cloud из кластера Managed Service for Kubernetes с помощью федерации сервисных аккаунтов Identity and Access Management.

Чтобы получить значение секрета Yandex Lockbox от имени аккаунта в Kubernetes:

  1. Подготовьте кластер Kubernetes.
  2. Подготовьте облако к работе.
  3. Настройте сценарий в Kubernetes.

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

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

  1. Создайте новый кластер Kubernetes или используйте существующий.

    Убедитесь, что ваш кластер соответствует следующим требованиям:

    • Вы используете Kubernetes версии 1.20 или новее.
      Более ранние версии Kubernetes используют другой формат токенов ServiceAccount, который не совместим с инструкциями в этом руководстве.
    • Вы настроили kube-apiserver так, чтобы он поддерживал проекцию токенов ServiceAccount.

    Примечание

    Это руководство подходит как для публично доступных, так и для приватных кластеров Kubernetes.

  2. Создайте манифест service-account.yaml со следующим содержимым:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: wlif
    
  3. Примените манифест:

    kubectl apply -f service-account.yaml
    
  4. Чтобы проверить созданный ресурс ServiceAccount выполните команду:

    kubectl describe serviceaccount wlif
    

    Результат:

    Name:                wlif
    Namespace:           default
    

    Значения полей Name и Namespace понадобятся для дальнейшей настройки интеграции на стороне Yandex Cloud.

  5. Создайте манифест pod.yaml со следующим содержимым:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-wlif
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - mountPath: /var/run/secrets/tokens
          name: sa-token
      serviceAccountName: wlif
      volumes:
      - name: sa-token
        projected:
          sources:
          - serviceAccountToken:
              path: sa-token
              expirationSeconds: 7200
              audience: ycaud
    

    В поле audience укажите получателя токена, например ycaud.

  6. Примените манифест:

    kubectl apply -f pod.yaml
    
  7. Убедитесь, что созданный под имеет статус RUNNING:

    kubectl get pod test-wlif
    

    Результат:

    NAME        READY   STATUS    RESTARTS   AGE
    test-wlif   1/1     Running   0          1m
    
  8. Получите URL Issuer вашего Kubernetes кластера:

    kubectl get --raw /.well-known/openid-configuration | jq -r .issuer
    
  9. Создайте файл с набором публичных ключей (JWKS):

    kubectl get --raw /openid/v1/jwks > cluster-jwks.json
    

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

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

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

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

  1. Плата за хранение секрета и запросы к нему (см. тарифы Yandex Lockbox);
  2. Плата за хранение данных в бакете и операции с ними (см. тарифы Object Storage).

Загрузите файл с набором публичных ключей в публичный бакетЗагрузите файл с набором публичных ключей в публичный бакет

  1. Создайте публичный бакет:

    Консоль управления
    1. В консоли управления выберите каталог, в котором хотите создать бакет.
    2. Выберите сервис Object Storage.
    3. На панели сверху нажмите кнопку Создать бакет.
    4. На странице создания бакета:
      1. Введите имя бакета в соответствии с правилами именования.

      2. В поле Чтение объектов выберите Для всех.

      3. Нажмите кнопку Создать бакет для завершения операции.

  2. Загрузите созданный ранее файл cluster-jwks.json в бакет:

    Консоль управления
    1. Перейдите в созданный бакет.
    2. На панели слева выберите Объекты.
    3. Нажмите Загрузить объекты.
    4. На верхней панели нажмите Загрузить.
    5. В появившемся окне выберите файл cluster-jwks.json и нажмите Открыть.
    6. Нажмите Загрузить.
    7. Обновите страницу.
  3. Получите ссылку на загруженный файл:

    Консоль управления
    1. Нажмите на имя файла.
    2. Нажмите Получить ссылку в правом верхнем углу.
    3. Скопируйте полученную ссылку.

Создайте федерацию сервисных аккаунтовСоздайте федерацию сервисных аккаунтов

Консоль управления
  1. В консоли управления выберите каталог, в котором вы хотите создать федерацию сервисных аккаунтов.
  2. В списке сервисов выберите Identity and Access Management.
  3. На панели слева выберите Федерации сервисных аккаунтов.
  4. Нажмите Создать федерацию.
  5. В поле Значение Issuer (iss) введите URL Issuer вашего Kubernetes кластера, полученный ранее, например https://kubernetes.default.svc.cluster.local.
  6. В поле Допустимые значения Audience (aud) введите получателя токена, указанного при создании пода, например ycaud.
  7. В поле Адрес JWKS введите ссылку на файл cluster-jwks.json в бакете.
  8. В поле Имя введите имя федерации, например test-iam-federation.
  9. Нажмите кнопку Создать.

Создайте пользовательский секретСоздайте пользовательский секрет

Консоль управления
  1. В консоли управления выберите каталог, в котором будет создан секрет.
  2. В списке сервисов выберите Lockbox.
  3. Нажмите кнопку Создать секрет.
  4. В поле Имя введите имя секрета MY_SECRET.
  5. Выберите Тип секрета Пользовательский.
  6. В поле Ключ введите неконфиденциальный идентификатор, например secret.
  7. В поле Значение введите конфиденциальные данные для хранения.
  8. Нажмите кнопку Создать.

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

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

    Консоль управления
    1. В консоли управления выберите каталог, в котором хотите создать сервисный аккаунт.
    2. В списке сервисов выберите Identity and Access Management.
    3. Нажмите кнопку Создать сервисный аккаунт.
    4. Введите имя сервисного аккаунта, например sa-lockbox.
    5. Нажмите кнопку Создать.
  2. Назначьте сервисному аккаунту роль lockbox.payloadViewer на каталог:

    Консоль управления
    1. На стартовой странице консоли управления выберите каталог.
    2. Перейдите на вкладку Права доступа.
    3. Найдите аккаунт sa-lockbox в списке и нажмите значок .
    4. Нажмите кнопку Изменить роли.
    5. В открывшемся диалоге нажмите кнопку Добавить роль и выберите роль lockbox.payloadViewer.

Привяжите сервисный аккаунт к ФедерацииПривяжите сервисный аккаунт к Федерации

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

  2. В списке сервисов выберите Identity and Access Management.

  3. В списке выберите сервисный аккаунт sa-lockbox.

  4. Перейдите на вкладку Федерации сервисных аккаунтов.

  5. Нажмите кнопку Привязать к федерации.

  6. В поле Федерация сервисных аккаунтов выберите ранее созданную федерацию.

  7. В поле Значение Subject (sub) укажите идентификатор внешнего аккаунта system:serviceaccount:<пространство_имен>:<имя_аккаунта>.

    Где:

    • пространство_имен — значение поля Namespace в выводе команды kubectl describe serviceaccount <имя_аккаунта>, например default;
    • имя_аккаунта — название созданного аккаунта, например wlif.
  8. Нажмите кнопку Привязать.

Настройте сценарий в KubernetesНастройте сценарий в Kubernetes

  1. Заполните переменные:

    SA_ID="<идентификатор_сервисного_аккаунта>"
    SECRET_ID="<идентификатор_секрета>"
    

    Где:

    • SA_ID — идентификатор сервисного аккаунта;
    • SECRET_ID — идентификатор пользовательского секрета.
  2. Получите токен сервисного аккаунта Kubernetes:

    SA_TOKEN=`kubectl exec -it test-wlif -- cat /var/run/secrets/tokens/sa-token`
    
  3. Обменяйте токен сервисного аккаунта Kubernetes на IAM-токен сервисного аккаунта в Yandex Cloud:

    IAMTOKEN=$(curl -sH "Content-Type: application/x-www-form-urlencoded" -d "grant_type=urn:ietf:params:oauth:grant-type:token-exchange&requested_token_type=urn:ietf:params:oauth:token-type:access_token&audience=$SA_ID&subject_token=$SA_TOKEN&subject_token_type=urn:ietf:params:oauth:token-type:id_token" -X POST https://auth.yandex.cloud/oauth/token | jq -r '.access_token')
    
  4. Запросите значение секрета через API, используя IAM-токен в Yandex Cloud:

    SECRET_DATA=$(curl -sH "Authorization: Bearer ${IAMTOKEN}" https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/$SECRET_ID/payload)
    echo ${SECRET_DATA}
    

    Результат:

    { "entries": [ { "key": "secret", "textValue": "67cH2£?pO********" } ], "versionId": "e6q8isknpcp7********" }
    

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

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

  • секрет Yandex Lockbox;
  • бакет Object Storage;
  • сервисный аккаунт.

Смотрите такжеСмотрите также

  • Федерации сервисных аккаунтов
  • Доступ к API Yandex Cloud из кластера Managed Service for Kubernetes с помощью федерации сервисных аккаунтов Identity and Access Management
  • Получение значения секрета Yandex Lockbox на стороне GitLab
  • Получение значения секрета Yandex Lockbox на стороне GitHub

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

Предыдущая
GitLab
Следующая
Managed Service for Kubernetes
Проект Яндекса
© 2025 ООО «Яндекс.Облако»