Включение поддержки федерации сервисных аккаунтов Yandex Identity and Access Management в кластере Yandex Managed Service for Kubernetes
В Managed Service for Kubernetes реализована интеграция с федерациями сервисных аккаунтов Identity and Access Management.
Федерации сервисных аккаунтов (Workload Identity Federation) позволяют настроить связь между внешними системами и Yandex Cloud по протоколу OpenID Connect
При включении опции Managed Service for Kubernetes автоматически создает для конкретного кластера OIDC-провайдер и предоставляет следующие параметры для интеграции с федерациями сервисных аккаунтов:
URL эмитента.URL набора ключей JWKS.
Совет
В инструкции описана настройка кластера и групп узлов Managed Service for Kubernetes, полное руководство по интеграции с федерациями сервисных аккаунтов Identity and Access Management см. на странице Доступ к API Yandex Cloud из кластера Managed Service for Kubernetes с помощью федерации сервисных аккаунтов Identity and Access Management.
-
Если у вас еще нет кластера 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".
- Идентификатор группы узлов в параметре
- В консоли управления