Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Resource Manager
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Облако
      • Создание облака
      • Переименование облака
      • Удаление облака
      • Отмена удаления облака
      • Настройка прав доступа
      • Получение идентификатора облака
      • Переключение на другое облако
      • Изменение организации для облака
      • Уведомления об инцидентах в облаке
    • Каталог
      • Создание каталога
      • Изменение каталога
      • Удаление каталога
      • Настройка прав доступа
      • Получение идентификатора каталога
      • Уведомления об инцидентах в каталоге
  • Концепции
    • Иерархия ресурсов Yandex Cloud
    • Оповещения от Yandex Cloud
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • CloudService
      • FolderService
      • OperationService
    • REST (англ.)
      • Overview
      • Cloud
        • Overview
        • create
        • get
        • list
        • listAccessBindings
        • listOperations
        • setAccessBindings
        • update
        • updateAccessBindings
      • Folder
        • Overview
        • create
        • delete
        • get
        • list
        • listAccessBindings
        • listOperations
        • setAccessBindings
        • update
        • updateAccessBindings
  • Вопросы и ответы
  1. Пошаговые инструкции
  2. Облако
  3. Настройка прав доступа

Настройка права доступа к облаку

Статья создана
Yandex Cloud
  • Назначить роль на облако
  • Примеры
    • Назначить несколько ролей
    • Доступ к облаку для сервисного аккаунта
    • Доступ к ресурсу всем пользователям

Чтобы предоставить пользователю доступ ко всем ресурсам в облаке, назначьте ему роль на это облако.

Назначить роль на облако

Консоль управления
CLI
API
Terraform
  1. Откройте страницу Пользователи и роли для выбранного облака. Если необходимо, переключитесь на другое облако.

    1. Выберите пользователя, которому хотите назначить роль.
    2. Нажмите значок .
    3. Выберите Настроить доступ.
  2. Нажмите значок в блоке Роли на облако <имя облака>.
  3. Выберите необходимую роль из списка.
  1. Посмотрите описание команды для назначения роли на облако:

    yc resource-manager cloud add-access-binding --help
    
  2. Получите список доступных облаков:

    yc resource-manager cloud list
    

    Результат:

    +----------------------+----------+
    |          ID          |   NAME   |
    +----------------------+----------+
    | b1gg8sgd16g7qca5onqs | my-cloud |
    +----------------------+----------+
    
  3. Получите список доступных ролей:

    yc iam role list
    

    Результат:

    +--------------------------------+-------------+
    |               ID               | DESCRIPTION |
    +--------------------------------+-------------+
    | admin                          |             |
    | compute.images.user            |             |
    | editor                         |             |
    | ...                            |             |
    +--------------------------------+-------------+
    
  4. Узнайте идентификатор пользователя по логину или адресу электронной почты. Чтобы назначить роль не пользователю, а сервисному аккаунту или системной группе используйте примеры ниже.

    yc iam user-account get test-user
    

    Результат:

    id: gfei8n54hmfhuk5nogse
    yandex_passport_user_account:
        login: test-user
        default_email: test-user@yandex.ru
    
  5. Назначьте пользователю test-user роль editor на облако my-cloud. В субъекте укажите тип userAccount и идентификатор пользователя:

    yc resource-manager cloud add-access-binding my-cloud \
      --role editor \
      --subject userAccount:<идентификатор пользователя>
    

Воспользуйтесь методом updateAccessBindings для ресурса Cloud. Вам понадобится идентификатор облака и идентификатор пользователя, которому назначается роль на облако.

  1. Узнайте идентификатор облака с помощью метода list:

    curl -H "Authorization: Bearer <IAM-TOKEN>" \
        https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds
    

    Результат:

    {
     "clouds": [
      {
       "id": "b1gg8sgd16g7qca5onqs",
       "createdAt": "2018-09-23T12:14:45Z",
       "name": "cloud-b1gg8sgd16g7qc"
      }
     ]
    }
    
  2. Узнайте идентификатор пользователя по логину с помощью метода getByLogin:

    curl -H "Authorization: Bearer <IAM-TOKEN>" \
        https://iam.api.cloud.yandex.net/iam/v1/yandexPassportUserAccounts:byLogin?login=test-user
    

    Результат:

    {
     "id": "gfei8n54hmfhuk5nogse",
     "yandexPassportUserAccount": {
      "login": "test-user",
      "defaultEmail": "test-user@yandex.ru"
     }
    }
    
  3. Назначьте пользователю роль editor на облако my-cloud. В свойстве action укажите ADD, а в свойстве subject - тип userAccount и идентификатор пользователя:

    curl -X POST \
        -H 'Content-Type: application/json' \
        -H "Authorization: Bearer <IAM-TOKEN>" \
        -d '{
        "accessBindingDeltas": [{
            "action": "ADD",
            "accessBinding": {
                "roleId": "editor",
                "subject": {
                    "id": "<идентификатор пользователя>",
                    "type": "userAccount"
        }}}]}' \
        https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7qca5onqs:updateAccessBindings
    

Если у вас ещё нет Terraform, установите его и настройте провайдер Yandex Cloud.

  1. Опишите в конфигурационном файле параметры прав доступа к облаку:

    • cloud_id — идентификатор облака. Получить список доступных облаков можно с помощью команды CLI: yc resource-manager cloud list.
    • role — роль, которую нужно назначить. Перечень ролей можно получить с помощью команды CLI: yc iam role list. В одном ресурсе yandex_resourcemanager_cloud_iam_binding можно назначить только одну роль.
    • блок members — список пользователей, которым нужно назначить роль. Каждая запись может иметь одно из следующих значений:
      • userAccount:<идентификатор пользователя> — идентификатор пользователя.
      • serviceAccount:<идентификатор сервисного аккаунта> — идентификатор сервисного аккаунта.
      • federatedUser:<идентификатор федеративного аккаунта> — идентификатор федеративного аккаунта.
    data "yandex_resourcemanager_cloud" "project1" {
      name = "Project 1"
    }
    
    resource "yandex_resourcemanager_cloud_iam_binding" "editor" {
      cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}"
      role = "editor"
      members = [
        "userAccount:<идентификатор пользователя>",
      ]
    }
    
  Более подробную информацию о параметрах ресурса `yandex_resourcemanager_cloud_iam_binding` в Terraform, см. в [документации провайдера](https://registry.tfpla.net/providers/yandex-cloud/yandex/latest/docs/resources/resourcemanager_cloud_iam_binding).
  1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

  2. Проверьте корректность конфигурационного файла с помощью команды:

    terraform validate
    

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  3. Выполните команду:

    terraform plan
    

    В терминале будет выведен список создаваемых ресурсов и их параметров. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  4. Примените изменения конфигурации:

    terraform apply
    
  5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    После этого будут назначены права доступа к облаку.

Примеры

  • Назначить несколько ролей
  • Доступ к облаку для сервисного аккаунта
  • Доступ к ресурсу всем пользователям

Назначить несколько ролей

CLI
API
Terraform

Команда add-access-binding позволяет добавить только одну роль. Вы можете назначить несколько ролей с помощью команды set-access-binding.

Внимание

Команда set-access-binding полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.

  1. Убедитесь, что на ресурс не назначено ролей, которые вы не хотите потерять:

    yc resource-manager cloud list-access-binding my-cloud
    
  2. Например, назначьте роль нескольким пользователям:

    yc resource-manager cloud set-access-bindings my-cloud \
      --access-binding role=editor,subject=userAccount:<идентификатор первого пользователя>
      --access-binding role=viewer,subject=userAccount:<идентификатор второго пользователя>
    
    yc resource-manager cloud set-access-bindings my-cloud \
      --access-binding role=editor,subject=federatedUser:<идентификатор первого пользователя>
      --access-binding role=viewer,subject=federatedUser:<идентификатор второго пользователя>
    

Назначьте одному пользователю роль editor, а другому viewer:

curl -X POST \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer <IAM-TOKEN>" \
    -d '{
    "accessBindingDeltas": [{
        "action": "ADD",
        "accessBinding": {
            "roleId": "editor",
            "subject": {
                "id": "<идентификатор первого пользователя>",
                "type": "userAccount"
            }
        }
    },{
        "action": "ADD",
        "accessBinding": {
            "roleId": "viewer",
            "subject": {
                "id": "<идентификатор второго пользователя>",
                "type": "userAccount"
    }}}]}' \
    https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7qca5onqs:updateAccessBindings

Вы также можете назначать роли с помощью метода setAccessBindings.

Внимание

Метод setAccessBindings полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.

curl -X POST \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer <IAM-TOKEN>" \
    -d '{
    "accessBindings": [{
        "roleId": "editor",
        "subject": { "id": "<идентификатор первого пользователя>", "type": "userAccount" }
    },{
        "roleId": "viewer",
        "subject": { "id": "<идентификатор второго пользователя>", "type": "userAccount" }
    }]}' \
    https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7qca5onqs:setAccessBindings
  1. Опишите в конфигурационном файле параметры прав доступа к облаку. Назначьте одному пользователю роль editor, а другому viewer:

    data "yandex_resourcemanager_cloud" "project1" {
      name = "Project 1"
    }
    
    resource "yandex_resourcemanager_cloud_iam_binding" "editor" {
      cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}"
      role = "editor"
      members = [
        "userAccount:<идентификатор первого пользователя>",
      ]
    }
    
    resource "yandex_resourcemanager_cloud_iam_binding" "viewer" {
      cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}"
      role = "viewer"
      members = [
        "userAccount:<идентификатор второго пользователя>",
      ]
    }
    
  2. В командной строке перейдите в папку, где вы создали конфигурационный файл.

  3. Проверьте корректность конфигурационного файла с помощью команды:

    terraform validate
    

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  4. Выполните команду:

    terraform plan
    

    В терминале будет выведен список создаваемых ресурсов и их параметров. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  5. Примените изменения конфигурации:

    terraform apply
    
  6. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    После этого будут назначены права доступа к облаку.

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

Сервисному аккаунту можно назначать роли только на облако, которому он принадлежит.

Разрешите сервисному аккаунту test-sa управлять облаком my-cloud и ресурсами в нем:

CLI
API
Terraform
  1. Узнайте идентификатор сервисного аккаунта test-sa, которому вы хотите назначить роль. Чтобы узнать идентификатор, получите список доступных сервисных аккаунтов:

    yc iam service-account list
    

    Результат:

    +----------------------+----------+------------------+
    |          ID          |   NAME   |   DESCRIPTION    |
    +----------------------+----------+------------------+
    | ajebqtreob2dpblin8pe | test-sa  | test-description |
    +----------------------+----------+------------------+
    
  2. Назначьте роль editor сервисному аккаунту test-sa, указав его идентификатор. В типе субъекта укажите serviceAccount:

    yc resource-manager cloud add-access-binding my-cloud \
      --role editor \
      --subject serviceAccount:<идентификатор сервисного аккаунта>
    
  1. Узнайте идентификатор сервисного аккаунта test-sa, которому вы хотите назначить роль. Чтобы узнать идентификатор, получите список доступных сервисных аккаунтов:

    curl -H "Authorization: Bearer <IAM-TOKEN>" \
        https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=b1gvmob95yysaplct532
    

    Результат:

    {
     "serviceAccounts": [
      {
       "id": "ajebqtreob2dpblin8pe",
       "folderId": "b1gvmob95yysaplct532",
       "createdAt": "2018-10-18T13:42:40Z",
       "name": "test-sa",
       "description": "test-description"
      }
     ]
    }
    
  2. Назначьте сервисному аккаунту test-sa роль editor на облако my-cloud. В свойстве subject укажите тип serviceAccount и идентификатор test-sa. В URL запроса в качестве ресурса укажите идентификатор my-cloud:

curl -X POST \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer <IAM-TOKEN>" \
    -d '{
    "accessBindingDeltas": [{
        "action": "ADD",
        "accessBinding": {
            "roleId": "editor",
            "subject": {
                "id": "<идентификатор сервисного аккаунта>",
                "type": "serviceAccount"
    }}}]}' \
    https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7qca5onqs:updateAccessBindings
  1. Назначьте роль editor сервисному аккаунту:

    data "yandex_resourcemanager_cloud" "project1" {
      name = "Project 1"
    }
    
    resource "yandex_resourcemanager_cloud_iam_binding" "editor" {
      cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}"
      role = "editor"
      members = [
        "serviceAccount:<идентификатор сервисного аккаунта>",
      ]
    }
    
  2. В командной строке перейдите в папку, где вы создали конфигурационный файл.

  3. Проверьте корректность конфигурационного файла с помощью команды:

    terraform validate
    

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  4. Выполните команду:

    terraform plan
    

    В терминале будет выведен список создаваемых ресурсов и их параметров. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  5. Примените изменения конфигурации:

    terraform apply
    
  6. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    После этого будут назначены права доступа к облаку.

Доступ к ресурсу всем пользователям

Вы можете предоставить публичный доступ к ресурсу. Для этого назначьте роль системной группе allAuthenticatedUsers или allUsers.

Системной группе можно назначить любые роли, кроме resource-manager.clouds.owner и resource-manager.clouds.member.

Внимание

Не назначайте системной группе роли editor и admin на каталог или облако. Это позволит любому, кто узнает идентификатор каталога, пользоваться ресурсами Yandex Cloud за ваш счет.

Например, разрешите любому прошедшему аутентификацию пользователю просматривать информацию об облаке my-cloud и ресурсах в нем:

CLI
API
Terraform

Назначьте роль viewer системной группе allAuthenticatedUsers. В типе субъекта укажите system:

yc resource-manager cloud add-access-binding my-cloud \
  --role viewer \
  --subject system:allAuthenticatedUsers

Назначьте роль viewer системной группе allAuthenticatedUsers. В свойстве subject укажите тип system:

curl -X POST \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer <IAM-TOKEN>" \
    -d '{
    "accessBindingDeltas": [{
        "action": "ADD",
        "accessBinding": {
            "roleId": "viewer",
            "subject": {
                "id": "allAuthenticatedUsers",
                "type": "system"
    }}}]}' \
    https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7qca5onqs:updateAccessBindings
  1. Назначьте роль viewer системной группе allAuthenticatedUsers:

    data "yandex_resourcemanager_cloud" "project1" {
      name = "Project 1"
    }
    
    resource "yandex_resourcemanager_cloud_iam_binding" "viewer" {
      cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}"
      role = "viewer"
      members = [
        "system:allAuthenticatedUsers",
      ]
    }
    
  2. В командной строке перейдите в папку, где вы создали конфигурационный файл.

  3. Проверьте корректность конфигурационного файла с помощью команды:

    terraform validate
    

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  4. Выполните команду:

    terraform plan
    

    В терминале будет выведен список создаваемых ресурсов и их параметров. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  5. Примените изменения конфигурации:

    terraform apply
    
  6. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    После этого будут назначены права доступа к облаку.

Что дальше

  • Создание каталога
  • Настройка прав доступа к каталогу
  • Иерархия ресурсов Yandex Cloud

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Назначить роль на облако
  • Примеры
  • Назначить несколько ролей
  • Доступ к облаку для сервисного аккаунта
  • Доступ к ресурсу всем пользователям