Identity and Access Management(IAM)를 사용하면 프로젝트, Spanner 인스턴스, Spanner 데이터베이스 수준에서 Spanner 리소스에 대한 사용자 및 그룹 액세스를 제어할 수 있습니다. 예를 들어 사용자가 프로젝트의 특정 인스턴스에서 특정 데이터베이스를 완전히 제어할 수 있지만 프로젝트에서 인스턴스를 만들거나 수정 또는 삭제할 수 없도록 지정할 수 있습니다. IAM을 통한 액세스 제어를 사용하면 각 Spanner 인스턴스 또는 데이터베이스 권한을 개별적으로 수정할 필요 없이 사용자나 그룹에게 권한을 부여할 수 있습니다.
이 문서는 Spanner와 관련된 IAM 권한과 해당 권한을 부여하는 IAM 역할을 집중적으로 설명합니다. IAM 및 해당 기능에 대한 자세한 설명은 Identity and Access Management 개발자 가이드를 참조하세요. 특히 IAM 정책 관리 섹션을 참조하세요.
권한
사용자는 권한을 통해 Spanner 리소스에서 특정 작업을 수행할 수 있습니다. 예를 들어 사용자는 spanner.databases.read
권한을 통해 Spanner의 읽기 API를 사용하여 데이터베이스에서 읽을 수 있고, spanner.databases.select
권한을 통해 데이터베이스에서 SQL select 문을 실행할 수 있습니다. 사용자에게 권한을 직접 부여하는 대신 하나 이상의 권한이 번들로 포함된 사전 정의된 역할이나 커스텀 역할을 부여합니다.
다음 표에는 Spanner와 관련된 IAM 권한이 나열되어 있습니다.
인스턴스 구성
Spanner 인스턴스 구성에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 인스턴스 구성 참조를 확인하세요.
인스턴스 구성 권한 이름 | 설명 |
---|---|
spanner.instanceConfigs.create |
커스텀 인스턴스 구성을 만듭니다. |
spanner.instanceConfigs.delete |
커스텀 인스턴스 구성을 삭제합니다. |
spanner.instanceConfigs.get |
인스턴스 구성을 가져옵니다. |
spanner.instanceConfigs.list |
인스턴스 구성 조합을 나열합니다. |
spanner.instanceConfigs.update |
커스텀 인스턴스 구성을 업데이트합니다. |
인스턴스 구성 작업
Spanner 인스턴스 구성 작업에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 인스턴스 참조를 확인하세요.
인스턴스 구성 작업 권한 이름 | 설명 |
---|---|
spanner.instanceConfigOperations.list |
인스턴스 구성 작업을 나열합니다. |
spanner.instanceConfigOperations.get |
특정 인스턴스 구성 작업을 가져옵니다. |
spanner.instanceConfigOperations.cancel |
인스턴스 구성 작업을 취소합니다. |
spanner.instanceConfigOperations.delete |
인스턴스 구성 작업을 삭제합니다. |
인스턴스
Spanner 인스턴스에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 인스턴스 참조를 확인하세요.
인스턴스 권한 이름 | 설명 |
---|---|
spanner.instances.create |
인스턴스를 만듭니다. |
spanner.instances.list |
인스턴스를 나열합니다. |
spanner.instances.get |
특정 인스턴스 구성을 가져옵니다. |
spanner.instances.getIamPolicy |
인스턴스의 IAM 정책을 가져옵니다. |
spanner.instances.update |
인스턴스를 업데이트합니다. |
spanner.instances.setIamPolicy |
인스턴스의 IAM 정책을 설정합니다. |
spanner.instances.delete |
인스턴스를 삭제합니다. |
인스턴스 작업
Spanner 인스턴스 작업에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 인스턴스 참조를 확인하세요.
인스턴스 작업 권한 이름 | 설명 |
---|---|
spanner.instanceOperations.list |
인스턴스 작업을 나열합니다. |
spanner.instanceOperations.get |
특정 인스턴스 작업을 가져옵니다. |
spanner.instanceOperations.cancel |
인스턴스 작업을 취소합니다. |
spanner.instanceOperations.delete |
인스턴스 작업을 삭제합니다. |
데이터베이스
Spanner 데이터베이스에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 데이터베이스 참조를 확인하세요.
데이터베이스 권한 이름 | 설명 |
---|---|
spanner.databases.beginPartitionedDmlTransaction |
Partitioned 데이터 조작 언어(DML) 문을 실행합니다. |
spanner.databases.create |
데이터베이스를 만듭니다. |
spanner.databases.createBackup |
데이터베이스에서 백업을 만듭니다. 또한 spanner.backups.create 로 백업 리소스를 만들어야 합니다. |
spanner.databases.list |
데이터베이스를 나열합니다. |
spanner.databases.update |
데이터베이스의 메타데이터를 업데이트합니다. |
spanner.databases.updateDdl |
데이터베이스의 스키마를 업데이트합니다. |
spanner.databases.get |
데이터베이스의 메타데이터를 가져옵니다. |
spanner.databases.getDdl |
데이터베이스의 스키마를 가져옵니다. |
spanner.databases.getIamPolicy |
데이터베이스의 IAM 정책을 가져옵니다. |
spanner.databases.setIamPolicy |
데이터베이스의 IAM 정책을 설정합니다. |
spanner.databases.beginReadOnlyTransaction |
Spanner 데이터베이스에서 읽기 전용 트랜잭션을 시작합니다. |
spanner.databases.beginOrRollbackReadWriteTransaction |
Spanner 데이터베이스에서 읽기-쓰기 트랜잭션을 시작하거나 롤백합니다. |
spanner.databases.read |
읽기 API를 사용하여 데이터베이스에서 읽습니다. |
spanner.databases.select |
데이터베이스에서 SQL select 구문을 실행합니다. |
spanner.databases.write |
데이터베이스에 씁니다. |
spanner.databases.drop |
데이터베이스를 삭제합니다. |
spanner.databases.useRoleBasedAccess |
세분화된 액세스 제어를 사용합니다. |
spanner.databases.useDataBoost |
Spanner Data Boost의 컴퓨팅 리소스를 사용하여 파티션을 나눈 쿼리를 처리합니다. |
데이터베이스 역할
Spanner 데이터베이스 역할에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST 및 RPC API의 데이터베이스 참조를 확인하세요.
데이터베이스 역할 권한 이름 | 설명 |
---|---|
spanner.databaseRoles.list |
데이터베이스 역할을 나열합니다. |
spanner.databaseRoles.use |
지정된 데이터베이스 역할을 사용합니다. |
데이터베이스 작업
Spanner 데이터베이스 작업에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 데이터베이스 참조를 확인하세요.
데이터베이스 작업 권한 이름 | 설명 |
---|---|
spanner.databaseOperations.list |
데이터베이스를 나열하고 데이터베이스 작업을 복원합니다. |
spanner.databaseOperations.get |
특정 데이터베이스 작업을 가져옵니다. |
spanner.databaseOperations.cancel |
데이터베이스 작업을 취소합니다. |
백업
Spanner 백업에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 백업 참조를 확인하세요.
백업 권한 이름 | 설명 |
---|---|
spanner.backups.create |
백업 만들기 또한 소스 데이터베이스에서 spanner.databases.createBackup 이 필요합니다. |
spanner.backups.get |
백업을 가져옵니다. |
spanner.backups.update |
백업을 업데이트합니다. |
spanner.backups.delete |
백업을 삭제합니다. |
spanner.backups.list |
백업을 나열합니다. |
spanner.backups.restoreDatabase |
백업에서 데이터베이스를 복원합니다. 또한 spanner.databases.create 로 대상 인스턴스에서 복원된 데이터베이스를 만들어야 합니다. |
spanner.backups.getIamPolicy |
백업의 IAM 정책을 가져옵니다. |
spanner.backups.setIamPolicy |
백업의 IAM 정책을 설정합니다. |
백업 작업
Spanner 백업 작업에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 데이터베이스 참조를 확인하세요.
백업 작업 권한 이름 | 설명 |
---|---|
spanner.backupOperations.list |
백업 작업을 나열합니다. |
spanner.backupOperations.get |
특정 백업 작업을 가져옵니다. |
spanner.backupOperations.cancel |
백업 작업을 취소합니다. |
세션
Spanner 세션에 적용되는 권한은 다음과 같습니다. 자세한 내용은 REST API 및 RPC API의 데이터베이스 참조를 확인하세요.
세션 권한 이름 | 설명 |
---|---|
spanner.sessions.create |
세션을 만듭니다. |
spanner.sessions.get |
세션을 가져옵니다. |
spanner.sessions.delete |
세션을 삭제합니다. |
spanner.sessions.list |
세션을 나열합니다. |
사전 정의된 역할
사전 정의된 역할은 한 개 이상의 권한 번들입니다. 예를 들어 사전 정의된 역할 roles/spanner.databaseUser
에는 spanner.databases.read
권한과 spanner.databases.write
권한이 있습니다. Spanner의 사전 정의된 역할에는 다음과 같은 두 가지 유형이 있습니다.
- 사람 역할: 사용자나 그룹에게 부여되며, 이 역할을 통해 프로젝트의 리소스에서 작업을 수행할 수 있습니다.
- 머신 역할: 서비스 계정에 부여되며, 이 역할을 통해 머신이 프로젝트의 리소스에서 작업을 수행하는 해당 서비스 계정으로 실행될 수 있습니다.
다음 표에는 각 역할과 관련된 권한 목록을 포함해 IAM의 사전 정의된 역할을 사용한 액세스 제어가 나열되어 있습니다.
Role | Permissions |
---|---|
Cloud Spanner Admin( Has complete access to all Spanner resources in a Google Cloud project. A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Backup Admin( A principal with this role can:
This role cannot restore a database from a backup. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Backup Writer( This role is intended to be used by scripts that automate backup creation. A principal with this role can create backups, but cannot update or delete them. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Admin( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader with DataBoost( Includes all permissions in the spanner.databaseReader role enabling access to read and/or query a Cloud Spanner database using instance resources, as well as the permission to access the database with Data Boost, a fully managed serverless service that provides independent compute resources. |
|
Cloud Spanner Database Role User( In conjunction with the IAM role Cloud Spanner Fine-grained Access User, grants permissions to individual Spanner database roles. Add a condition for each desired Spanner database role that includes the resource type of `spanner.googleapis.com/DatabaseRole` and the resource name ending with `/YOUR_SPANNER_DATABASE_ROLE`. |
|
Cloud Spanner Database User( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Fine-grained Access User( Grants permissions to use Spanner's fine-grained access control framework. To grant access to specific database roles, also add the `roles/spanner.databaseRoleUser` IAM role and its necessary conditions. |
|
Cloud Spanner Restore Admin( A principal with this role can restore databases from backups. If you need to restore a backup to a different instance, apply this role at the project level or to both instances. This role cannot create backups. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Viewer( A principal with this role can:
For example, you can combine this role with the This role is recommended at the Google Cloud project level for users interacting with Cloud Spanner resources in the Google Cloud console. Lowest-level resources where you can grant this role:
|
|
기본 역할
기본 역할은 IAM보다 먼저 발생하는 프로젝트 수준 역할입니다. 자세한 내용은 기본 역할을 참조하세요.
Spanner는 다음과 같은 기본 역할을 지원하지만 가능하면 앞에 나와 있는 사전 정의된 역할 중 하나를 사용해야 합니다. 기본 역할에는 모든 Google Cloud 리소스에 적용되는 광범위한 권한이 포함됩니다. 반면에 Spanner의 사전 정의된 역할에는 Spanner에만 적용되는 세분화된 권한이 포함됩니다.
기본 역할 | 설명 |
---|---|
roles/viewer |
인스턴스와 스키마의 메타데이터를 나열하고 가져올 수 있습니다. 데이터베이스에서 SQL을 사용하여 읽고 쿼리할 수도 있습니다. |
roles/editor |
roles/viewer 가 할 수 있는 모든 작업을 할 수 있습니다. 인스턴스와 데이터베이스를 만들고 데이터베이스에 데이터를 쓸 수도 있습니다. |
roles/owner |
roles/editor 가 할 수 있는 모든 작업을 할 수 있습니다. 데이터베이스 및 인스턴스에 대한 액세스를 수정할 수도 있습니다. |
커스텀 역할
Spanner의 사전 정의된 역할로 비즈니스 요구사항이 해결되지 않으면 권한을 지정하여 고유한 커스텀 역할을 정의하면 됩니다.
먼저 수행해야 할 태스크를 확인한 후에 커스텀 역할을 만들어야 합니다. 그런 다음 각 태스크에 필요한 권한을 확인하고 이러한 권한을 커스텀 역할에 추가할 수 있습니다.
서비스 계정 태스크를 위한 커스텀 역할
대부분의 태스크의 경우, 커스텀 역할에 추가해야 하는 권한이 무엇인지 분명합니다. 예를 들어 서비스 계정에서 데이터베이스를 만들 수 있도록 하려면 spanner.databases.create
권한을 커스텀 역할에 추가합니다.
하지만 Spanner 테이블에서 데이터를 읽거나 쓸 경우에는 여러 가지 권한을 커스텀 역할에 추가해야 합니다. 다음 표에서는 데이터 읽기 및 쓰기에 필요한 권한을 보여줍니다.
서비스 계정 태스크 | 필수 권한 |
---|---|
데이터 읽기 |
spanner.databases.select
|
데이터 삽입, 업데이트 또는 삭제 |
spanner.databases.beginOrRollbackReadWriteTransaction
|
백업 만들기 |
spanner.backups.create
|
데이터베이스 복원 |
spanner.databases.create
|
Google Cloud 콘솔 태스크의 커스텀 역할
Google Cloud 콘솔에서 주어진 태스크에 필요한 권한 목록을 확인하려면 해당 태스크의 워크플로를 확인하고 해당 워크플로의 권한을 컴파일합니다. 예를 들어 테이블의 데이터를 보려면 Google Cloud 콘솔에서 다음 단계를 수행합니다.
단계 | 권한 |
---|---|
1. 프로젝트에 액세스 | resourcemanager.projects.get |
2. 인스턴스 목록 보기 | spanner.instances.list |
3. 인스턴스 선택 | spanner.instances.get |
4. 데이터베이스 목록 보기 | spanner.databases.list |
5. 데이터베이스 및 테이블 선택 | spanner.databases.getDdl |
6. 테이블의 데이터 보기 | spanner.databases.select , spanner.sessions.create , spanner.sessions.delete |
이 예시에서 필요한 권한은 다음과 같습니다.
resourcemanager.projects.get
spanner.databases.getDdl
spanner.databases.list
spanner.databases.select
spanner.instances.get
spanner.instances.list
spanner.sessions.create
spanner.sessions.delete
다음 표에서는 Google Cloud 콘솔 작업에 필요한 권한을 보여줍니다.
작업 | 권한 |
---|---|
인스턴스 페이지에서 인스턴스 목록 보기 |
|
인스턴스 페이지의 권한 탭에서 목록 보기 |
|
인스턴스 페이지의 권한 탭에서 주 구성원 추가 |
|
인스턴스 목록에서 인스턴스 세부정보 페이지를 보려는 인스턴스 선택 |
|
인스턴스 만들기 |
|
인스턴스 삭제 |
|
인스턴스 수정 |
|
데이터베이스 세부정보 페이지 또는 인스턴스 세부정보 페이지의 모니터 탭에서 그래프 보기 |
|
인스턴스 세부정보 페이지에서 데이터베이스 목록 보기 |
|
데이터베이스 세부정보 페이지의 권한 탭에서 목록 보기 |
|
데이터베이스 세부정보 페이지의 권한 탭에서 주 구성원 추가 |
|
데이터베이스 목록에서 데이터베이스 선택 및 데이터베이스 세부정보 페이지에서 스키마 보기 |
|
데이터베이스 만들기 |
|
데이터베이스 삭제 |
|
테이블 만들기 테이블 스키마 업데이트 |
|
데이터베이스 세부정보 페이지의 데이터 탭에서 데이터 보기 쿼리 작성 및 실행 |
|
테이블의 데이터 수정 |
|
백업/복원 페이지 보기 |
|
백업 작업 목록 보기 |
|
복원 작업 목록 보기 |
|
백업 만들기 |
|
백업에서 데이터베이스 복원 |
|
백업 업데이트 |
|
백업 삭제 |
|
Spanner IAM 정책 관리
Spanner 인스턴스, 데이터베이스, 백업 리소스에서 REST 또는 RPC API를 사용하여 IAM 정책을 가져오고, 설정하고, 테스트할 수 있습니다.
인스턴스
REST API | RPC API |
---|---|
projects.instances.getIamPolicy |
GetIamPolicy |
projects.instances.setIamPolicy |
SetIamPolicy |
projects.instances.testIamPermissions |
TestIamPermissions |
데이터베이스
REST API | RPC API |
---|---|
projects.instances.databases.getIamPolicy |
GetIamPolicy |
projects.instances.databases.setIamPolicy |
SetIamPolicy |
projects.instances.databases.testIamPermissions |
TestIamPermissions |
백업
REST API | RPC API |
---|---|
projects.instances.backups.getIamPolicy |
GetIamPolicy |
projects.instances.backups.setIamPolicy |
SetIamPolicy |
projects.instances.backups.testIamPermissions |
TestIamPermissions |
다음 단계
- Identity and Access Management 자세히 알아보기
- Spanner 데이터베이스, 인스턴스 또는 Google Cloud 프로젝트의 IAM 역할 적용 방법 알아보기
- 인터넷에서 Spanner를 포함한 Google Cloud 리소스 액세스 제어 방법 알아보기