Directory API를 사용하면 역할 기반 액세스 제어 (RBAC) Google Workspace 도메인의 기능에 대한 액세스 권한을 관리할 수 있습니다. 다음을 만들 수 있습니다. 권한이 있는 커스텀 역할을 사용하여 보다 구체적으로 관리 액세스를 제한할 수 있습니다. Google Workspace에서 제공하는 기본 제공 역할에 관해 알아보겠습니다. 역할 할당 가능 보안 그룹에 액세스할 수 있습니다. 이 가이드에서는 몇 가지 작업을 수행하는 방법을 설명합니다. 기본적인 역할 관련 작업을 할 수 있습니다.
다음은 디렉터리 API가 Google Workspace 내 RBAC와 관련하여
- 권한
- 프로젝트에서 작업이나 작업을 수행하는 데 필요한
Google Workspace 도메인입니다. 표시 대상:
Privilege
리소스 거기 이 리소스와 연결된 영구 데이터가 없습니다. - 직책
- 해당 역할을 가진 항목에
특정 작업이나 작업을 수행하는 능력입니다. 표시 대상:
Role
리소스 - 역할 할당
- 사용자 또는 그룹에 부여된 특정 역할의 기록입니다. 대표 기관
RoleAssignment
리소스를 제공합니다. - 보안 그룹
- 유형 Cloud ID 그룹 조직 액세스 권한을 제어하는 데 사용되는 리소스를 배포합니다 보안 그룹에는 개별 사용자와 그룹이 모두 포함될 수 있습니다.
역할 및 역할 할당 한도
제한된 수의 맞춤 역할 또는 역할 할당만 만들 수 있으므로 한도에 가까워지고 있습니다. 목표를 달성하지 않도록 통합하거나 있습니다. 역할 및 역할 할당에는 다음과 같은 한도가 있습니다.
- 전체 조직에 최대 750개의 맞춤 역할을 만들 수 있습니다.
- 사용자당 최대 1,000개의 역할 할당을 만들 수 있습니다. 조직 단위 (OU)를 설정합니다. 예를 들어 루트 조직에 600개의 역할과 700개의 역할을 할당할 수 있습니다. 사용자가 정의한 다른 OU(예: 회사의 부서) 내에서 액세스할 수 있습니다 기본 제공되는 모든 Google Workspace 관리자 역할은 기본적으로 조직 전체 범위에 해당합니다 자세히 알아보기: 액세스할 수 있는 권한을 OU 수준에서 할당할 수 있습니다.
역할 및 역할 할당에 적용되는 그룹 한도는 다음과 같습니다.
- 최고 관리자를 제외한 모든 역할을 할당할 수 있습니다.
- 전체 OU에서 그룹에 최대 250개의 역할을 할당할 수 있습니다. 각 OU 내에서
- 그룹은 조직의 보안 그룹이어야 합니다.
- 그룹 멤버십을 조직의 사용자로 제한하는 것이 좋습니다. 나 조직 외부의 사용자를 추가할 수는 있지만 역할 권한을 얻지 못할 수 있습니다 자세한 내용은 그룹 멤버십 제한 ### 그룹에 역할 할당
한 OU에서 1, 000개 이상의 역할을 할당해야 하는 경우 보안 그룹에 구성원을 추가하고 역할을 그룹에 할당합니다. 그룹 역할 추가 제한사항이 있습니다. 자세한 내용은 관리자 고객센터를 참고하세요.
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 | GROUPS_ALL |
보안 - 사용자 보안 관리 | USER_SECURITY_ALL + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
사용 사례
시작하기 전에
인증 및 승인 단계별 안내입니다.
도메인 권한 목록 가져오기
도메인에서 지원되는 권한의 페이지로 나눈 목록을 가져오려면 다음을 사용하세요.
privileges.list()
드림
메서드를 사용하여 축소하도록 요청합니다.
내 도메인에서 권한을 가진 관리자인 경우 다음을 사용하세요.
my_customer
를 고객 ID로 사용합니다.고객 중 한 명으로부터 권한을 받는 리셀러인 경우 user 연산으로 해석됩니다.
요청
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
를 고객 ID로 사용합니다.고객에 대한 역할을 받는 리셀러인 경우 user 연산으로 해석됩니다.
요청
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()
드림
메서드를 사용하여 축소하도록 요청합니다. userKey
가
매개변수가 설정됩니다. 페이지 토큰이 없어질 때까지 페이지로 나누기를 계속해야 합니다.
반환합니다.
내 도메인에서 역할을 할당받는 관리자인 경우
my_customer
를 고객 ID로 사용합니다.고객 중 한 명에 대한 역할 할당을 받는 리셀러인 경우 user 연산으로 해석됩니다.
요청
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
를 고객 ID로 사용합니다.고객 중 한 명에 대한 역할 할당을 받는 리셀러인 경우 user 연산으로 해석됩니다.
USER_KEY
를 사용자를 식별하는 데 사용됩니다. 자세한 내용은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
메서드를 사용하고 승인을 포함합니다.
설명
요청을 승인합니다.
사용자에게 역할을 할당하려면 사용자의
user_id
가 포함된 JSON 본문을 추가합니다. 여기에서users.get()
에서roleId
( 기존 역할 가져오기),scope_type
서비스 계정에 역할을 할당하려면 서비스 계정의
unique_id
( Identity and Access Management (IAM)),roleId
( 기존 역할 가져오기) 및scope_type
그룹에 역할을 할당하려면
group_id
Google Cloud 콘솔의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
)은 다음과 같습니다.
범위 (scopeType
)에서 작업 수행자 (assignedTo
)에 무조건 적용됨
사용자에게 역할을 할당하려면 다음 POST 메서드를 사용하고 승인에 설명되어 있습니다. 승인 요청을 참조하세요.
사용자의 user_id
가 포함된 JSON 본문을 추가합니다. 이 본문은 다음과 같습니다.
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'"
}