Управление ролями

API каталога позволяет использовать управление доступом на основе ролей (RBAC) для управления доступом к функциям в вашем домене Google Workspace. Вы можете создавать пользовательские роли с привилегиями , которые будут ограничивать доступ администратора более точно, чем стандартные роли Google Workspace. Вы можете назначать роли пользователям или группам безопасности . В этом руководстве объясняется, как выполнять некоторые базовые задачи, связанные с ролями.

Ниже приведен список общих терминов, используемых Directory API в отношении RBAC в Google Workspace:

Привилегия
Разрешение, необходимое для выполнения задачи или операции в домене Google Workspace. Представлено ресурсом Privilege . С этим ресурсом не связаны постоянные данные.
Роль
Набор привилегий, предоставляющий сущностям с этой ролью возможность выполнять определённые задачи или операции. Представлен ресурсом Role .
Назначение ролей
Запись о конкретной роли, назначенной пользователю или группе. Представлена ​​ресурсом RoleAssignment .
Группа безопасности
Тип группы Cloud Identity , используемый для управления доступом к ресурсам организации. Группы безопасности могут включать как отдельных пользователей, так и группы.

Роли и ограничения на назначение ролей

Вы можете создать ограниченное количество пользовательских ролей или назначений ролей, поэтому, если вы приближаетесь к лимиту, объедините или удалите их, чтобы не превышать его. Роли и назначения ролей имеют следующие ограничения:

  • Вы можете создать до 750 пользовательских ролей для всей вашей организации.
  • Вы можете создать до 1000 назначений ролей для каждого организационного подразделения (OU), где корневая организация считается подразделением. Например, вы можете назначить 600 ролей в корневой организации и 700 ролей в другом определенном вами OU, например, в отделе компании. Все встроенные роли администраторов Google Workspace по умолчанию действуют в масштабах всей организации. Узнайте больше об ограничениях на привилегии , которые можно назначать на уровне OU.

Роли и назначение ролей имеют следующие ограничения для групп:

  • Вы можете назначить любую роль, кроме Супер-администратора.
  • Всего в организационном подразделении и в каждом организационном подразделении можно назначить до 250 ролей группам.
  • Группа должна быть группой безопасности в вашей организации.
  • Мы рекомендуем ограничить членство в группе только пользователями из вашей организации. Вы можете добавлять пользователей из-за пределов вашей организации, но они могут не получить привилегий этой роли. Подробнее см. в разделе «Ограничение членства в группе» . ### Назначение ролей группам

Если вам нужно назначить более 1000 ролей в организационном подразделении, вы можете добавить нескольких участников в группу безопасности и назначить ей роль. Назначение групповых ролей имеет некоторые дополнительные ограничения — подробную информацию см. в справочном центре администратора .

Сопоставление ролей и привилегий в консоли администратора Google

Чтобы назначить роли пользователям, получающим доступ к своим привилегиям через консоль администратора, может потребоваться предоставление некоторых дополнительных привилегий. Например, чтобы предоставить пользователю возможность создавать других пользователей через консоль администратора, требуется не только привилегия USERS_CREATE , но также привилегии USERS_UPDATE и ORGANIZATION_UNITS_RETRIEVE . В следующей таблице представлены функциональные возможности консоли администратора и необходимые привилегии для управления пользователями и организационными подразделениями.

Функциональность консоли администратора Необходимые привилегии
Организационные подразделения - Читать ORGANIZATION_UNITS_RETRIEVE
Организационные подразделения - Создать ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_CREATE
Организационные подразделения - Обновление ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_UPDATE
Организационные подразделения - Удалить ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_DELETE
Организационные подразделения ORGANIZATION_UNITS_ALL
Пользователи - Читать USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
Пользователи - Создать USERS_CREATE + USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE
Пользователи - Обновление USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE
Пользователи - Перемещение пользователей USERS_MOVE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
Пользователи - Переименование пользователей USERS_ALIAS + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
Пользователи - Сброс пароля USERS_RESET_PASSWORD + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
Пользователи — принудительная смена пароля USERS_FORCE_PASSWORD_CHANGE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
Пользователи — добавление/удаление псевдонимов USERS_ADD_NICKNAME + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
Пользователи - Приостановить действия пользователей USERS_SUSPEND + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
ГРУППЫ GROUPS_ALL
Безопасность — управление безопасностью пользователей USER_SECURITY_ALL + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE

Примеры использования

Прежде чем начать

Перед запуском примеров из этого руководства настройте аутентификацию и авторизацию .

  1. Настройте экран согласия OAuth .

  2. Создать учетные данные доступа .

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

Чтобы получить постраничный список поддерживаемых привилегий в вашем домене, используйте метод privileges.list() .

  • Если вы являетесь администратором и получаете привилегии в своем домене, используйте my_customer в качестве идентификатора клиента.

  • Если вы являетесь реселлером, получающим привилегии для одного из своих клиентов, используйте идентификатор клиента, возвращаемый операцией «Извлечь пользователя» .

Запрос

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles/ALL/privileges

Ответ

Успешный ответ возвращает код статуса HTTP 200. Вместе с кодом статуса ответ возвращает привилегии, поддерживаемые в домене:

{
  "kind": "admin\#directory\#privileges",
  "etag": ...,
  "items": [
    {
      "kind": "admin\#directory\#privilege",
      "etag": ...,
      "serviceId": "02afmg282jiquyg",
      "privilegeName": "APP_ADMIN",
      "isOuScopable": false
    },
    {
      "kind": "admin\#directory\#privilege",
      "etag": ...,
      "serviceId": "04f1mdlm0ki64aw",
      "privilegeName": "MANAGE_USER_SETTINGS",
      "isOuScopable": true,
      "childPrivileges": [
        {
          "kind": "admin\#directory\#privilege",
          "etag": ...,
          "serviceId": "04f1mdlm0ki64aw",
          "privilegeName": "MANAGE_APPLICATION_SETTINGS",
          "isOuScopable": true
        }
      ]
    },
    ...
  ]
}

Получить существующие роли

Чтобы получить список существующих ролей, используйте следующий запрос GET и включите авторизацию, описанную в разделе Запросы на авторизацию .

  • Если вы являетесь администратором и получаете роли в своем домене, используйте my_customer в качестве идентификатора клиента.

  • Если вы являетесь реселлером, получающим роли для клиента, используйте идентификатор клиента, полученный с помощью операции «Извлечь пользователя» .

Запрос

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles

Ответ

Успешный ответ возвращает код статуса HTTP 200 Вместе с кодом статуса ответ возвращает роли, существующие в домене:

{
  "kind": "admin\#directory\#roles",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/DywA6_jaJCYw-f0lFs2-g17UWe8\"",
  "items": [
    {
      "kind": "admin\#directory\#role",
      "etag": ... ,
      "roleId": "3894208461012993",
      "roleName": "_SEED_ADMIN_ROLE",
      "roleDescription": "Google Workspace Administrator Seed Role",
      "rolePrivileges": [
        {
          "privilegeName": "SUPER_ADMIN",
          "serviceId": "01ci93xb3tmzyin"
        },
        {
          "privilegeName": "ROOT_APP_ADMIN",
          "serviceId": "00haapch16h1ysv"
        },
        {
          "privilegeName": "ADMIN_APIS_ALL",
          "serviceId": "00haapch16h1ysv"
        },
        ...
      ],
      "isSystemRole": true,
      "isSuperAdminRole": true
    },
    {
      "kind": "admin\#directory\#role",
      "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/bTXiZXfuK1NGr_f4paosCWXuHmw\"",
      "roleId": "3894208461012994",
      "roleName": "_GROUPS_ADMIN_ROLE",
      "roleDescription": "Groups Administrator",
      "rolePrivileges": [
        {
          "privilegeName": "CHANGE_USER_GROUP_MEMBERSHIP",
          "serviceId": "01ci93xb3tmzyin"
        },
        {
          "privilegeName": "USERS_RETRIEVE",
          "serviceId": "00haapch16h1ysv"
        },
        {
          "privilegeName": "GROUPS_ALL",
          "serviceId": "00haapch16h1ysv"
        },
        {
          "privilegeName": "ADMIN_DASHBOARD",
          "serviceId": "01ci93xb3tmzyin"
        },
        {
          "privilegeName": "ORGANIZATION_UNITS_RETRIEVE",
          "serviceId": "00haapch16h1ysv"
        }
      ],
      "isSystemRole": true
    },
    ...
  ]
}

Список всех назначений ролей

Чтобы получить постраничный список всех прямых назначений ролей, используйте метод roleAssignments.list() . API может возвращать пустые результаты с токеном страницы, если задан параметр userKey . Продолжайте постраничный просмотр до тех пор, пока не будет возвращён ни один токен страницы.

  • Если вы являетесь администратором и получаете назначения ролей в своем домене, используйте my_customer в качестве идентификатора клиента.

  • Если вы являетесь реселлером, получающим назначения ролей для одного из своих клиентов, используйте идентификатор клиента, возвращаемый операцией получения пользователя .

Запрос

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments

Ответ

Успешный ответ возвращает код статуса HTTP 200 Вместе с кодом статуса ответ возвращает все роли, назначенные в домене:

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId:"3894208461013211",
  "assignedTo:"100662996240850794412",
  "assigneeType:"user",
  "scopeType:"CUSTOMER",
}

Перечислите все косвенные назначения ролей

Чтобы получить постраничный список всех назначений ролей, включая те, которые косвенно назначены пользователю из-за групп, к которым он принадлежит, используйте метод roleAssignments.list() .

API может возвращать пустые результаты с токеном страницы. Продолжайте пагинацию до тех пор, пока не будет возвращён токен страницы.

  • Если вы являетесь администратором и получаете назначения ролей в своем домене, используйте my_customer в качестве идентификатора клиента.

  • Если вы являетесь реселлером, получающим назначения ролей для одного из своих клиентов, используйте идентификатор клиента, возвращаемый операцией получения пользователя .

  • Замените USER_KEY значением, идентифицирующим пользователя в запросе API. Подробнее см. в users.get .

Запрос

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments?userKey=USER_KEY&includeIndirectRoleAssignments=true

Ответ

Успешный ответ возвращает код статуса HTTP 200 Вместе с кодом статуса ответ возвращает все роли, назначенные в домене, а также тип assigneeType : user или group :

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId:"3894208461013211",
  "assignedTo:"100662996240850794412",
  "assigneeType:"group",
  "scopeType:"CUSTOMER",
}

Создать роль

Чтобы создать новую роль, используйте следующий запрос POST и включите авторизацию, описанную в разделе «Авторизация запросов» . Добавьте privilegeName и serviceId для каждой привилегии, которая должна быть предоставлена ​​с этой ролью. Свойства запроса и ответа см. в справочнике API .

Запрос

POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles

{
  "roleName": "My New Role",
  "rolePrivileges": [
    {
      "privilegeName": "USERS_ALL",
      "serviceId": "00haapch16h1ysv"
    },
    {
      "privilegeName": "GROUPS_ALL",
      "serviceId": "00haapch16h1ysv"
    }
  ]
}

Ответ

Успешный ответ возвращает код статуса HTTP 200 Вместе с кодом статуса ответ возвращает свойства новой роли:

{
  "kind": "admin\#directory\#role",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/uX9tXw0qyijC9nUKgCs08wo8aEM\"",
  "roleId": "3894208461013031",
  "roleName": "My New Role",
  "rolePrivileges": [
    {
      "privilegeName": "GROUPS_ALL",
      "serviceId": "00haapch16h1ysv"
    },
    {
      "privilegeName": "USERS_ALL",
      "serviceId": "00haapch16h1ysv"
    }
  ]
}

Создать назначение роли

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

  • Чтобы назначить роль пользователю, добавьте тело JSON с user_id пользователя, который можно получить из users.get() , roleId (как описано в разделе Получение существующих ролей ) и scope_type .

  • Чтобы назначить роль учетной записи службы, добавьте тело JSON с unique_id учетной записи службы (как определено в Identity and Access Management (IAM) ), roleId (как описано в Get exist roles ) и scope_type .

  • Чтобы назначить роль группе, добавьте тело JSON с group_id группы, который можно получить из groups.get() , roleId (как описано в разделе Получение существующих ролей ) и scope_type .

Запрос

POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments

{
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER"
}

Ответ

Успешный ответ возвращает код статуса HTTP 200 Вместе с кодом статуса ответ возвращает свойства для нового назначения роли:

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId": "3894208461013211",
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER"
}

Создайте назначение роли с условиями

Вы можете назначать роли для выполнения действий, соответствующих определённым условиям. В настоящее время поддерживаются только два условия:

  • Применимо только к группам безопасности
  • Не применимо к группам безопасности

Если задано condition , оно вступит в силу только при соблюдении этого условия. Если condition пустое, роль ( roleId ) применяется к субъекту ( assignedTo ) в области действия ( scopeType ) без каких-либо условий.

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

Добавьте JSON-код с user_id пользователя (user_id), который можно получить с помощью метода users.get() , roleId , как описано в разделе Получение существующих ролей , и condition ). Обе строки условия необходимо использовать дословно, как показано ниже. Они работают только с предварительно созданными ролями администратора «Редактор групп» и «Читатель групп». Эти условия соответствуют синтаксису условий Cloud IAM .

Запрос

Применимо только к группам безопасности
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments

{
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER",
  "condition": "api.getAttribute('cloudidentity.googleapis.com/groups.labels',
    []).hasAny(['groups.security']) && resource.type ==
    'cloudidentity.googleapis.com/Group'"
}
Не применимо к группам безопасности
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments

{
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER",
  "condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels',
    []).hasAny(['groups.security']) && resource.type ==
    'cloudidentity.googleapis.com/Group'"
}

Ответ

Успешный ответ возвращает код статуса HTTP 200 Вместе с кодом статуса ответ возвращает свойства для нового назначения роли:

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId": "3894208461013211",
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER",
  "condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels',
    []).hasAny(['groups.security']) && resource.type ==
    'cloudidentity.googleapis.com/Group'"
}