1. 개요
Cloud Bigtable은 지연시간이 짧고 높은 처리량이 지원하는 NoSQL 데이터베이스 입니다.
Bigtable 사용자는 테이블에 수 테라바이트의 데이터를 저장하며 데이터를 안전하게 제어하는 것이 필수적입니다.
Bigtable 데이터에 대한 액세스 보안을 담당하는 관리자 또는 개발자인 경우 Google Cloud 보안 기능을 사용하여 Bigtable 리소스를 잠그고 사용자 인증 모델을 지정할 수 있습니다. 특정 Bigtable 리소스에 대한 액세스를 제어하고, 권한을 적용하기 위해 리소스 범위를 좁히고 개발 환경에 따라 IAM 조건 및 태그를 사용하여 Bigtable 데이터를 보호하는 권한 설정 방법을 설명합니다.
2. Identity and Access Management (IAM)
IAM은 GCP 리소스를 중앙에서 관리하기 위한 세분화된 액세스 제어 및 가시성을 제공합니다. 복잡한 클라우드 조직에는 역할을 기반으로 액세스를 제어하려는 관리자가 구성한 IAM 정책을 바인딩할 수 있는 다양한 리소스가 있을 수 있습니다.
다음 다이어그램은 IAM 정책을 리소스에 바인딩하는 관리자를 보여줍니다. IAM 정책은 구성원이라고 하는 하나 이상의 보안 주체로 구성되며 관리자는 각 보안 주체에게 하나 이상의 역할을 부여할 수 있습니다. 역할 부여 대상은 사용자, 그룹 또는 서비스 계정일 수 있습니다. 역할은 보안 주체가 GCP 리소스에서 일부 작업을 수행하도록 허용하는 권한 모음입니다.

리소스는 리소스 트리의 상위 항목에서 IAM 정책을 상속합니다. 사용자가 요청을 보내면 IAM은 사용자에게 해당 특정 리소스에 대한 작업을 수행할 권한이 있는지 확인합니다.
특정 사용자에게 정책을 부여하려는 경우 정책을 부여하려는 리소스에 바인딩된 IAM 정책이 사용자에게 권한을 부여할 수 있으면 권한이 부여됩니다. 그렇지 않은 경우 IAM은 리소스 트리로 이동하여 이러한 권한을 부여할 수 있는 정책을 검색합니다. 권한을 부여할 수 있는 정책이 리소스 트리에 없으면 권한 거부 오류와 함께 요청이 거부됩니다.
다음 Cloud Console 예시에서는 사용자 “222larabrown@gmail.com”에게 Bigtable Reader 역할을 부여하고 정책을 my-project 프로젝트에 결합합니다.

gcloud CLI 명령어를 사용하여 수행할 수 있습니다.
$ gcloud projects add-iam-policy-binding my-project \ --member='user:222larabrown@gmail.com' \ --role='roles/bigtable.reader'
바인딩이 생성되면 my-project 프로젝트 내에서 222larabrown@gmail.com에 Bigtable Reader 역할이 부여됩니다. 즉, 222larabrown@gmail.com은 기존 테이블의 데이터에 대한 읽기 액세스 권한과 컬럼 집합을 포함하는 인스턴스, 클러스터, 테이블의 메타데이터에 대한 읽기 액세스 권한을 가질 수 있습니다.
IAM에는 기본, 사전 정의 및 사용자 지정의 세 가지 역할 유형이 있습니다.
Bigtable Reader 역할은 사전 정의된 역할입니다. IAM 역할에 대한 자세한 내용은 역할 이해를 참조하십시오.
3. IAM 조건(Condition)
IAM 조건(Condition)은 GCP 리소스에 대한 조건부 속성 기반 액세스 제어를 정의하고 시행할 수 있는 기능입니다. 리소스에 대한 역할 바인딩 외에도 리소스 액세스는 구성된 조건이 충족되는 경우에만 보안 주체에게 부여됩니다.
다음은 IAM 조건의 작동 방식을 보여줍니다.

다음 Cloud Console 예시는 “Report tables” 조건으로 사용자 222larabrown@gmail.com에게 Bigtable Reader 역할을 부여하고 정책을 my-project 프로젝트에 결합합니다. “Report tables” 조건에서 222larabrown@gmail.com은 특정 Bigtable 인스턴스 내의 테이블 ID에 “report-”라는 접두사가 포함된 Bigtable 테이블에 대한 읽기 액세스 권한을 갖습니다.

“Report tables” 조건은 다음과 같이 정의됩니다.
- 소스 유형은 Bigtable 테이블 “bigtableadmin.googleapis.com/Table”이어야 합니다.
- 리소스(테이블) 이름은 접두사
“project/my-project/instances/my-instance/tables/report-”로 시작되어야 합니다. - 서비스는 Bigtable 관리자 서비스: “bigtableadmin.googleapis.com”이어야 합니다.

gcloud CLI 명령어를 사용하여 수행할 수 있습니다.
$ gcloud projects add-iam-policy-binding my-project \ --member='user:222larabrown@gmail.com' \ --role='roles/bigtable.reader' \ --condition-from-file=CONDITION_FROM_FILE
조건(Condition) 정의 파일을 JSON 또는 YAML 파일로 구성합니다.
“CONDITION_FROM_FILE” : 조건 정의 파일 경로
01 "title": "Report tables",
02 "description": "Tables with 'report-' prefix.",
03 "expression": "resource.type == 'bigtableadmin.googleapis.com/Table' && resource.name.startsWith('projects/my-project/instances/my-instance/tables/report-) && resource.service == 'bigtableadmin.googleapis.com'"
4. IAM 역할에 Tag 조건 구성
운영 환경에 구성된 리소스에는 “222larabrown@gmail.com” 사용자가 접근되어서는 안 되는 민감한 데이터가 포함되어 있습니다. “222larabrown@gmail.com” 사용자는 테스트 또는 스테이징 환경의 데이터에 대한 읽기 액세스 권한만 허용해야 하는 경우 어떻게 구성할 수 있을까요?
요구하는 조건을 구성하는 방법중 하나는 각 환경에서 구성된 리소스에 태그값을 설정하고 IAM 조건을 사용하여 연결된 태그 값으로 리소스에 대한 액세스를 제한하는 것입니다.
태그 사용은 조직 계층의 리소스를 관리하는 좋은 방법입니다. 태그를 사용하여 액세스 제어와 같은 다양한 목적을 위해 특정 리소스를 그룹화할 수 있습니다. 테스트, 스테이징 및 운영 환경과 같은 다양한 환경에 대한 리소스를 그룹화하기 위해 태그를 사용하는 방법을 살펴보겠습니다.
먼저 GCP Console > Google Cloud 조직 > 태그 메뉴에서 조직 구조로 구성된 프로젝트들을 관리할 태그를 만들 수 있습니다. 새 태그에는 “Test”, “Staging” 및 “Prod” 값이 있습니다.

태그가 생성되면 Tag Key ID와 구성된 세 개의 Tag value 들의 대한 Tag Value ID가 생성됩니다.

테스트 환경에 Bigtable 인스턴스 “my-instance”를 사용한다고 가정해보겠습니다. gcloud CLI를 사용하여 다음과 같이 Environment 태그의 “Test” 태그값을 인스턴스에 바인딩할 수 있습니다.
$ gcloud resource-manager tags bindings create \ --tag-value=tagValues/260761697116 \ --parent=//bigtable.googleapis.com/projects/my-project/instances/my-instance
참고: 현재 Bigtable 인스턴스에 태그 지정은 Cloud Console에서 지원되지 않습니다.
바인딩이 적용되면 리소스에 “Test” 태그값과 일치하는 태그 값이 있는 경우에만 액세스를 허용하도록 조건을 추가하고 보안 주체에게 역할을 부여할 수 있습니다.
이제 사용자 “222larabrown@gmail.com”은 테스트 환경에만 액세스할 수 있습니다.

자세한 내용은 태그 및 액세스 제어를 참조하십시오.
5. 요약
- IAM 기초
- Bigtable 제어에 대한 IAM 역할을 설정하는 방법
- IAM 조건(Condition)을 사용하여 IAM 역할의 범위를 추가로 제어하는 방법
- IAM 태그를 사용하여 권한 구성에 대한 환경 요구 사항을 추가하는 방법