Настройка инструментов 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 <идентификатор_роли> \ --service-account-id <идентификатор_сервисного_аккаунта>Где:
<категория_ресурса>—cloud, чтобы назначить роль на облако, илиfolder, чтобы назначить роль на каталог.<имя_или_идентификатор_ресурса>— имя или идентификатор ресурса, на который назначается роль.--role— идентификатор роли, напримерviewer.--service-account-id— идентификатор сервисного аккаунта, которому назначается роль.
Например, чтобы назначить сервисному аккаунту роль на каталог:
-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте идентификатор сервисного аккаунта по его имени:
yc iam service-account get <имя_сервисного_аккаунта>Результат:
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 | +----------------------+------------------+-----------------+ -
Назначьте роль сервисному аккаунту, используя его идентификатор:
yc resource-manager folder add-access-binding <имя_или_идентификатор_каталога> \ --role <роль> \ --service-account-id <идентификатор_сервисного_аккаунта>Где:
--role— идентификатор роли, которую нужно назначить.--service-account-id— идентификатор сервисного аккаунта. Также вы можете использовать параметр--service-account-nameи указать логин пользователя вместо идентификатора.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать.
Пример структуры конфигурационного файла для назначения роли на каталог:
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:<идентификатор_сервисного_аккаунта>.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора —
<тип_субъекта>:<идентификатор>. Возможные обозначения субъектов:Тип субъекта
Обозначение субъекта
userAccountuserAccount:<идентификатор_пользователя>serviceAccountserviceAccount:<идентификатор_сервисного_аккаунта>federatedUserfederatedUser:<идентификатор_пользователя>groupgroup:<идентификатор_группы>systemsystem:allAuthenticatedUsers(группа
All authenticated users)system:allUsers(группа
All users)system:group:organization:<идентификатор_организации>:users(группа
All users in organization X)system:group:federation:<идентификатор_федерации>:users(группа
All users in federation N)system:group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
Подробнее о ресурсах, которые вы можете создать с помощью Terraform, читайте в документации провайдера.
-
-
Создайте ресурсы:
-
В терминале перейдите в директорию с конфигурационным файлом.
-
Проверьте корректность конфигурации с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
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=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> 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:{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "<роль>", "subject": { "id": "<идентификатор_сервисного_аккаунта>", "type": "serviceAccount" } } }] }Где:
-
roleId— назначаемая роль. -
subject— субъект, которому назначается роль.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора в полях запроса
subject.typeиsubject.id. Возможные комбинации:subject.type
subject.id
userAccount<идентификатор_пользователя>serviceAccount<идентификатор_сервисного_аккаунта>federatedUser<идентификатор_пользователя>group<идентификатор_группы>systemallAuthenticatedUsers(группа
All authenticated users)allUsers(группа
All users)group:organization:<идентификатор_организации>:users(группа
All users in organization X)group:federation:<идентификатор_федерации>:users(группа
All users in federation N)group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
-
-
Назначьте роль сервисному аккаунту. Например, на каталог с идентификатором
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 <идентификатор_роли> \ --service-account-id <идентификатор_сервисного_аккаунта>Где:
<имя_или_идентификатор_организации>— техническое название или идентификатор организации.--role— идентификатор роли, напримерviewer.--service-account-id— идентификатор сервисного аккаунта, которому назначается роль.
Например, чтобы назначить сервисному аккаунту роль
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 \ --service-account-id aje6o61dvog2********
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать.
Пример структуры конфигурационного файла:
resource "yandex_organizationmanager_organization_iam_binding" "editor" { organization_id = "<идентификатор_организации>" role = "<роль>" members = ["serviceAccount:<идентификатор_сервисного_аккаунта>",] }Где:
organization_id— идентификатор организации. Обязательный параметр.role— назначаемая роль. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud. Для каждой роли можно использовать только один ресурсyandex_organizationmanager_organization_iam_binding. Обязательный параметр.members— обозначения субъектов, которым назначается роль. Обязательный параметр.
Подробнее о параметрах ресурса
yandex_organizationmanager_organization_iam_bindingчитайте в документации провайдера. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Назначьте роль.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого будут назначены права доступа к организации. Проверить назначение роли можно в консоли управления
или с помощью команды CLI:yc organization-manager organization list-access-bindings <имя_или_идентификатор_организации> -
Чтобы назначить сервисному аккаунту роль на организацию, воспользуйтесь методом REST API updateAccessBindings для ресурса Organization или вызовом gRPC API OrganizationService/UpdateAccessBindings:
-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте ID каталога с сервисными аккаунтами.
-
Получите IAM-токен для аутентификации в API Yandex Cloud.
-
Получите список сервисных аккаунтов в каталоге, чтобы узнать их идентификаторы:
export FOLDER_ID=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> 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=<IAM-токен> 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:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "<роль>", "subject": { "id": "<идентификатор_сервисного_аккаунта>", "type": "serviceAccount" } } }] }Где:
-
roleId— назначаемая роль. -
subject— субъект, которому назначается роль.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора в полях запроса
subject.typeиsubject.id. Возможные комбинации:subject.type
subject.id
userAccount<идентификатор_пользователя>serviceAccount<идентификатор_сервисного_аккаунта>federatedUser<идентификатор_пользователя>group<идентификатор_группы>systemallAuthenticatedUsers(группа
All authenticated users)allUsers(группа
All users)group:organization:<идентификатор_организации>:users(группа
All users in organization X)group:federation:<идентификатор_федерации>:users(группа
All users in federation N)group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
-
-
Назначьте роль сервисному аккаунту:
export ORGANIZATION_ID=<идентификатор_организации> export IAM_TOKEN=<IAM_токен> 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и последовательно введите сохраненные ранее идентификатор ключа и секретный ключ. Для значения региона используйтеkz1:aws configure AWS Access Key ID [None]: AKIAIOSFODNN******** AWS Secret Access Key [None]: wJalr********/*******/bPxRfiCYEX******** Default region name [None]: kz1 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": [ ] }