Interfejs Directory API umożliwia zarządzanie dostępem do funkcji w domenie Google Workspace za pomocą kontroli dostępu opartej na rolach (RBAC). Możesz tworzyć niestandardowe role z uprawnieniami, aby ograniczyć dostęp administratora w bardziej precyzyjny sposób niż w przypadku wstępnie utworzonych ról dostępnych w Google Workspace. Role możesz przypisywać użytkownikom lub grupom zabezpieczeń. Z tego przewodnika dowiesz się, jak wykonywać niektóre podstawowe zadania związane z rolami.
Poniżej znajdziesz listę typowych terminów używanych przez interfejs Directory API w odniesieniu do RBAC w Google Workspace:
- Uprawnienie
- Uprawnienie niezbędne do wykonania zadania lub operacji w domenie Google Workspace. Jest on reprezentowany przez zasób
Privilege
. Z tym zasobem nie są powiązane żadne dane trwałe. - Role
- Zbiór uprawnień, które umożliwiają podmiotom z tą rolą wykonywanie określonych zadań lub operacji. Reprezentowany przez zasób
Role
. - Przypisanie roli
- Zapis dotyczący konkretnej roli przypisanej użytkownikowi lub grupie. Reprezentowane przez zasób
RoleAssignment
.
- Grupa zabezpieczeń
- Typ grupy Cloud Identity używany do kontrolowania dostępu do zasobów organizacji. Grupy zabezpieczeń mogą zawierać zarówno poszczególnych użytkowników, jak i grupy.
Limity ról i przypisywania ról
Możesz utworzyć tylko ograniczoną liczbę ról niestandardowych lub przypisań ról, więc jeśli zbliżasz się do limitu, skonsoliduj lub usuń je, aby nie przekroczyć limitu. Role i przypisania ról mają te limity:
- Możesz utworzyć do 750 ról niestandardowych dla całej organizacji.
- Możesz utworzyć maksymalnie 1000 przydziałów ról na jednostkę organizacyjną, przy czym organizacja główna jest traktowana jako jednostka. Możesz na przykład przypisać 600 ról w organizacji głównej i 700 ról w innej jednostce organizacyjnej, którą zdefiniujesz, np. w dziale firmy. Wszystkie gotowe role administratora Google Workspace mają domyślnie zakres obejmujący całą organizację. Dowiedz się więcej o limitach uprawnień, które można przypisać na poziomie jednostki organizacyjnej.
W przypadku grup obowiązują te limity dotyczące ról i przypisywania ról:
- Możesz przypisać dowolną rolę oprócz roli superadministratora.
- Możesz utworzyć maksymalnie 250 przypisań ról do grup (sumując przypisania na poziomie całej jednostki organizacyjnej i w poszczególnych jednostkach organizacyjnych).
- Grupa musi być grupą zabezpieczeń w Twojej organizacji.
- Zalecamy ograniczenie członkostwa w grupach do użytkowników w Twojej organizacji. Możesz dodawać użytkowników spoza organizacji, ale mogą oni nie dostać uprawnień. Więcej informacji znajdziesz w artykule Ograniczanie członkostwa w grupie. ### Przypisywanie ról do grup
Jeśli chcesz przypisać więcej niż 1000 ról w jednostce organizacyjnej, możesz dodać do grupy zabezpieczeń wielu użytkowników i przypisać rolę całej tej grupie. Przypisania ról w grupie mają pewne dodatkowe ograniczenia. Szczegółowe informacje znajdziesz w centrum pomocy dla administratorów.
Mapowanie ról na uprawnienia w konsoli administracyjnej Google
Aby przypisać role użytkownikom, którzy uzyskują dostęp do swoich uprawnień za pomocą konsoli administracyjnej, może być konieczne przyznanie im dodatkowych uprawnień. Na przykład, aby przyznać użytkownikowi możliwość tworzenia innych użytkowników w konsoli administracyjnej, wymagane są nie tylko uprawnienia USERS_CREATE
, ale też uprawnienia USERS_UPDATE
i ORGANIZATION_UNITS_RETRIEVE
. W tabeli poniżej znajdziesz funkcje konsoli administracyjnej i odpowiadające im uprawnienia wymagane do zarządzania użytkownikami i jednostkami organizacyjnymi.
Funkcje konsoli administracyjnej | Wymagane uprawnienia |
---|---|
Jednostki organizacyjne – odczyt | ORGANIZATION_UNITS_RETRIEVE |
Jednostki organizacyjne – tworzenie | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_CREATE |
Jednostki organizacyjne – aktualizacja | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_UPDATE |
Jednostki organizacyjne – usuwanie | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_DELETE |
Jednostki organizacyjne | ORGANIZATION_UNITS_ALL |
Użytkownicy – odczyt | USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – tworzenie | USERS_CREATE + USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – aktualizacja | USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – przenoszenie użytkowników | USERS_MOVE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – zmiana nazw użytkowników | USERS_ALIAS + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – resetowanie hasła | USERS_RESET_PASSWORD + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – wymuszanie zmiany hasła | USERS_FORCE_PASSWORD_CHANGE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – dodawanie i usuwanie aliasów | USERS_ADD_NICKNAME + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Użytkownicy – zawieszanie kont użytkowników | USERS_SUSPEND + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
GRUPY | GROUPS_ALL |
Bezpieczeństwo – zarządzanie zabezpieczeniami użytkowników | USER_SECURITY_ALL + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Przykłady zastosowań
Zanim zaczniesz
Zanim uruchomisz przykłady z tego przewodnika, skonfiguruj uwierzytelnianie i autoryzację.
Pobieranie listy uprawnień domeny
Aby uzyskać podzieloną na strony listę obsługiwanych uprawnień w domenie, użyj metody
privileges.list()
.
Jeśli jesteś administratorem, który uzyskuje uprawnienia w swojej domenie, jako identyfikator klienta użyj
my_customer
.Jeśli jesteś sprzedawcą, który uzyskuje uprawnienia dla jednego z klientów, użyj identyfikatora klienta zwróconego przez operację Pobierz użytkownika.
Żądanie
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles/ALL/privileges
Odpowiedź
Prawidłowa odpowiedź zwraca kod stanu HTTP 200. Oprócz kodu stanu odpowiedź zawiera też uprawnienia obsługiwane w domenie:
{
"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
}
]
},
...
]
}
Pobieranie dotychczasowych ról
Aby uzyskać listę istniejących ról, użyj poniższego żądania GET
i dołącz autoryzację opisaną w sekcji Autoryzowanie żądań.
Jeśli jesteś administratorem, który uzyskuje role we własnej domenie, użyj identyfikatora klienta
my_customer
.Jeśli jesteś sprzedawcą, który uzyskuje role dla klienta, użyj identyfikatora klienta otrzymanego za pomocą operacji Pobierz użytkownika.
Żądanie
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles
Odpowiedź
Pomyślna odpowiedź zwraca kod stanu HTTP 200
. Oprócz kodu stanu odpowiedź zawiera też role, które istnieją w domenie:
{
"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
},
...
]
}
Wyświetlanie listy wszystkich przypisań ról
Aby uzyskać podzieloną na strony listę wszystkich bezpośrednich przypisań ról, użyj metody
roleAssignments.list()
. Interfejs API może zwracać puste wyniki z tokenem strony, gdy ustawiony jest parametr userKey
. Kontynuuj podział na strony, dopóki nie zostanie zwrócony żaden token strony.
Jeśli jesteś administratorem, który pobiera przypisania ról we własnej domenie, jako identyfikator klienta użyj wartości
my_customer
.Jeśli jesteś sprzedawcą, który uzyskuje przypisania ról dla jednego z klientów, użyj identyfikatora klienta zwróconego przez operację Pobierz użytkownika.
Żądanie
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments
Odpowiedź
Pomyślna odpowiedź zwraca kod stanu HTTP 200
. Oprócz kodu stanu odpowiedź zawiera wszystkie role przypisane w domenie:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId:"3894208461013211",
"assignedTo:"100662996240850794412",
"assigneeType:"user",
"scopeType:"CUSTOMER",
}
Wyświetlanie listy wszystkich pośrednich przypisań ról
Aby uzyskać podzieloną na strony listę wszystkich przypisań ról, w tym tych przypisanych użytkownikowi pośrednio ze względu na grupy, do których należy, użyj metody roleAssignments.list()
.
Interfejs API może zwrócić puste wyniki z tokenem strony. Podział na strony należy kontynuować, dopóki nie zostanie zwrócony token strony.
Jeśli jesteś administratorem, który pobiera przypisania ról we własnej domenie, jako identyfikator klienta użyj wartości
my_customer
.Jeśli jesteś sprzedawcą, który uzyskuje przypisania ról dla jednego z klientów, użyj identyfikatora klienta zwróconego przez operację Pobierz użytkownika.
Zastąp
USER_KEY
wartością, która identyfikuje użytkownika w żądaniu interfejsu API. Więcej informacji znajdziesz w sekcjiusers.get
.
Żądanie
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments?userKey=USER_KEY&includeIndirectRoleAssignments=true
Odpowiedź
Pomyślna odpowiedź zwraca kod stanu HTTP 200
. Oprócz kodu stanu odpowiedź zawiera wszystkie role przypisane w domenie oraz informację, czy assigneeType
jest user
czy group
:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId:"3894208461013211",
"assignedTo:"100662996240850794412",
"assigneeType:"group",
"scopeType:"CUSTOMER",
}
Utwórz rolę
Aby utworzyć nową rolę, użyj tego żądania POST
i dołącz autoryzację opisaną w sekcji Autoryzowanie żądań.
Dodaj privilegeName
i serviceId
do każdego uprawnienia, które powinno być przyznane w ramach tej roli. Informacje o właściwościach żądań i odpowiedzi znajdziesz w dokumentacji API.
Żądanie
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" } ] }
Odpowiedź
Pomyślna odpowiedź zwraca kod stanu HTTP 200
. Oprócz kodu stanu odpowiedź zawiera też właściwości nowej roli:
{
"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"
}
]
}
Tworzenie przypisania roli
Aby przypisać rolę, użyj poniższej metody POST
i dołącz autoryzację opisaną w sekcji Autoryzowanie żądań.
Aby przypisać rolę użytkownikowi, dodaj treść JSON z
user_id
użytkownika, którą możesz uzyskać zusers.get()
,roleId
(jak opisano w pobieraniu istniejących ról) iscope_type
.Aby przypisać rolę do konta usługi, dodaj treść JSON z
unique_id
konta usługi (zgodnie z definicją w Identity and Access Management (IAM)),roleId
(zgodnie z opisem w Get existing roles) iscope_type
.Aby przypisać rolę do grupy, dodaj treść JSON z
group_id
grupy, którą możesz uzyskać zgroups.get()
,roleId
(jak opisano w artykule Pobieranie istniejących ról) iscope_type
.
Żądanie
POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments { "roleId": "3894208461012995", "assignedTo": "100662996240850794412", "scopeType": "CUSTOMER" }
Odpowiedź
Pomyślna odpowiedź zwraca kod stanu HTTP 200
. Oprócz kodu stanu odpowiedź zawiera też właściwości nowego przypisania roli:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId": "3894208461013211",
"roleId": "3894208461012995",
"assignedTo": "100662996240850794412",
"scopeType": "CUSTOMER"
}
Tworzenie przypisania roli z warunkami
Możesz przyznawać role, które pozwalają wykonywać działania spełniające określone warunki. Obecnie obsługiwane są tylko 2 warunki:
- Dotyczy tylko grup zabezpieczeń
- Nie dotyczy grup zabezpieczeń
Gdy zasada condition
jest ustawiona, będzie obowiązywać tylko wtedy, gdy zasób, do którego uzyskuje się dostęp, spełnia warunek. Jeśli pole condition
jest puste, rola (roleId
) jest bezwarunkowo przypisywana do podmiotu (assignedTo
) w zakresie (scopeType
).
Aby przypisać rolę użytkownikowi, użyj tej metody POST i dołącz autoryzację opisaną w sekcji Autoryzowanie żądań.
Dodaj treść JSON z user_id
użytkownika, którą możesz uzyskać z users.get(), roleId
zgodnie z opisem w artykule Pobieranie istniejących ról i condition
. Te 2 ciągi warunków muszą być używane dosłownie, jak pokazano poniżej. Działają one tylko w przypadku gotowych ról administratora Edytujący grupy i Czytający grupy.
Warunki te są zgodne ze składnią warunków Cloud IAM.
Żądanie
Dotyczy tylko grup zabezpieczeń
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'" }
Nie dotyczy grup zabezpieczeń
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'" }
Odpowiedź
Pomyślna odpowiedź zwraca kod stanu HTTP 200
. Oprócz kodu stanu odpowiedź zawiera też właściwości nowego przypisania roli:
{
"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'"
}