ПР. Права доступа и роли для сервисного аккаунта
Кратко:
- Создание сервисного аккаунта и получение прав на управление им.
- Создание и привязка к аккаунту авторизованных ключей.
- Создание ключа шифрования в Yandex Key Management Service (KMS).
- Назначение сервисному аккаунту роли kms.admin для управления ключом.
- Ротация ключа с помощью сервисного аккаунта.
- Работа с интерфейсом командной строки CLI Yandex Cloud для выполнения практической работы.
Практическая работа. Права доступа и роли для сервисного аккаунта
В этом уроке вы научитесь работать с сервисными аккаунтами и назначать для них роли и права доступа к объектам. В качестве объекта будет выступать созданный в Yandex Key Management Service (KMS) ключ шифрования. Подробнее об этом сервисе вы узнаете на одном из следующих занятий. А сейчас предположим, что перед вами стоит задача использовать для ротации ключей сервисный аккаунт.
Чтобы решить эту задачу, понадобится выполнить следующие шаги:
- Создать сервисный аккаунт.
- Получить права на управление этим сервисным аккаунтом.
- Создать и привязать к сервисному аккаунту авторизованные ключи.
- Создать в сервисе KMS ключ шифрования.
- Назначить сервисному аккаунту роль
kms.admin
для управления этим ключом. - И, наконец, ротировать ключ, то есть создать его новую версию, с помощью сервисного аккаунта.
Стоит заметить, что через консоль управления сервисному аккаунту можно назначить роль только на каталог, в котором он был создан. Роли на все остальные ресурсы назначаются с помощью CLI или API. Поэтому для выполнения этой практической работы вам понадобится вспомнить то, чему вы научились в курсе «DevOps и автоматизация», и поработать с интерфейсом командной строки CLI Yandex Cloud.
Ну что же, поехали!
Шаг 1
Для начала создайте сервисный аккаунт. Если на вашем компьютере ещё не установлена утилита yc (CLI Yandex Cloud), то сделайте это, руководствуясь инструкцией в документации.
Откройте терминал и выполните команду:
yc iam service-account create --name <имя_сервисного_аккаунта>
Требования к формату имени сервисного аккаунта:
- длина — от 3 до 63 символов;
- имя может содержать только строчные буквы латинского алфавита, цифры и дефисы;
- первый символ должен быть буквой;
- последний символ не должен быть дефисом.
Если вы хотите добавить создаваемому сервисному аккаунту описание, то в этом случае команда будет выглядеть, например, так:
yc iam service-account create --name security-labs \
--description "Service account for Security course labs"
Шаг 2
Сервисный аккаунт является ресурсом, и для работы с ним нужна соответствующая роль. Добавьте вашему аккаунту роль
editor
на созданный сервисный аккаунт.-
Для начала убедитесь, что у вашего аккаунта есть роль
admin
на облако. Конечно, если вы являетесь владельцем облака, то ваша роль —resource-manager.clouds.owner
— включает разрешения всех остальных ролей и позволяет выполнять любые операции с облаком и ресурсами в нём.Проверить, какие роли в облаке у вас есть, можно с помощью команды:yc iam role list
-
Чтобы назначить вашему аккаунту роль на сервисный аккаунт, нужно сначала узнать их идентификаторы.Получите идентификатор своего аккаунта с помощью команды:
yc iam user-account get <ваш_логин>
Параметр<ваш_логин>
— это логин или адрес электронной почты, под которым вы авторизуетесь в облаке. -
Получите идентификатор сервисного аккаунта, запустив команду …
yc iam service-account list
или:yc iam service-account get <имя_сервисного_аккаунта>
-
Теперь предоставьте вашему аккаунту права на управление созданным сервисным аккаунтом. Для этого нужно выполнить команду:
yc iam service-account add-access-binding <id_сервисного_аккаунта> \ --role editor \ --subject userAccount:<id_пользовательского_аккаунта>
Шаг 3
Теперь нужно настроить аутентификацию под сервисным аккаунтом на вашем компьютере.
-
Создайте авторизованные ключи, которые нужны, чтобы получать IAM-токен для сервисного аккаунта, и сохраните их в JSON-файле (например
key.json
).Воспользуйтесь для этого командой:yc iam key create \ --service-account-name <имя_сервисного_аккаунта> \ --output key.json
-
Создайте профиль CLI Yandex Cloud, который будет использоваться сервисным аккаунтом. Придумайте имя этого профиля (например
key-rotator
) и выполните команду:yc config profile create <имя_профиля_сервисного_аккаунта>
-
Привяжите к этому профилю созданные авторизованные ключи и укажите идентификатор вашего рабочего каталога в качестве каталога по умолчанию:
yc config set service-account-key key.json yc config set folder-id <идентификатор_рабочего_каталога>
-
Чтобы убедиться, что всё сделано правильно, выведите информацию о параметрах профиля:
yc config list
Шаг 4
-
Создайте ключ шифрования, ротацией которого вы будете управлять с помощью сервисного аккаунта. Для этого в консоли управления облаком перейдите в дашборд вашего рабочего каталога, нажмите кнопку Создать ресурс (вверху справа) и выберите Ключ шифрования.В открывшемся окне задайте Имя ключа и нажмите кнопку Создать.
-
Выбрав созданный ключ на открывшейся странице Ключи, вы перейдёте на страницу Обзор с детальной информацией о нём.
-
Скопируйте идентификатор ключа, он понадобится вам на следующем шаге.
Шаг 5
-
Назначьте сервисному аккаунту роль
kms.admin
для управления созданным ключом шифрования. Перед этим нужно вернуться в профиль вашего аккаунта:yc config profile list yc config profile activate <имя_основного_профиля>
-
Выполните команду:
yc kms symmetric-key add-access-binding \ --id <id_ключа_шифрования> \ --role kms.admin \ --subject serviceAccount:<id_сервисного_аккаунта>
Теперь вы можете управлять этим ключом с помощью сервисного аккаунта.
Шаг 6
-
Переключитесь обратно в профиль сервисного аккаунта:
yc config profile activate <имя_профиля_сервисного_аккаунта>
-
Ротируйте ключ шифрования:
yc kms symmetric-key rotate --id <id_ключа_шифрования>
-
После выполнения команды вернитесь в консоль управления на страницу Обзор созданного ключа шифрования и перейдите на вкладку Операции.
Вы увидите, что операция по ротации ключа выполнена вашим сервисным аккаунтом. Значит всё получилось, и задача решена!