Cloud Spanner 액세스 제어

개요

ID 및 액세스 관리(IAM)를 사용하면 프로젝트, Cloud Spanner 인스턴스, Cloud Spanner 데이터베이스 수준에서 Cloud Spanner 리소스에 대한 사용자 및 그룹 액세스를 제어할 수 있습니다. 예를 들어, 사용자가 프로젝트의 특정 인스턴스에서 특정 데이터베이스를 완전히 제어할 수 있지만 프로젝트에서 인스턴스를 만들거나 수정 또는 삭제할 수 없도록 지정할 수 있습니다. Cloud Spanner IAM을 사용하면 각 Cloud Spanner 인스턴스 또는 데이터베이스 권한을 개별적으로 수정할 필요 없이 사용자나 그룹에게 권한을 부여할 수 있습니다.

이 문서는 Cloud Spanner와 관련된 IAM 권한과 해당 권한을 부여하는 IAM 역할을 집중적으로 설명합니다. IAM 및 해당 기능에 대한 자세한 설명은 ID 및 액세스 관리 개발자 가이드를 참조하세요. 특히 IAM 정책 관리 섹션을 참조하세요.

권한

사용자는 권한을 통해 Cloud Spanner 리소스에서 특정 작업을 수행할 수 있습니다. 예를 들어 사용자는 spanner.databases.read 권한을 통해 Cloud Spanner의 읽기 API를 사용하여 데이터베이스에서 읽을 수 있고, spanner.databases.select 권한을 통해 데이터베이스에서 SQL select 문을 실행할 수 있습니다. 사용자에게 권한을 직접 부여하는 대신 하나 이상의 권한이 번들로 포함된 사전 정의된 역할이나 커스텀 역할을 부여합니다.

다음 표에는 Cloud Spanner와 관련된 IAM 권한이 나열되어 있습니다.

인스턴스 구성

Cloud Spanner 인스턴스 구성에 적용되는 권한은 다음과 같습니다(인스턴스 참조: REST, RPC 참조).

인스턴스 구성 권한 이름 설명
spanner.instanceConfigs.list 인스턴스 구성 조합을 나열합니다.
spanner.instanceConfigs.get 인스턴스 구성을 가져옵니다.

인스턴스

Cloud Spanner 인스턴스에 적용되는 권한은 다음과 같습니다(인스턴스 참조: REST, RPC 참조).

인스턴스 권한 이름 설명
spanner.instances.create 인스턴스를 만듭니다.
spanner.instances.list 인스턴스를 나열합니다.
spanner.instances.get 특정 인스턴스 구성을 가져옵니다.
spanner.instances.getIamPolicy 인스턴스의 IAM 정책을 가져옵니다.
spanner.instances.update 인스턴스를 업데이트합니다.
spanner.instances.setIamPolicy 인스턴스의 IAM 정책을 설정합니다.
spanner.instances.delete 인스턴스를 삭제합니다.

인스턴스 작업

Cloud Spanner 인스턴스 작업에 적용되는 권한은 다음과 같습니다(인스턴스 참조: REST, RPC 참조).

인스턴스 작업 권한 이름 설명
spanner.instanceOperations.list 인스턴스 작업을 나열합니다.
spanner.instanceOperations.get 특정 인스턴스 작업을 가져옵니다.
spanner.instanceOperations.cancel 인스턴스 작업을 취소합니다.
spanner.instanceOperations.delete 인스턴스 작업을 삭제합니다.

데이터베이스

Cloud Spanner 데이터베이스에 적용되는 권한은 다음과 같습니다(데이터베이스 참조: REST, RPC 참조).

데이터베이스 권한 이름 설명
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 Cloud Spanner 데이터베이스에서 읽기 전용 트랜잭션을 시작합니다.
spanner.databases.beginOrRollbackReadWriteTransaction Cloud Spanner 데이터베이스에서 읽기-쓰기 트랜잭션을 시작하거나 롤백합니다.
spanner.databases.read 읽기 API를 사용하여 데이터베이스에서 읽습니다.
spanner.databases.select 데이터베이스에서 SQL select 구문을 실행합니다.
spanner.databases.write 데이터베이스에 씁니다.
spanner.databases.drop 데이터베이스를 삭제합니다.

데이터베이스 작업

Cloud Spanner 데이터베이스 작업에 적용되는 권한은 다음과 같습니다(데이터베이스 참조: REST, RPC 참조).

데이터베이스 작업 권한 이름 설명
spanner.databaseOperations.list 데이터베이스를 나열하고 데이터베이스 작업을 복원합니다.
spanner.databaseOperations.get 특정 데이터베이스 작업을 가져옵니다.
spanner.databaseOperations.cancel 데이터베이스 작업을 취소합니다.
spanner.databaseOperations.delete

데이터베이스 작업을 삭제합니다.

백업

다음 권한이 Cloud Spanner 백업에 적용됩니다(백업 참조: REST, RPC).

백업 권한 이름 설명
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 정책을 설정합니다.

백업 작업

Cloud Spanner 백업 작업에 적용되는 권한은 다음과 같습니다(데이터베이스 참조: REST, RPC 참조).

백업 작업 권한 이름 설명
spanner.backupOperations.list 백업 작업을 나열합니다.
spanner.backupOperations.get 특정 백업 작업을 가져옵니다.
spanner.backupOperations.cancel 백업 작업을 취소합니다.

세션

Cloud Spanner 세션에 적용되는 권한은 다음과 같습니다(데이터베이스 참조: REST, RPC 참조).

세션 권한 이름 설명
spanner.sessions.create 세션을 만듭니다.
spanner.sessions.get 세션을 가져옵니다.
spanner.sessions.delete 세션을 삭제합니다.
spanner.sessions.list 세션을 나열합니다.

사전 정의된 역할

사전 정의된 역할은 한 개 이상의 권한 번들입니다. 예를 들어 사전 정의된 역할 roles/spanner.databaseUser에는 spanner.databases.read 권한과 spanner.database.write 권한이 있습니다. Cloud Spanner의 사전 정의된 역할에는 다음과 같은 두 가지 유형이 있습니다.

  • 사람 역할: 사용자나 그룹에게 부여되며, 이 역할을 통해 프로젝트의 리소스에서 작업을 수행할 수 있습니다.
  • 머신 역할: 서비스 계정에 부여되며, 이 역할을 통해 머신이 프로젝트의 리소스에서 작업을 수행하는 해당 서비스 계정으로 실행될 수 있습니다.

다음 표에는 각 역할과 관련된 권한 목록을 비롯하여 Cloud Spanner IAM의 사전 정의된 역할이 나열되어 있습니다.

역할 이름 설명 권한 최하위 리소스
roles/spanner.admin Cloud Spanner 관리자

Google Cloud 프로젝트의 모든 Cloud Spanner 리소스에 대한 완전한 액세스 권한을 가집니다. 이 역할을 가진 구성원은 다음을 수행할 수 있습니다.

  • 프로젝트의 모든 Cloud Spanner 리소스에 대한 권한을 다른 구성원에게 부여하고 취소합니다.
  • 유료 Cloud Spanner 리소스를 할당하고 삭제합니다.
  • Cloud Spanner 리소스 가져오기/나열/수정 작업을 실행합니다.
  • 프로젝트의 모든 Cloud Spanner 데이터베이스에 데이터를 읽고 씁니다.
  • 프로젝트 메타데이터를 가져옵니다.
  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.*
프로젝트
roles/spanner.backupAdmin Cloud Spanner 백업 관리자

이 역할을 가진 구성원은 다음을 수행할 수 있습니다.

  • 백업을 만들고, 보고, 업데이트하고, 삭제합니다.
  • 백업의 IAM 정책을 보고 관리합니다.

이 역할은 백업에서 데이터베이스를 복원할 수 없습니다.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.backupOperations.*
  • spanner.backups.create
  • spanner.backups.delete
  • spanner.backups.get
  • spanner.backups.getIamPolicy
  • spanner.backups.list
  • spanner.backups.setIamPolicy
  • spanner.backups.update
  • spanner.databases.createBackup
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
  • spanner.instances.list
인스턴스
roles/spanner.backupWriter Cloud Spanner 백업 작성자 이 역할은 백업 만들기를 자동화하는 스크립트에 사용됩니다. 이 역할을 가진 구성원은 백업을 만들 수 있지만, 업데이트하거나 삭제할 수는 없습니다.
  • spanner.backupOperations.get
  • spanner.backupOperations.list
  • spanner.backups.create
  • spanner.backups.get
  • spanner.backups.list
  • spanner.databases.createBackup
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
인스턴스
roles/spanner.databaseAdmin Cloud Spanner 데이터베이스 관리자

이 역할을 가진 구성원은 다음을 수행할 수 있습니다.

  • 프로젝트의 모든 Cloud Spanner 인스턴스를 가져오거나 나열합니다.
  • 인스턴스에서 데이터베이스 만들거나, 나열하거나, 삭제합니다.
  • 프로젝트의 데이터베이스 액세스 권한을 부여하거나 취소합니다.
  • 프로젝트의 모든 Cloud Spanner 데이터베이스에 데이터를 읽고 씁니다.
  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.databaseOperations.*
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.create
  • spanner.databases.drop
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.getIamPolicy
  • spanner.databases.list
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.databases.setIamPolicy
  • spanner.databases.update
  • spanner.databases.updateDdl
  • spanner.databases.write
  • spanner.instances.get
  • spanner.instances.getIamPolicy
  • spanner.instances.list
  • spanner.sessions.*
인스턴스
roles/spanner.databaseReader Cloud Spanner 데이터베이스 리더

이 역할을 가진 구성원은 다음을 수행할 수 있습니다.

  • Cloud Spanner 데이터베이스에서 읽습니다.
  • 데이터베이스에서 SQL 쿼리를 실행합니다.
  • 데이터베이스의 스키마를 봅니다.
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.getDdl
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.instances.get
  • spanner.sessions.*
데이터베이스
roles/spanner.databaseUser Cloud Spanner 데이터베이스 사용자

이 역할을 가진 구성원은 다음을 수행할 수 있습니다.

  • Cloud Spanner 데이터베이스에서 데이터를 읽고 씁니다.
  • DML과 Partitioned DML을 포함하여 데이터베이스에서 SQL 쿼리를 실행합니다.
  • 데이터베이스의 스키마를 보고 업데이트합니다.
  • spanner.databaseOperations.*
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.getDdl
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.databases.updateDdl
  • spanner.databases.write
  • spanner.instances.get
  • spanner.sessions.*
데이터베이스
roles/spanner.restoreAdmin Cloud Spanner 복원 관리자

이 역할을 가진 구성원은 백업에서 데이터베이스를 복원할 수 있습니다.

다른 인스턴스에 백업을 복원해야 하는 경우 프로젝트 수준에서 또는 두 인스턴스 모두에 이 역할을 적용합니다. 이 역할은 백업을 만들 수 없습니다.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.backups.get
  • spanner.backups.list
  • spanner.backups.restoreDatabase
  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list
  • spanner.databases.create
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
  • spanner.instances.list
인스턴스
roles/spanner.viewer Cloud Spanner 뷰어

이 역할을 가진 구성원은 다음을 수행할 수 있습니다.

  • 모든 Cloud Spanner 인스턴스를 봅니다(인스턴스 수정 불가).
  • 모든 Cloud Spanner 데이터베이스를 봅니다(데이터베이스에서 수정 또는 읽기 불가).

예를 들어 이 역할과 roles/spanner.databaseUser 역할을 결합하여 사용자에게 특정 데이터베이스에 대한 액세스 권한을 부여할 수 있지만, 다른 인스턴스 및 데이터베이스에 대한 액세스는 볼 수만 있습니다.

이 역할은 Google Cloud Console에서 Cloud Spanner 리소스와 상호작용하는 사용자에 대한 Google Cloud 프로젝트 수준에서 권장됩니다.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.databases.list
  • spanner.instanceConfigs.*
  • spanner.instances.get
  • spanner.instances.list
프로젝트

기본 역할

기본 역할은 IAM보다 먼저 발생하는 프로젝트 수준 역할입니다. 자세한 내용은 기본 역할을 참조하세요.

Cloud Spanner는 다음과 같은 기본 역할을 지원하지만 가능하면 위에 나와 있는 사전 정의된 역할 중 하나를 사용해야 합니다. 기본 역할에는 모든 Google Cloud 리소스에 적용되는 광범위한 권한이 포함됩니다. 반면에 Cloud Spanner의 사전 정의된 역할에는 Cloud Spanner에만 적용되는 세분화된 권한이 포함됩니다.

기본 역할 설명
roles/viewer 인스턴스와 스키마의 메타데이터를 나열하고 가져올 수 있습니다. 데이터베이스에서 SQL을 사용하여 읽고 쿼리할 수도 있습니다.
roles/editor roles/viewer가 할 수 있는 모든 작업을 할 수 있습니다. 인스턴스와 데이터베이스를 만들고 데이터베이스에 데이터를 쓸 수도 있습니다.
roles/owner roles/editor가 할 수 있는 모든 작업을 할 수 있습니다. 데이터베이스 및 인스턴스에 대한 액세스를 수정할 수도 있습니다.

커스텀 역할

Cloud Spanner의 사전 정의된 역할로 비즈니스 요구사항이 해결되지 않을 경우, 권한을 지정하여 자체 커스텀 역할을 정의할 수 있습니다.

먼저 수행해야 할 작업을 확인한 후에 커스텀 역할을 만들어야 합니다. 그런 다음 각 작업에 필요한 권한을 확인하고 이러한 권한을 커스텀 역할에 추가할 수 있습니다.

서비스 계정 작업을 위한 커스텀 역할

대부분의 작업의 경우, 커스텀 역할에 추가해야 하는 권한이 무엇인지 분명합니다. 예를 들어 서비스 계정에서 데이터베이스를 만들 수 있도록 하려면 spanner.databases.create 권한을 커스텀 역할에 추가합니다.

하지만 Cloud Spanner 테이블에서 데이터를 읽거나 쓸 경우에는 여러 가지 권한을 커스텀 역할에 추가해야 합니다. 다음 표에서는 데이터 읽기 및 쓰기에 필요한 권한을 보여줍니다.

서비스 계정 작업 필수 권한
데이터 읽기 spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
데이터 삽입, 업데이트 또는 삭제 spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
백업 만들기 spanner.backups.create
spanner.databases.createBackup
데이터베이스 복원 spanner.databases.create
spanner.backups.restoreDatabase

Google Cloud Console 작업의 커스텀 역할

Cloud Console에서 주어진 작업에 필요한 권한 목록을 확인하려면 해당 작업의 워크플로를 확인하고 해당 워크플로의 권한을 컴파일합니다. 예를 들어 테이블의 데이터를 보려면 Cloud Console에서 다음 단계를 수행합니다.

단계 권한
1. 프로젝트에 액세스 resourcemanager.projects.get
2. 인스턴스 목록 보기 spanner.instances.list
3. 인스턴스 선택 spanner.instances.get
4. 데이터베이스 목록 보기 spanner.databases.list
5. 데이터베이스 및 테이블 선택 spanner.databases.get, spanner.databases.getDdl
6. 테이블의 데이터 보기 spanner.databases.select, spanner.sessions.create, spanner.sessions.delete

이 예시에서 필요한 권한은 다음과 같습니다.

  • resourcemanager.projects.get
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.list
  • spanner.databases.select
  • spanner.instances.get
  • spanner.instances.list
  • spanner.sessions.create
  • spanner.sessions.delete

다음 표에는 Cloud Console에서의 작업에 필요한 권한이 나열되어 있습니다.

작업 권한
인스턴스 페이지에서 인스턴스 목록 보기

resourcemanager.projects.get
spanner.instances.list

인스턴스 페이지의 권한 탭에서 목록 보기

spanner.instances.getIamPolicy

인스턴스 페이지의 권한 탭에서 구성원 추가

spanner.instances.setIamPolicy

인스턴스 목록에서 인스턴스 세부정보 페이지를 보려는 인스턴스 선택

spanner.instances.get

인스턴스 만들기

spanner.instanceConfigs.list
spanner.instanceOperations.get
spanner.instances.create

인스턴스 삭제

spanner.instances.delete

인스턴스 수정

spanner.instanceOperations.get
spanner.instances.update

데이터베이스 세부정보 페이지 또는 인스턴스 세부정보 페이지의 모니터 탭에서 그래프 보기

monitoring.metricDescriptors.get
monitoring.metricDescriptors.list
monitoring.timeSeries.list
spanner.instances.get

인스턴스 세부정보 페이지에서 데이터베이스 목록 보기

spanner.databases.list

데이터베이스 세부정보 페이지의 권한 탭에서 목록 보기

spanner.databases.getIamPolicy

데이터베이스 세부정보 페이지의 권한 탭에서 구성원 추가

spanner.databases.setIamPolicy

데이터베이스 목록에서 데이터베이스 선택 및 데이터베이스 세부정보 페이지에서 스키마 보기

spanner.databases.get
spanner.databases.getDdl

데이터베이스 만들기

spanner.databases.create

데이터베이스 삭제

spanner.databases.drop

테이블 만들기

테이블 스키마 업데이트

spanner.databaseOperations.get
spanner.databaseOperations.list
spanner.databases.updateDdl

데이터베이스 세부정보 페이지의 데이터 탭에서 데이터 보기

쿼리 작성 및 실행

spanner.databases.select
spanner.sessions.create
spanner.sessions.delete

테이블의 데이터 수정

spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.select
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete

백업/복원 탭 보기

spanner.backups.list
spanner.backups.get

백업 작업 목록 보기

spanner.backupOperations.list

복원 작업 목록 보기

spanner.databaseOperations.list

백업 만들기

spanner.backups.create
spanner.databases.createBackup
spanner.databases.list1
spanner.backupOperations.list1

백업에서 데이터베이스 복원

spanner.instanceConfigs.list
spanner.instances.get
spanner.backups.get
spanner.backups.restoreDatabase
spanner.instances.list
spanner.databases.create

백업 업데이트

spanner.backups.update

백업 삭제

spanner.backups.delete

1 데이터베이스 수준 대신 인스턴스 수준으로 백업/복원 탭에서 백업을 만드는 경우 필수입니다.

Cloud Spanner IAM 정책 관리

Cloud 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

다음 단계