Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Identity and Access Management
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
      • GitHub
      • GitLab
      • Пользовательская инсталляция Kubernetes
      • Managed Service for Kubernetes
      • Настройка CI/CD между Cloud Functions и GitHub
  • Безопасное использование Yandex Cloud
  • Управление доступом
  • Правила тарификации
  • Справочник ролей
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Настройте кластер 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.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********.
  6. В поле Допустимые значения Audience (aud) также введите значение URL эмитента.
  7. В поле Адрес JWKS введите значение URL набора ключей JWKS, полученное ранее, например https://storage.yandexcloud.kz/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.kz/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://kz.auth.yandex.cloud/oauth/token | jq -r '.access_token')
    
  9. Получите секрет Yandex Lockbox:

    curl -sH "Authorization: Bearer ${IAMTOKEN}" \
      "https://dpl.lockbox.api.yandexcloud.kz/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
Следующая
Настройка CI/CD между Cloud Functions и GitHub
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»