ПР. Права доступа и роли для сервисного аккаунта

Кратко:

  • Создание сервисного аккаунта и получение прав на управление им.
  • Создание и привязка к аккаунту авторизованных ключей.
  • Создание ключа шифрования в Yandex Key Management Service (KMS).
  • Назначение сервисному аккаунту роли kms.admin для управления ключом.
  • Ротация ключа с помощью сервисного аккаунта.
  • Работа с интерфейсом командной строки CLI Yandex Cloud для выполнения практической работы.

Практическая работа. Права доступа и роли для сервисного аккаунта

В этом уроке вы научитесь работать с сервисными аккаунтами и назначать для них роли и права доступа к объектам. В качестве объекта будет выступать созданный в Yandex Key Management Service (KMS) ключ шифрования. Подробнее об этом сервисе вы узнаете на одном из следующих занятий. А сейчас предположим, что перед вами стоит задача использовать для ротации ключей сервисный аккаунт.
Чтобы решить эту задачу, понадобится выполнить следующие шаги:
  1. Создать сервисный аккаунт.
  2. Получить права на управление этим сервисным аккаунтом.
  3. Создать и привязать к сервисному аккаунту авторизованные ключи.
  4. Создать в сервисе KMS ключ шифрования.
  5. Назначить сервисному аккаунту роль kms.admin для управления этим ключом.
  6. И, наконец, ротировать ключ, то есть создать его новую версию, с помощью сервисного аккаунта.
Стоит заметить, что через консоль управления сервисному аккаунту можно назначить роль только на каталог, в котором он был создан. Роли на все остальные ресурсы назначаются с помощью 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 на созданный сервисный аккаунт.
  1. Для начала убедитесь, что у вашего аккаунта есть роль admin на облако. Конечно, если вы являетесь владельцем облака, то ваша роль — resource-manager.clouds.owner — включает разрешения всех остальных ролей и позволяет выполнять любые операции с облаком и ресурсами в нём.
    Проверить, какие роли в облаке у вас есть, можно с помощью команды:
    yc iam role list
     
  2. Чтобы назначить вашему аккаунту роль на сервисный аккаунт, нужно сначала узнать их идентификаторы.
    Получите идентификатор своего аккаунта с помощью команды:
    yc iam user-account get <ваш_логин>
     
    Параметр <ваш_логин> — это логин или адрес электронной почты, под которым вы авторизуетесь в облаке.
  3. Получите идентификатор сервисного аккаунта, запустив команду …
    yc iam service-account list
     
    или:
    yc iam service-account get <имя_сервисного_аккаунта>
     
     
  4. Теперь предоставьте вашему аккаунту права на управление созданным сервисным аккаунтом. Для этого нужно выполнить команду:
    yc iam service-account add-access-binding <id_сервисного_аккаунта> \
    --role editor \
    --subject userAccount:<id_пользовательского_аккаунта>
     

Шаг 3

Теперь нужно настроить аутентификацию под сервисным аккаунтом на вашем компьютере.
  1. Создайте авторизованные ключи, которые нужны, чтобы получать IAM-токен для сервисного аккаунта, и сохраните их в JSON-файле (например key.json).
    Воспользуйтесь для этого командой:
    yc iam key create \
    --service-account-name <имя_сервисного_аккаунта> \
    --output key.json
     
     
  2. Создайте профиль CLI Yandex Cloud, который будет использоваться сервисным аккаунтом. Придумайте имя этого профиля (например key-rotator) и выполните команду:
    yc config profile create <имя_профиля_сервисного_аккаунта>
     
     
  3. Привяжите к этому профилю созданные авторизованные ключи и укажите идентификатор вашего рабочего каталога в качестве каталога по умолчанию:
    yc config set service-account-key key.json
    yc config set folder-id <идентификатор_рабочего_каталога>
     
     
  4. Чтобы убедиться, что всё сделано правильно, выведите информацию о параметрах профиля:
    yc config list
     

Шаг 4

  1. Создайте ключ шифрования, ротацией которого вы будете управлять с помощью сервисного аккаунта. Для этого в консоли управления облаком перейдите в дашборд вашего рабочего каталога, нажмите кнопку Создать ресурс (вверху справа) и выберите Ключ шифрования.
    В открывшемся окне задайте Имя ключа и нажмите кнопку Создать.
    image
  2. Выбрав созданный ключ на открывшейся странице Ключи, вы перейдёте на страницу Обзор с детальной информацией о нём.
  3. Скопируйте идентификатор ключа, он понадобится вам на следующем шаге.
    image

Шаг 5

  1. Назначьте сервисному аккаунту роль kms.admin для управления созданным ключом шифрования. Перед этим нужно вернуться в профиль вашего аккаунта:
    yc config profile list
    yc config profile activate <имя_основного_профиля>
     
  2. Выполните команду:
    yc kms symmetric-key add-access-binding \
    --id <id_ключа_шифрования> \
    --role kms.admin \
    --subject serviceAccount:<id_сервисного_аккаунта>
     
    Теперь вы можете управлять этим ключом с помощью сервисного аккаунта.

Шаг 6

  1. Переключитесь обратно в профиль сервисного аккаунта:
    yc config profile activate <имя_профиля_сервисного_аккаунта>
     
  2. Ротируйте ключ шифрования:
    yc kms symmetric-key rotate --id <id_ключа_шифрования>
     
  3. После выполнения команды вернитесь в консоль управления на страницу Обзор созданного ключа шифрования и перейдите на вкладку Операции.
    image
Вы увидите, что операция по ротации ключа выполнена вашим сервисным аккаунтом. Значит всё получилось, и задача решена!