Настройка инструментов AWS
Для работы с БД через Document API в режиме совместимости с AWS DynamoDB вы можете использовать инструменты AWS:
Важно
Через Document API возможен доступ только к документным таблицам.
Для работы инструментов AWS выполните следующие настройки:
-
Создайте сервисный аккаунт, от имени которого вы будете работать с базой.
Сервисный аккаунт должен быть создан в том же каталоге, в котором располагается база данных.
Консоль управленияCLIAPI-
В консоли управления
на панели сверху нажмите и выберите нужный каталог. -
Перейдите в сервис Identity and Access Management.
-
Нажмите кнопку Создать сервисный аккаунт.
-
Введите имя сервисного аккаунта.
Требования к формату имени:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
Имя сервисного аккаунта должно быть уникальным в рамках облака.
-
Нажмите кнопку Создать.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.-
Посмотрите описание команды создания сервисного аккаунта:
yc iam service-account create --help -
Создайте сервисный аккаунт с именем
my-robot:yc iam service-account create --name my-robotТребования к имени сервисного аккаунта:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
Чтобы создать сервисный аккаунт, воспользуйтесь методом create для ресурса ServiceAccount.
-
-
Назначьте сервисному аккаунту роль
editor.Сервисному аккаунту можно назначать роли на любые ресурсы в любом облаке, если эти ресурсы относятся к той же организации, что и сервисный аккаунт. Также сервисному аккаунту можно назначать роли на саму организацию.
Назначение роли на ресурс
Права доступа наследуются от родительского ресурса к дочерним. Например, если сервисному аккаунту назначить роль на облако, этот сервисный аккаунт получит нужные разрешения на все ресурсы во всех каталогах этого облака.
Чтобы назначить роль на ресурс, нужна роль
adminилиservice-name.admin, гдеservice-name— названиее сервиса, на ресурс которого назначается роль.Узнайте, на какие ресурсы можно назначать роли.
Чтобы назначить роль на ресурс:
Консоль управленияCLITerraformAPIРоли сервисному аккаунту назначаются так же, как пользовательскому аккаунту.
Чтобы назначить сервисному аккаунту роль на облако или каталог:
- В консоли управления
на панели сверху нажмите и выберите облако или каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Сервисные аккаунты.
- Выберите нужный сервисный аккаунт из списка или воспользуйтесь поиском.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.Чтобы назначить сервисному аккаунту роль на облако или каталог, выполните команду:
yc resource-manager <категория_ресурса> add-access-binding <имя_или_идентификатор_ресурса> \ --role <идентификатор_роли> \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Где:
<категория_ресурса>—cloud, чтобы назначить роль на облако, илиfolder, чтобы назначить роль на каталог.<имя_или_идентификатор_ресурса>— имя или идентификатор ресурса, на который назначается роль.--role— идентификатор роли, напримерviewer.--subject serviceAccount— идентификатор сервисного аккаунта, которому назначается роль.
Например, чтобы назначить сервисному аккаунту роль
viewerна каталогmy-folder:-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте идентификатор сервисного аккаунта по его имени:
yc iam service-account get my-robotРезультат:
id: aje6o61dvog2******** folder_id: b1gvmob95yys******** created_at: "2018-10-15T18:01:25Z" name: my-robotЕсли вы не знаете имя сервисного аккаунта, получите список сервисных аккаунтов с их идентификаторами:
yc iam service-account listРезультат:
+----------------------+------------------+-----------------+ | ID | NAME | DESCRIPTION | +----------------------+------------------+-----------------+ | aje6o61dvog2******** | my-robot | my description | +----------------------+------------------+-----------------+ -
Назначьте роль
viewerсервисному аккаунтуmy-robot, используя его идентификатор:yc resource-manager folder add-access-binding my-folder \ --role viewer \ --subject serviceAccount:aje6o61dvog2********
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
Пример структуры конфигурационного файла:
resource "yandex_resourcemanager_folder_iam_member" "admin-account-iam" { folder_id = "<идентификатор_каталога>" role = "<роль>" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" }Где:
folder_id— идентификатор каталога. Обязательный параметр.role— назначаемая роль. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud. Обязательный параметр.member— идентификатор сервисного аккаунта, которому назначается роль. Указывается в видеserviceAccount:<идентификатор_сервисного_аккаунта>. Обязательный параметр.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание ресурсов: введите в терминал слово
yesи нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить создание ресурса можно в консоли управления
или с помощью команды CLI:yc resource-manager folder list-access-bindings <имя_или_идентификатор_каталога> -
Чтобы назначить сервисному аккаунту роль на облако или каталог, воспользуйтесь методом REST API
updateAccessBindingsдля ресурса Cloud или Folder:-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте ID каталога с сервисными аккаунтами.
-
Получите IAM-токен для аутентификации в API Yandex Cloud.
-
Получите список сервисных аккаунтов в каталоге, чтобы узнать их идентификаторы:
export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaATEVAgA... curl \ --header "Authorization: Bearer ${IAM_TOKEN}" \ "https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=${FOLDER_ID}"Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "my-robot", "description": "my description" } ] } -
Сформируйте тело запроса, например в файле
body.json. В свойствеactionукажитеADD, в свойствеroleId— нужную роль, напримерeditor, а в свойствеsubject— типserviceAccountи идентификатор сервисного аккаунта:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "ajebqtreob2d********", "type": "serviceAccount" } } }] } -
Назначьте роль сервисному аккаунту. Например, на каталог с идентификатором
b1gvmob95yys********:export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaAT******** curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Назначение роли на организацию
Права доступа наследуются от организации ко всем созданным в ней ресурсам. Например, если сервисному аккаунту назначить роль на организацию, этот сервисный аккаунт получит нужные разрешения на все ресурсы всех облаков этой организации.
Чтобы предоставить сервисному аккаунту права доступа к организации, необходима роль не ниже
organization-manager.admin.Интерфейс Cloud CenterCLITerraformAPI-
Войдите в сервис Yandex Identity Hub
с учетной записью администратора или владельца организации. -
На панели слева выберите
Права доступа. -
В фильтре Тип аккаунта выберите
Сервисные аккаунты. -
Если у нужного сервисного аккаунта уже есть хотя бы одна роль, в строке с этим аккаунтом нажмите значок
и выберите Назначить роли.Если нужного сервисного аккаунта нет в списке, в правом верхнем углу страницы нажмите кнопку Назначить роли. В открывшемся окне перейдите в раздел Сервисные аккаунты и выберите аккаунт из списка или воспользуйтесь поиском.
-
Нажмите кнопку
Добавить роль и выберите роль, которую хотите назначить сервисному аккаунту. Вы можете назначить несколько ролей.Описание доступных ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.Чтобы назначить сервисному аккаунту роль на организацию, выполните команду:
yc organization-manager organization add-access-binding <имя_или_идентификатор_организации> \ --role <идентификатор_роли> \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Где:
<имя_или_идентификатор_организации>— техническое название или идентификатор организации.--role— идентификатор роли, напримерviewer.--subject serviceAccount— идентификатор сервисного аккаунта, которому назначается роль.
Например, чтобы назначить сервисному аккаунту роль
viewerна организациюMyOrg:-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Получите список доступных вам организаций, чтобы узнать их идентификаторы и технические названия:
yc organization-manager organization listРезультат:
+---------------------------------+---------------------------------+----------------------+ | ID | NAME | TITLE | +---------------------------------+---------------------------------+----------------------+ | bpf1smsil5q0******** | hdt5j5uw******** | MyOrg | +---------------------------------+---------------------------------+----------------------+Техническое название организации находится в столбце
NAME, идентификатор организации — в столбцеID. -
Узнайте идентификатор сервисного аккаунта по его имени:
yc iam service-account get my-robotРезультат:
id: aje6o61dvog2******** folder_id: b1gvmob95yys******** created_at: "2018-10-15T18:01:25Z" name: my-robotЕсли вы не знаете имя сервисного аккаунта, получите полный список сервисных аккаунтов с их идентификаторами:
yc iam service-account listРезультат:
+----------------------+------------------+-----------------+ | ID | NAME | DESCRIPTION | +----------------------+------------------+-----------------+ | aje6o61dvog2******** | my-robot | my description | +----------------------+------------------+-----------------+ -
Назначьте сервисному аккаунту
my-robotрольviewerна организацию с идентификаторомbpf1smsil5q0********:yc organization-manager organization add-access-binding bpf1smsil5q0******** \ --role viewer \ --subject serviceAccount:aje6o61dvog2********
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
Пример структуры конфигурационного файла:
resource "yandex_organizationmanager_organization_iam_binding" "editor" { organization_id = "<идентификатор_организации>" role = "<роль>" members = [ "serviceAccount:<идентификатор_сервисного_аккаунта>", ] }Где:
organization_id— идентификатор организации. Обязательный параметр.role— назначаемая роль. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud. Для каждой роли можно использовать только одинyandex_organization manager_organization_iam_binding. Обязательный параметр.members— идентификатор сервисного аккаунта, которому назначается роль. Указывается в видеserviceAccount:<идентификатор_сервисного_аккаунта>. Обязательный параметр.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список назначенных ролей. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание ресурсов: введите в терминал слово
yesи нажмите Enter.
После этого в указанной организации будут созданы все требуемые ресурсы. Проверить создание ресурса можно в консоли управления
или с помощью команды CLI:yc organization-manager organization list-access-bindings <имя_или_идентификатор_организации> -
Чтобы назначить сервисному аккаунту роль на организацию, воспользуйтесь методом REST API updateAccessBindings для ресурса Organization:
-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте ID каталога с сервисными аккаунтами.
-
Получите IAM-токен для аутентификации в API Yandex Cloud.
-
Получите список сервисных аккаунтов в каталоге, чтобы узнать их идентификаторы:
export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaATEVAgA... curl \ --header "Authorization: Bearer ${IAM_TOKEN}" \ "https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=${FOLDER_ID}"Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "my-robot", "description": "my description" } ] } -
Получите список организаций, чтобы узнать их идентификаторы:
export IAM_TOKEN=CggaATEVAgA... curl \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --request GET \ "https://organization-manager.api.cloud.yandex.net/organization-manager/v1/organizations"Результат:
{ "organizations": [ { "id": "bpfaidqca8vd********", "createdAt": "2023-04-07T08:11:54.313033Z", "name": "xvdq9q22********", "title": "MyOrg" } ] } -
Сформируйте тело запроса, например в файле
body.json. В свойствеactionукажитеADD, в свойствеroleId— нужную роль, напримерviewer, а в свойствеsubject— типserviceAccountи идентификатор сервисного аккаунта:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "viewer", "subject": { "id": "ajebqtreob2d********", "type": "serviceAccount" } } }] } -
Назначьте роль сервисному аккаунту. Например, на организацию с идентификатором
bpfaidqca8vd********:export ORGANIZATION_ID=bpfaidqca8vd******** export IAM_TOKEN=CggaATEVAgA... curl \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '@body.json' \ --request POST \ "https://organization-manager.api.cloud.yandex.net/organization-manager/v1/organizations/${ORGANIZATION_ID}:updateAccessBindings"
- В консоли управления
-
Получите идентификатор ключа и ключ доступа созданного сервисного аккаунта:
Консоль управленияCLIAPI-
Перейдите в каталог, которому принадлежит сервисный аккаунт.
-
В списке сервисов выберите Identity and Access Management.
-
На панели слева выберите
Сервисные аккаунты и выберите нужный сервисный аккаунт. -
Нажмите кнопку Создать новый ключ на верхней панели.
-
Выберите пункт Создать статический ключ доступа.
-
Задайте описание ключа, чтобы потом было проще найти его в консоли управления.
-
Сохраните идентификатор и секретный ключ.
Внимание
После закрытия диалога значение ключа будет недоступно.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.-
Посмотрите описание команды создания статического ключа доступа:
yc iam access-key create --help -
Выберите сервисный аккаунт, например
my-robot:yc iam service-account list +----------------------+------------------+-------------------------------+ | ID | NAME | DESCRIPTION | +----------------------+------------------+-------------------------------+ | aje6o61dvog2******** | my-robot | | ... -
Создайте ключ доступа для сервисного аккаунта
my-robot:yc iam access-key create --service-account-name my-robot access_key: id: aje6t3vsbj8l******** service_account_id: ajepg0mjt06s******** created_at: "2018-11-22T14:37:51Z" key_id: 0n8X6WY6S24N******** secret: JyTRFdqw8t1kh2-OJNz4JX5ZTz9Dj1rI******** -
Сохраните идентификатор
key_idи секретный ключsecret. Получить значение ключа снова будет невозможно.
-
-
Установите AWS CLI
. -
Настройте окружение AWS CLI: Запустите команду
aws configureи последовательно введите сохраненные ранее идентификатор ключа и секретный ключ. Для значения региона используйтеru-central1:aws configure AWS Access Key ID [None]: AKIAIOSFODNN******** AWS Secret Access Key [None]: wJalr********/*******/bPxRfiCYEX******** Default region name [None]: ru-central1 Default output format [None]:В результате будут созданы файлы
~/.aws/credentialsи~/.aws/config(C:\Users\USERNAME\.aws\credentialsиC:\Users\USERNAME\.aws\configв Windows). -
Проверьте корректность настройки, запустив команду листинга таблиц в созданной ранее БД. В качестве значения
--endpointукажите Document API эндпоинт, доступный на вкладке Обзор вашей базы данных в консоли управления .aws dynamodb list-tables \ --endpoint https://docapi.serverless.yandexcloud.net/ru-central1/b1gia87mbaom********/etnudu2n9ri3********Результат:
{ "TableNames": [ ] }