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

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Настройте кластер Managed Service for Kubernetes
  • Создайте федерацию сервисных аккаунтов
  • Подготовьте сервисный аккаунт IAM
  • Привяжите сервисный аккаунт IAM к федерации
  • Создайте секрет Yandex Lockbox
  • Проверьте работу интеграции
  • Как удалить созданные ресурсы
  • Смотрите также
  1. Безопасность
  2. Интеграции федераций удостоверений сервисных аккаунтов
  3. Managed Service for Kubernetes

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

Статья создана
Yandex Cloud
Обновлена 15 октября 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Настройте кластер Managed Service for Kubernetes
  • Создайте федерацию сервисных аккаунтов
  • Подготовьте сервисный аккаунт IAM
  • Привяжите сервисный аккаунт IAM к федерации
  • Создайте секрет Yandex Lockbox
  • Проверьте работу интеграции
  • Как удалить созданные ресурсы
  • Смотрите также

В Managed Service for Kubernetes реализована интеграция с федерациями сервисных аккаунтов Identity and Access Management.

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

При включении опции Managed Service for Kubernetes автоматически создает для конкретного кластера OIDC-провайдер и предоставляет следующие параметры для интеграции с федерациями сервисных аккаунтов:

  • URL эмитента.
  • URL набора ключей JWKS.

В этом руководстве для примера показано, как получить значение секрета Yandex Lockbox со стороны кластера Managed Service for Kubernetes от имени сервисного аккаунта Identity and Access Management.

Аналогичным образом можно выполнить любое действие через Yandex Cloud CLI, Terraform, SDK или API.

Примечание

В руководстве представлен пример интеграции кластера Managed Service for Kubernetes с федерацией сервисных аккаунтов. Руководство по интеграции пользовательской инсталляции Kubernetes см. на странице Получение значения секрета Yandex Lockbox на стороне пользовательской инсталляции Kubernetes.

Чтобы с помощью федерации сервисных аккаунтов настроить доступ к секрету Yandex Lockbox из кластера Managed Service for Kubernetes через API Yandex Cloud:

  1. Подготовьте облако к работе.
  2. Настройте кластер Managed Service for Kubernetes.
  3. Создайте федерацию сервисных аккаунтов.
  4. Подготовьте сервисный аккаунт IAM.
  5. Привяжите сервисный аккаунт IAM к федерации.
  6. Создайте секрет Yandex Lockbox.
  7. Проверьте работу интеграции.

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

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

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

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

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

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

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

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

  • Плата за вычислительные ресурсы и диски узлов кластера Managed Service for Kubernetes (см. тарифы Yandex Compute Cloud).
  • Плата за использование мастера Managed Service for Kubernetes и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за публичные IP-адреса кластера Managed Service for Kubernetes (см. тарифы Yandex Virtual Private Cloud).
  • Плата за хранение секрета и запросы к нему (см. тарифы Yandex Lockbox).

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

Важно

Интеграция с федерацией сервисных аккаунтов доступна только для кластеров Managed Service for Kubernetes версии 1.30 и выше в релизном канале rapid.

Для доступа к API Yandex Cloud у узлов кластера должен быть доступ в интернет.

  1. Если у вас еще нет кластера Managed Service for Kubernetes:

    1. Создайте кластер.
    2. Создайте группу узлов.
    3. Настройте группы безопасности для кластера и группы узлов.
  2. Для доступа к API Yandex Cloud у узлов кластера должен быть доступ в интернет. Убедитесь, что узлам кластера назначены публичные IP-адреса, или в подсети, где размещаются узлы, настроен NAT-шлюз. Также убедитесь, что правилами группы безопасности разрешен весь исходящий трафик для узлов кластера.

  3. Настройте интеграцию с федерацией сервисных аккаунтов:

    Консоль управления
    1. В консоли управления выберите каталог, в котором размещен кластер.
    2. В списке сервисов выберите Managed Service for Kubernetes.
    3. Напротив кластера нажмите и выберите Редактировать.
    4. В поле Управление идентификацией и доступом включите федерацию сервисных аккаунтов.
    5. Нажмите Сохранить.
    6. На обзорной странице кластера в блоке Управление идентификацией и доступом скопируйте значения параметров URL эмитента и URL набора ключей JWKS. Они понадобятся в дальнейшем.
  4. Создайте сервисный аккаунт Kubernetes:

    1. Подключитесь к кластеру Managed Service for Kubernetes с помощью kubectl.

    2. Создайте манифест сервисного аккаунта Kubernetes 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
      ...
      
    5. Сохраните значения полей Name и Namespace, они понадобятся в дальнейшем.

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

Консоль управления
  1. В консоли управления выберите каталог, к которому вы хотите получить доступ через API Yandex Cloud.
  2. В списке сервисов выберите Identity and Access Management.
  3. На панели слева выберите Федерации сервисных аккаунтов.
  4. Нажмите Создать федерацию.
  5. В поле Значение Issuer (iss) введите значение URL эмитента, полученное ранее, например https://storage.yandexcloud.net/mk8s-oidc/v1/clusters/c49i54tk66ob********.
  6. В поле Допустимые значения Audience (aud) также введите значение URL эмитента.
  7. В поле Адрес JWKS введите значение URL набора ключей JWKS, полученное ранее, например https://storage.yandexcloud.net/mk8s-oidc/v1/clusters/c49i54tk66ob********/jwks.json.
  8. В поле Имя введите имя федерации, например test-iam-federation.
  9. Нажмите Создать.

Подготовьте сервисный аккаунт IAMПодготовьте сервисный аккаунт IAM

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

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

    Консоль управления
    1. В консоли управления выберите каталог, в котором создан сервисный аккаунт.
    2. Перейдите на вкладку Права доступа.
    3. Нажмите Настроить доступ.
    4. В открывшемся окне выберите раздел Сервисные аккаунты.
    5. Выберите сервисный аккаунт, созданный ранее.
    6. Нажмите Добавить роль и выберите роль lockbox.payloadViewer.
    7. Нажмите Сохранить.

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

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

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

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

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

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

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

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

    • пространство_имен — значение поля Namespace сервисного аккаунта Kubernetes, например default.
    • имя_аккаунта — значение поля Name сервисного аккаунта Kubernetes, например wlif.
  8. Нажмите Привязать.

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

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

Проверьте работу интеграцииПроверьте работу интеграции

  1. Подключитесь к кластеру Managed Service for Kubernetes с помощью kubectl.

  2. Создайте манифест тестового пода 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: https://storage.yandexcloud.net/mk8s-oidc/v1/clusters/c49i54tk66ob********
    

    Где:

    • spec:serviceAccountName — имя сервисного аккаунта Kubernetes, созданного ранее.
    • spec:volumes:projected:sources:serviceAccountToken:audience — значение Допустимые значения Audience (aud), заданное при создании федерации.
  3. Примените манифест:

    kubectl apply -f pod.yaml
    
  4. Убедитесь, что созданный под перешел в статус Running:

    kubectl get pod test-wlif
    

    Результат:

    NAME        READY   STATUS    RESTARTS   AGE
    test-wlif   1/1     Running   0          1m
    
  5. Войдите в контейнер:

    kubectl exec test-wlif -it -- bash
    
  6. Задайте необходимые переменные:

    SA_ID="<идентификатор_сервисного_аккаунта_IAM>" && \
    SECRET_ID="<идентификатор_секрета_Lockbox>" && \
    SA_TOKEN="$(cat /var/run/secrets/tokens/sa-token)"
    

    Где:

    • SA_ID — идентификатор сервисного аккаунта IAM, полученный ранее.
    • SECRET_ID — идентификатор секрета Yandex Lockbox, полученный ранее.
    • SA_TOKEN — токен сервисного аккаунта Kubernetes.
  7. Установите вспомогательную утилиту jq:

    apt-get update >/dev/null 2>&1 && apt-get install -y jq >/dev/null 2>&1
    
  8. Получите IAM-токен:

    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')
    
  9. Получите секрет Yandex Lockbox:

    curl -sH "Authorization: Bearer ${IAMTOKEN}" \
      "https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/${SECRET_ID}/payload"
    

    Результат:

    {
     "entries": [
      {
       "key": "test-secret",
       "textValue": "hello-world"
      }
     ],
     "versionId": "e6qsqiadrsnhduubgijb"
    }
    

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  • Удалите секрет Yandex Lockbox.
  • Удалите группу узлов Managed Service for Kubernetes.
  • Удалите кластер Managed Service for Kubernetes.

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

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

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

Предыдущая
Пользовательская инсталляция Kubernetes
Следующая
SAML
Проект Яндекса
© 2025 ООО «Яндекс.Облако»