Доступ к API Yandex Cloud из кластера Managed Service for Kubernetes с помощью федерации сервисных аккаунтов Identity and Access Management
- Подготовьте облако к работе
- Настройте кластер Managed Service for Kubernetes
- Создайте федерацию сервисных аккаунтов
- Подготовьте сервисный аккаунт IAM
- Подготовьте сервисный аккаунт Kubernetes
- Привяжите сервисный аккаунт IAM к федерации
- Создайте секрет Yandex Lockbox
- Проверьте работу интеграции
- Как удалить созданные ресурсы
В Managed Service for Kubernetes реализована интеграция с федерациями сервисных аккаунтов Identity and Access Management.
Федерации сервисных аккаунтов (Workload Identity Federation) позволяют настроить связь между внешними системами и Yandex Cloud по протоколу OpenID Connect
При включении опции Managed Service for Kubernetes автоматически создает для конкретного кластера OIDC-провайдер и предоставляет следующие параметры для интеграции с федерациями сервисных аккаунтов:
URL эмитента.URL набора ключей JWKS.
Важно
Полная интеграция с федерацией сервисных аккаунтов с использованием контроллера DaemonSet yc-metadata-server на узлах для автоматического обмена токенов сервисного аккаунта Kubernetes на IAM-токен доступна для кластеров с актуальной версией Kubernetes в релизном канале RAPID.
Частичная интеграция с ручным обменом токенов сервисного аккаунта Kubernetes на IAM-токен доступна для кластеров со всеми актуальными версиями Kubernetes во всех релизных каналах.
В этом руководстве для примера показано, как получить значение секрета 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:
- Подготовьте облако к работе.
- Настройте кластер Managed Service for Kubernetes.
- Создайте федерацию сервисных аккаунтов.
- Подготовьте сервисный аккаунт IAM.
- Подготовьте сервисный аккаунт Kubernetes.
- Привяжите сервисный аккаунт IAM к федерации.
- Создайте секрет Yandex Lockbox.
- Проверьте работу интеграции.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице 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:
-
Создайте кластер.
Совет
Чтобы использовать контроллер DaemonSet
yc-metadata-serverна узлах для автоматического обмена токенов сервисного аккаунта Kubernetes на IAM-токен, создайте кластер в релизном каналеRAPID.Для остальных релизных каналов доступен ручной обмен токенов сервисного аккаунта Kubernetes на IAM-токен.
-
Создайте группу узлов.
-
Настройте группы безопасности для кластера и группы узлов.
-
-
Для доступа к API Yandex Cloud у узлов кластера должен быть доступ в интернет. Убедитесь, что узлам кластера назначены публичные IP-адреса, или в подсети, где размещаются узлы, настроен NAT-шлюз или NAT-инстанс. Также убедитесь, что правилами группы безопасности разрешен весь исходящий трафик для узлов кластера.
-
Настройте интеграцию с федерацией сервисных аккаунтов для кластера и группы узлов:
Консоль управленияCLITerraformAPI- В консоли управления
выберите каталог, в котором размещен кластер. - Перейдите в сервис Managed Service for Kubernetes.
- Напротив кластера нажмите
и выберите Редактировать. - В поле Управление идентификацией и доступом включите федерацию сервисных аккаунтов.
- Нажмите Сохранить.
- На обзорной странице кластера в блоке Управление идентификацией и доступом скопируйте значения параметров URL эмитента и URL набора ключей JWKS. Они понадобятся для дальнейшей интеграции.
- Перейдите на вкладку Группы узлов.
- Напротив группы узлов нажмите
и выберите Редактировать. - В поле Управление идентификацией и доступом включите федерацию сервисных аккаунтов.
- Нажмите Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.-
Включите поддержку интеграции с федерацией сервисных аккаунтов в кластере:
yc managed-kubernetes cluster update \ --id <идентификатор_кластера> \ --enable-workload-identity-federationРезультат:
done (3s) ... workload_identity_federation: enabled: true issuer: https://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/catc7433801j******** jwks_uri: https://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/catc7433801j********/jwks.jsonСкопируйте значения параметров
workload_identity_federation.issuerиworkload_identity_federation.jwks_uri. Они понадобятся для дальнейшей интеграции. -
Включите поддержку интеграции с федерацией сервисных аккаунтов в группе узлов:
yc managed-kubernetes node-group update \ --id <идентификатор_группы_узлов> \ --enable-workload-identity-federationРезультат:
done (12s) ... workload_identity_federation: enabled: true
Terraform
позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.Terraform распространяется под лицензией Business Source License
, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0 .Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
или в зеркале.Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
В конфигурационном файле Terraform добавьте в манифест кластера блок
workload_identity_federation:resource "yandex_kubernetes_cluster" "my_cluster" { ... workload_identity_federation { enabled = true } } -
В конфигурационном файле Terraform добавьте в манифест группы узлов блок
workload_identity_federation:resource "yandex_kubernetes_node_group" "my_node_group" { ... workload_identity_federation { enabled = true } } -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите URL эмитента (
issuer) и URL набора ключей JWKS (jwks_uri) для настройки федерации сервисных аккаунтов с помощью источника данных Terraform yandex_kubernetes_cluster.Также вы можете узнать эти параметры в консоли управления
, с помощью CLI или API.
-
Воспользуйтесь методом REST API update для ресурса Cluster или вызовом gRPC API ClusterService/Update.
Примечание
Ниже перечислены параметры для тела запроса к REST API. Чтобы указать параметр в вызове gRPC API, преобразуйте его имя из lowerCamelCase
в snake_case . Например, параметрminResourcePresetIdпреобразуется вmin_resource_preset_id.Передайте в запросе:
-
Идентификатор кластера в параметре
clusterId. -
Параметр
updateMaskсо значениемworkloadIdentityFederation.enabled.Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую). -
Параметр
workloadIdentityFederationсо значением"enabled": "true".
Скопируйте из ответа значения параметров
workloadIdentityFederation.issuerиworkloadIdentityFederation.jwksUri. Они понадобятся в дальнейшем. -
-
Воспользуйтесь методом REST API update для ресурса NodeGroup или вызовом gRPC API NodeGroupService/Update.
Передайте в запросе:
- Идентификатор группы узлов в параметре
nodeGroupId. - Параметр
updateMaskсо значениемworkloadIdentityFederation.enabled. - Параметр
workloadIdentityFederationсо значением"enabled": "true".
- Идентификатор группы узлов в параметре
- В консоли управления
Создайте федерацию сервисных аккаунтов
- В консоли управления
выберите каталог, к которому вы хотите получить доступ через API Yandex Cloud. - Перейдите в сервис Identity and Access Management.
- На панели слева выберите
Федерации сервисных аккаунтов. - Нажмите Создать федерацию.
- В поле Значение Issuer (iss) введите значение URL эмитента, полученное ранее, например
https://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********. - В поле Допустимые значения Audience (aud) также введите значение URL эмитента.
- В поле Адрес JWKS введите значение URL набора ключей JWKS, полученное ранее, например
https://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********/jwks.json. - В поле Имя введите имя федерации, например
test-iam-federation. - Нажмите Создать.
Выполните команду:
yc iam workload-identity oidc federation create \
--name <имя_федерации> \
--issuer "<URL_эмитента>" \
--audiences "<URL_эмитента>" \
--jwks-url "<URL_набора_ключей_JWKS>"
Где:
--name— имя создаваемой федерации, напримерtest-iam-federation.--issuerи--audiences— значение URL эмитента, полученное ранее, напримерhttps://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********.--jwks-url— значение URL набора ключей JWKS, полученное ранее, напримерhttps://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********/jwks.json.
Результат:
id: aje2c4qv19lf********
name: test-iam-federation
folder_id: b1gfq9pe6rd2********
enabled: true
audiences:
- https://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********
issuer: https://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********
jwks_url: https://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********/jwks.json
created_at: "2024-12-28T16:04:31.530652473Z"
Сохраните идентификатор федерации, он понадобится в дальнейшем.
-
Опишите в конфигурационном файле Terraform параметры федерации, которую необходимо создать:
resource "yandex_iam_workload_identity_oidc_federation" "wlif" { name = "<имя_федерации>" folder_id = "<идентификатор_каталога>" issuer = "<URL_эмитента>" audiences = ["<URL_эмитента>"] jwks_url = "<URL_набора_ключей_JWKS>" }Где:
name— имя создаваемой федерации, напримерtest-iam-federation.folder_id— идентификатор каталога, в котором создается федерация сервисных аккаунтов.issuerиaudiences— значение URL эмитента, полученное ранее, напримерhttps://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********.jwks_url— значение URL набора ключей JWKS, полученное ранее, напримерhttps://storage.yandexcloud.kz/mk8s-oidc/v1/clusters/c49i54tk66ob********/jwks.json.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите создание ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Сохраните идентификатор федерации, он понадобится в дальнейшем.
-
Чтобы создать федерацию сервисных аккаунтов, воспользуйтесь методом REST API create для ресурса Federation или вызовом gRPC API FederationService/Create.
Подготовьте сервисный аккаунт IAM
-
Создайте сервисный аккаунт IAM:
Консоль управленияCLITerraformAPI- В консоли управления
выберите каталог, в котором размещен секрет Yandex Lockbox. - Перейдите в сервис Identity and Access Management.
- Нажмите Создать сервисный аккаунт.
- Введите имя сервисного аккаунта, например
sa-lockbox. - Нажмите Создать.
- Выберите созданный сервисный аккаунт и сохраните его идентификатор, он понадобится в дальнейшем.
Выполните команду:
yc iam service-account create --name sa-lockboxРезультат:
done (2s) id: aje7s96nvmdp******** folder_id: b1gsm0k26v1l******** created_at: "2026-03-12T12:16:01Z" name: sa-lockboxСохраните идентификатор сервисного аккаунта IAM, он понадобится в дальнейшем.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" folder_id = "<идентификатор_каталога>" }Где:
name— имя сервисного аккаунта, напримерsa-lockbox.folder_id— идентификатор каталога.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите создание ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Сохраните идентификатор сервисного аккаунта IAM, он понадобится в дальнейшем.
-
Воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
- В консоли управления
-
Назначьте сервисному аккаунту роль
lockbox.payloadViewerна каталог:Консоль управленияCLITerraformAPI- В консоли управления
выберите каталог, в котором создан сервисный аккаунт. - Перейдите на вкладку Права доступа.
- Нажмите Настроить доступ.
- В открывшемся окне выберите раздел Сервисные аккаунты.
- Выберите сервисный аккаунт, созданный ранее.
- Нажмите
Добавить роль и выберите рольlockbox.payloadViewer. - Нажмите Сохранить.
Выполните команду, указав идентификаторы каталога и сервисного аккаунта:
yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role lockbox.payloadViewer \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_resourcemanager_folder_iam_member" "lockbox" { folder_id = "<идентификатор_каталога>" role = "lockbox.payloadViewer" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" }Где:
folder_id— идентификатор каталога.role— назначаемая роль, напримерlockbox.payloadViewer.member— идентификатор сервисного аккаунта, которому назначается роль. Указывается в видеserviceAccount:<идентификатор_сервисного_аккаунта>.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите создание ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Воспользуйтесь методом REST API UpdateAccessBindings для ресурса Folder или вызовом gRPC API FolderService/UpdateAccessBindings.
- В консоли управления
Подготовьте сервисный аккаунт Kubernetes
-
Подключитесь к кластеру Managed Service for Kubernetes с помощью
kubectl. -
Создайте манифест сервисного аккаунта Kubernetes
service-account.yamlсо следующим содержимым:apiVersion: v1 kind: ServiceAccount metadata: name: wlif annotations: yandex.cloud/federated-yc-service-account-id: <идентификатор_сервисного_аккаунта_IAM> -
Примените манифест:
kubectl apply -f service-account.yaml -
Чтобы проверить созданный ресурс
ServiceAccount, выполните команду:kubectl describe serviceaccount wlifРезультат:
Name: wlif Namespace: default ... -
Сохраните значения полей
NameиNamespace, они понадобятся в дальнейшем.
Привяжите сервисный аккаунт IAM к федерации
-
В консоли управления
выберите каталог, в котором был создан сервисный аккаунт. -
Перейдите в сервис Identity and Access Management.
-
В списке выберите сервисный аккаунт
sa-lockbox. -
Перейдите на вкладку Федерации сервисных аккаунтов.
-
Нажмите Привязать к федерации.
-
В поле Федерация сервисных аккаунтов выберите ранее созданную федерацию.
-
В поле Значение Subject (sub) укажите идентификатор сервисного аккаунта Kubernetes, созданного ранее, в формате
system:serviceaccount:<пространство_имен>:<имя_сервисного_аккаунта_Kubernetes>, где:пространство_имен— значение поляNamespaceсервисного аккаунта Kubernetes, напримерdefault.имя_аккаунта— значение поляNameсервисного аккаунта Kubernetes, напримерwlif.
-
Нажмите Привязать.
Выполните команду:
yc iam workload-identity federated-credential create \
--service-account-id <идентификатор_сервисного_аккаунта_IAM> \
--federation-id <идентификатор_федерации> \
--external-subject-id "system:serviceaccount:<пространство_имен>:<имя_сервисного_аккаунта_Kubernetes>"
Где:
--service-account-id— идентификатор сервисного аккаунта IAM, полученный ранее.--federation-id— идентификатор федерации сервисных аккаунтов, полученный ранее.--external-subject-id— идентификатор внешнего субъекта, где:пространство_имен— значение поляNamespaceсервисного аккаунта Kubernetes, напримерdefault.имя_сервисного_аккаунта_Kubernetes— значение поляNameсервисного аккаунта Kubernetes, напримерwlif.
Результат:
id: aje401v1sup8********
service_account_id: ajek7v5j65cg********
federation_id: aje2c4qv19lf********
external_subject_id: system:serviceaccount:default:wlif
created_at: "2024-12-28T16:33:47.057632267Z"
-
Опишите в конфигурационном файле Terraform параметры привязки, которую необходимо создать:
resource "yandex_iam_workload_identity_federated_credential" "fc" { service_account_id = "<идентификатор_сервисного_аккаунта>" federation_id = "<идентификатор_федерации>" external_subject_id = "system:serviceaccount:<пространство_имен>:<имя_сервисного_аккаунта_Kubernetes>" }Где:
service_account_id— идентификатор сервисного аккаунта IAM, полученный ранее.federation_id— идентификатор федерации сервисных аккаунтов, полученный ранее.external-subject-id— идентификатор внешнего субъекта, где:пространство_имен— значение поляNamespaceсервисного аккаунта Kubernetes, напримерdefault.external_subject_id— значение поляNameсервисного аккаунта Kubernetes, напримерwlif.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите создание ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Чтобы создать привязку, воспользуйтесь методом REST API create для ресурса FederatedCredential или вызовом gRPC API FederatedCredentialService/Create.
Создайте секрет Yandex Lockbox
- В консоли управления
выберите каталог, в котором будет создан секрет. - Перейдите в сервис Lockbox.
- Нажмите Создать секрет.
- В поле Имя введите имя секрета
MY_SECRET. - Выберите Тип секрета
Пользовательский. - В поле Ключ введите неконфиденциальный идентификатор, например
test-secret. - В поле Значение введите конфиденциальные данные для хранения, например
hello-world. - Нажмите Создать.
- Сохраните идентификатор секрета, он понадобится в дальнейшем.
Выполните команду:
yc lockbox secret create \
--name <имя_секрета> \
--payload "<массив_с_содержимым_секрета>" \
Где:
--name— имя секрета, напримерMY_SECRET.--payload— содержимое секрета в виде массива формата YAML или JSON, например"[{'key': 'test-secret', 'text_value': 'hello-world'}]".
Результат:
done (1s)
id: e6qduvprvcon********
folder_id: b1gsm0k26v1l********
created_at: "2026-03-12T13:02:15.543Z"
name: MY_SECRET
status: ACTIVE
current_version:
id: e6qr13mvsl8t********
secret_id: e6qduvprvcon********
created_at: "2026-03-12T13:02:15.543Z"
status: ACTIVE
payload_entry_keys:
- test-secret
-
Опишите в конфигурационном файле параметры секрета:
resource "yandex_lockbox_secret" "my_secret" { name = "<имя_секрета>" }Где
name— имя секрета, напримерMY_SECRET. -
Проверьте корректность конфигурации секрета.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите создание секрета.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Сохраните идентификатор секрета, он понадобится в дальнейшем.
-
-
Опишите в конфигурационном файле параметры содержимого секрета:
resource "yandex_lockbox_secret_version_hashed" "my_version" { secret_id = "<идентификатор_секрета>" key_1 = "<ключ_секрета_1>" text_value_1 = "<значение_секрета_1>" }Где:
secret_id— идентификатор секрета, для которого создается версия.key_1— ключ секрета. Несекретное название для значения, по которому вы будете его идентифицировать, напримерtest-secret.text_value_1— секретные данные в явном виде, напримерhello-world.
-
Проверьте корректность конфигурации содержимого секрета.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите создание содержимого секрета.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Чтобы создать секрет, воспользуйтесь методом REST API create для ресурса Secret или вызовом gRPC API SecretService/Create.
Проверьте работу интеграции
Совет
Ниже представлен сценарий c использованием контроллера DaemonSet yc-metadata-server на узлах для автоматического обмена токенов сервисного аккаунта Kubernetes на IAM-токен, доступный для кластеров в релизном канале RAPID. Для кластеров в других релизных каналах см. подраздел Ручной обмен токена сервисного аккаунта Kubernetes на IAM-токен.
-
Подключитесь к кластеру Managed Service for Kubernetes с помощью
kubectl. -
Создайте манифест тестового пода
pod.yamlсо следующим содержимым:apiVersion: v1 kind: Pod metadata: name: test-wlif spec: containers: - image: nginx name: nginx serviceAccountName: wlifГде
spec:serviceAccountName— имя сервисного аккаунта Kubernetes, созданного ранее. -
Примените манифест:
kubectl apply -f pod.yaml -
Убедитесь, что созданный под перешел в статус
Running:kubectl get pod test-wlifРезультат:
NAME READY STATUS RESTARTS AGE test-wlif 1/1 Running 0 1m -
Войдите в контейнер:
kubectl exec test-wlif -it -- bash -
Установите вспомогательную утилиту
jq:apt-get update >/dev/null 2>&1 && apt-get install -y jq >/dev/null 2>&1 -
Получите IAM-токен:
IAMTOKEN=$(curl -s -H 'Metadata-Flavor: Google' \ http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token \ | jq -r '.access_token') -
Получите секрет Yandex Lockbox:
curl -sH "Authorization: Bearer ${IAMTOKEN}" \ "https://dpl.lockbox.api.yandexcloud.kz/lockbox/v1/secrets/<идентификатор_секрета>/payload"Результат:
{ "entries": [ { "key": "test-secret", "textValue": "hello-world" } ], "versionId": "e6qsqiadrsnh********" }
Ручной обмен токена сервисного аккаунта Kubernetes на IAM-токен
-
Подключитесь к кластеру Managed Service for Kubernetes с помощью
kubectl. -
Создайте манифест тестового пода
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), заданное при создании федерации.
-
Примените манифест:
kubectl apply -f pod.yaml -
Убедитесь, что созданный под перешел в статус
Running:kubectl get pod test-wlifРезультат:
NAME READY STATUS RESTARTS AGE test-wlif 1/1 Running 0 1m -
Войдите в контейнер:
kubectl exec test-wlif -it -- bash -
Задайте необходимые переменные:
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.
-
Установите вспомогательную утилиту
jq:apt-get update >/dev/null 2>&1 && apt-get install -y jq >/dev/null 2>&1 -
Получите 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') -
Получите секрет 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": "e6qsqiadrsnh********" }
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите секрет Yandex Lockbox.
- Удалите группу узлов Managed Service for Kubernetes.
- Удалите кластер Managed Service for Kubernetes.