Yandex Cloud base
August 27, 2022

Создать сервисный аккаунт с ключами

Эту статью по-хорошему надо было бы написать в самом начале. Это резко уменьшило бы количество написанных мною строчек. Но как есть, лучше поздно чем никогда. В этой статье опишем как создать сервисный аккаунт (далее SA), назначить ему необходимые права доступа на фолдер, создать для него API ключ и IAM ключа чтобы иметь возможность от его имени что-то запускать. А также создадим статические ключи доступа, чтобы иметь возможность взаимодействовать с S3 от имени SA.

SA - это аккаунт, от имени которого программы могут управлять ресурсами в Yandex Cloud.

Поехали! Создадим SA.

yc iam service-account create \
   --name cameda-service \
   --description "Main service account" \
   --async

Если необходимо что-то изменить в SA, то это можно сделать через команду update.

yc iam service-account update cameda-service \
   --description "Main service account" \
   --async

Добавим созданному аккаунту необходимых прав доступа.

export FOLDER=$(yc config get folder-id) 
export SA=$(yc iam service-account get cameda-service --format json | jq -r '.id')
yc resource folder add-access-binding $FOLDER --role editor --subject serviceAccount:$SA

В этой статье я не запариваюсь кастомными правами для SA. Поэтому довольно топорно назначу права editor. Но это решение не очень секьюрное и в проде не рекомендуется. Лучше выдавать сервисному аккаунту минимальный набор прав для решения конкретных задач. Например, здесь https://teletype.in/@cameda/3BqWWeOkRZ0 при создании кластера k8s я создал SA с минимально необходимым набором прав.

Проверим, что права действительно установились.

yc resource folder list-access-bindings $FOLDER | grep $SA

В появившейся таблице будут указаны все роли в фолдере нашего SA. Это роль editor.

Создадим API ключ для SA.

yc iam api-key create --service-account-id $SA > api-key.yaml

Создадим IAM ключ для SA.

yc iam key create --service-account-id $SA --output key.json

Создадим статический ключ доступа для возможности работы с Object Storage:

yc iam access-key create --service-account-id $SA > stat-key-to-s3.txt

или в формате json:

yc iam access-key create --service-account-id $SA --format=json > stat-key-to-s3.json

Всё! Теперь наш SA готов к работе! Теперь главное эти ключи не потерять.

Полезные ссылки.

Что такое SA? https://cloud.yandex.ru/docs/iam/concepts/users/service-accounts
Как создать SA? https://cloud.yandex.ru/docs/iam/operations/sa/create
Как назначить права доступа для SA? https://cloud.yandex.ru/docs/iam/operations/sa/set-access-bindings
Что такое API ключ? https://cloud.yandex.ru/docs/iam/concepts/authorization/api-key
Что такое IAM токен?
https://cloud.yandex.ru/docs/iam/concepts/authorization/iam-token
Как просмотреть назначенные роли? https://cloud.yandex.ru/docs/iam/operations/roles/get-assigned-roles
Как создать API ключ? https://cloud.yandex.ru/docs/iam/operations/api-key/create
Как создать IAM токен?
https://cloud.yandex.ru/docs/iam/operations/iam-token/create-for-sa
Какой ключ используется для аутентификации в Object Storage?
https://cloud.yandex.ru/docs/iam/concepts/authorization/access-key
Как создать статический ключ доступа?
https://cloud.yandex.ru/docs/iam/operations/sa/create-access-key
Рекомендации по обеспечению безопасности в облаке:
https://cloud.yandex.ru/docs/iam/best-practices/using-iam-securely