IAM으로 리소스 액세스 제어
이 문서에서는 리소스의 현재 액세스 정책을 보는 방법, 리소스에 액세스 권한을 부여하는 방법, 리소스에 대해 액세스 권한을 해제하는 방법을 설명합니다.
이 문서에서는 Google Cloud의 Identity and Access Management(IAM) 시스템에 익숙하다고 가정합니다.
필요한 역할
리소스의 IAM 정책을 수정하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 BigQuery 데이터 소유자(roles/bigquery.dataOwner
) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이 사전 정의된 역할에는 리소스의 IAM 정책을 수정하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
리소스의 IAM 정책을 수정하려면 다음 권한이 필요합니다.
-
bigquery.datasets.get
-
bigquery.datasets.update
-
bigquery.datasets.getIamPolicy
-
bigquery.datasets.setIamPolicy
-
bigquery.tables.getIamPolicy
-
bigquery.tables.setIamPolicy
-
선택적으로 bq 도구 또는 SQL BigQuery 작업
bigquery.jobs.create
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
리소스의 액세스 정책 보기
다음 섹션에서는 여러 리소스의 액세스 정책을 보는 방법을 설명합니다.
데이터 세트의 액세스 정책 보기
다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 확장하고 데이터 세트를 선택합니다.
> 권한을 클릭합니다.
공유데이터 세트 액세스 정책이 데이터 세트 권한 창에 표시됩니다.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
기존 정책을 가져와서 JSON의 로컬 파일로 출력하려면 Cloud Shell에서
bq show
명령어를 사용합니다.bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- DATASET: 데이터 세트의 이름입니다.
- PATH_TO_FILE: 로컬 머신의 JSON 파일 경로입니다.
API
데이터 세트의 액세스 정책을 보려면 정의된 dataset
리소스를 사용하여 datasets.get
메서드를 호출합니다.
정책은 반환된 dataset
리소스의 access
속성에서 사용할 수 있습니다.
테이블 또는 뷰의 액세스 정책 보기
다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 확장하고 테이블 또는 뷰를 선택합니다.
공유를 클릭합니다.
테이블 또는 뷰 액세스 정책이 공유 창에 나타납니다.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
기존 액세스 정책을 가져와서 JSON의 로컬 파일로 출력하려면 Cloud Shell에서
bq get-iam-policy
명령어를 사용합니다.bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- DATASET: 데이터 세트의 이름입니다.
- RESOURCE: 정책을 보려는 테이블 또는 뷰의 이름입니다.
- PATH_TO_FILE: 로컬 머신의 JSON 파일 경로입니다.
API
현재 정책을 검색하려면 tables.getIamPolicy
메서드를 호출합니다.
리소스에 대해 액세스 권한 부여
다음 섹션에서는 여러 리소스에 대한 액세스 권한을 부여하는 방법을 설명합니다.
데이터 세트에 대해 액세스 권한 부여
다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 확장하고 공유할 데이터 세트를 선택합니다.
> 권한을 클릭합니다.
공유주 구성원 추가를 클릭합니다.
새 주 구성원 필드에 주 구성원을 입력합니다.
역할 선택 목록에서 사전 정의된 역할 또는 커스텀 역할을 선택합니다.
저장을 클릭합니다.
데이터 세트 정보로 돌아가려면 닫기를 클릭합니다.
SQL
데이터 세트에 대한 액세스 권한을 주 구성원에 부여하려면 GRANT
DCL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
다음을 바꿉니다.
ROLE_LIST
: 부여하려는 역할 또는 쉼표로 구분된 역할 목록입니다.RESOURCE_NAME
: 권한을 부여하려는 리소스 이름입니다.USER_LIST
: 역할이 부여된 쉼표로 구분된 사용자 목록입니다.유효한 형식 목록은
user_list
를 참조하세요.
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
다음 예시에서는 myDataset
데이터 세트에 대한 데이터 뷰어 역할을 부여합니다.
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
기존 데이터 세트 정보(액세스 제어 포함)를 JSON 파일에 기록하려면
bq show
명령어를 사용합니다.bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- DATASET: 데이터 세트의 이름입니다.
- PATH_TO_FILE: 로컬 머신의 JSON 파일 경로입니다.
JSON 파일의
access
섹션으로 변경합니다.specialGroup
항목(projectOwners
,projectWriters
,projectReaders
,allAuthenticatedUsers
)에 추가할 수 있습니다.userByEmail
,groupByEmail
,domain
중 하나를 추가할 수도 있습니다.예를 들어 데이터 세트 JSON 파일의
access
섹션은 다음과 비슷합니다.{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
수정이 완료되면
bq update
명령어를 사용하고--source
플래그로 JSON 파일을 포함합니다. 데이터 세트가 기본 프로젝트가 아닌 다른 프로젝트에 있다면 프로젝트 ID를PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
액세스 제어 변경사항을 확인하려면 파일에 정보를 쓰지 않고
bq show
명령어를 다시 사용합니다.bq show --format=prettyjson PROJECT_ID:DATASET
Terraform
google_bigquery_dataset_iam
리소스를 사용하여 데이터 세트에 대한 액세스를 업데이트합니다.
데이터 세트의 액세스 정책 설정
다음 예시에서는 google_bigquery_dataset_iam_policy
리소스를 사용해서 mydataset
데이터 세트에 대해 IAM 정책을 설정하는 방법을 보여줍니다. 이 방법은 데이터 세트에 이미 연결된 기존 정책을 대체합니다.
# This file sets the IAM policy for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.admin" members = [ "user:hao@altostrat.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:dba@altostrat.com", ] } binding { role = "roles/bigquery.dataEditor" members = [ "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com", ] } } resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" { dataset_id = google_bigquery_dataset.default.dataset_id policy_data = data.google_iam_policy.iam_policy.policy_data }
데이터 세트의 역할 멤버십 설정
다음 예시에서는 google_bigquery_dataset_iam_binding
리소스를 사용해서 mydataset
데이터 세트에 대해 제공된 역할로 멤버십을 설정하는 방법을 보여줍니다. 이렇게 하면 해당 역할의 기존 멤버십이 대체됩니다.
데이터 세트의 IAM 정책 내에 있는 다른 역할은 보존됩니다.
# This file sets membership in an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.jobUser" members = [ "user:raha@altostrat.com", "group:analysts@altostrat.com" ] }
단일 주 구성원의 역할 멤버십 설정
다음 예시에서는 google_bigquery_dataset_iam_member
리소스를 사용하여 mydataset
데이터 세트에 대한 IAM 정책을 업데이트하여 단일 주 구성원에게 역할을 부여하는 방법을 보여줍니다. 이 IAM 정책을 업데이트해도 데이터 세트에 대해 해당 역할이 부여된 다른 주 구성원의 액세스 권한에는 영향을 미치지 않습니다.
# This file adds a member to an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_member" "dataset_iam_member" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.user" member = "user:yuri@altostrat.com" }
Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.
Cloud Shell 준비
- Cloud Shell을 실행합니다.
-
Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.
이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
디렉터리 준비
각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.
-
Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는
.tf
확장자가 있어야 합니다(예:main.tf
). 이 튜토리얼에서는 파일을main.tf
라고 합니다.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.
샘플 코드를 새로 만든
main.tf
에 복사합니다.필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.
- 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
- 변경사항을 저장합니다.
-
Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
terraform init
원하는 경우 최신 Google 공급업체 버전을 사용하려면
-upgrade
옵션을 포함합니다.terraform init -upgrade
변경사항 적용
-
구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
terraform plan
필요에 따라 구성을 수정합니다.
-
다음 명령어를 실행하고 프롬프트에
yes
를 입력하여 Terraform 구성을 적용합니다.terraform apply
Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.
- 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.
API
데이터 세트를 만들 때 액세스 제어를 적용하려면 정의된 데이터 세트 리소스를 사용하여 datasets.insert
메서드를 호출합니다.
액세스 제어를 업데이트하려면 datasets.patch
메서드를 호출하고 Dataset
리소스에서 access
속성을 사용합니다.
datasets.update
메서드는 전체 데이터 세트 리소스를 바꾸기 때문에 datasets.patch
메서드를 사용하여 액세스 제어를 업데이트하는 것이 좋습니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
데이터 세트에 대한 액세스 제어를 사용하여dataset.access_entries
속성을 설정합니다. 그런 다음 client.update_dataset()
함수를 호출하여 속성을 업데이트합니다.
테이블 또는 뷰에 대해 액세스 부여
다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 확장하고 공유할 테이블 또는 뷰를 선택합니다.
공유를 클릭합니다.
주 구성원 추가를 클릭합니다.
새 주 구성원 필드에 주 구성원을 입력합니다.
역할 선택 목록에서 사전 정의된 역할 또는 커스텀 역할을 선택합니다.
저장을 클릭합니다.
테이블 또는 뷰 세부정보로 돌아가려면 닫기를 클릭합니다.
SQL
주 구성원에 테이블 또는 뷰에 대한 액세스 권한을 부여하려면 GRANT
DCL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
다음을 바꿉니다.
ROLE_LIST
: 부여하려는 역할 또는 쉼표로 구분된 역할 목록입니다.RESOURCE_TYPE
: 역할이 적용된 리소스 유형입니다.지원되는 값은
TABLE
,VIEW
,MATERIALIZED VIEW
,EXTERNAL TABLE
입니다.RESOURCE_NAME
: 권한을 부여하려는 리소스 이름입니다.USER_LIST
: 역할이 부여된 쉼표로 구분된 사용자 목록입니다.유효한 형식 목록은
user_list
를 참조하세요.
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
다음 예시에서는 myTable
테이블에 대한 데이터 뷰어 역할을 부여합니다.
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
기존 테이블 또는 뷰 정보(액세스 제어 포함)를 JSON 파일에 기록하려면
bq get-iam-policy
명령어를 사용합니다.bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- DATASET: 업데이트하려는 테이블 또는 뷰가 포함된 데이터 세트의 이름입니다.
- TABLE_OR_VIEW: 업데이트할 리소스의 이름입니다.
- PATH_TO_FILE: 로컬 머신의 JSON 파일 경로입니다.
JSON 파일의
bindings
섹션으로 변경합니다. 바인딩은members
또는 주 구성원 하나 이상을 단일role
에 바인딩합니다. 주 구성원은 사용자 계정, 서비스 계정, Google 그룹, 도메인일 수 있습니다. 예를 들어 테이블 또는 뷰의 JSON 파일의bindings
섹션은 다음과 비슷합니다.{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
액세스 정책을 업데이트하려면
bq set-iam-policy
명령어를 사용합니다.bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
액세스 제어 변경사항을 확인하려면 파일에 정보를 쓰지 않고
bq get-iam-policy
명령어를 다시 사용합니다.bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
Terraform
google_bigquery_table_iam
리소스를 사용하여 테이블에 대한 액세스를 업데이트합니다.
테이블의 액세스 정책 설정
다음 예시에서는 google_bigquery_table_iam_policy
리소스를 사용해서 mytable
테이블에 대해 IAM 정책을 설정하는 방법을 보여줍니다. 이 방법은 테이블에 이미 연결된 기존 정책을 대체합니다.
# This file sets the IAM policy for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.dataOwner" members = [ "user:raha@altostrat.com", ] } } resource "google_bigquery_table_iam_policy" "table_iam_policy" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id policy_data = data.google_iam_policy.iam_policy.policy_data }
테이블의 역할 멤버십 설정
다음 예시에서는 google_bigquery_table_iam_binding
리소스를 사용해서 mytable
테이블에 대해 제공된 역할로 멤버십을 설정하는 방법을 보여줍니다. 이렇게 하면 해당 역할의 기존 멤버십이 대체됩니다.
테이블의 IAM 정책 내에 있는 다른 역할은 보존됩니다.
# This file sets membership in an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_binding" "table_iam_binding" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataOwner" members = [ "group:analysts@altostrat.com", ] }
단일 주 구성원의 역할 멤버십 설정
다음 예시에서는 google_bigquery_table_iam_member
리소스를 사용하여 mytable
테이블에 대한 IAM 정책을 업데이트하여 단일 주 구성원에게 역할을 부여하는 방법을 보여줍니다. 이 IAM 정책을 업데이트해도 데이터 세트에 대해 해당 역할이 부여된 다른 주 구성원의 액세스 권한에는 영향을 미치지 않습니다.
# This file adds a member to an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_member" "table_iam_member" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataEditor" member = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com" }
Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.
Cloud Shell 준비
- Cloud Shell을 실행합니다.
-
Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.
이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
디렉터리 준비
각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.
-
Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는
.tf
확장자가 있어야 합니다(예:main.tf
). 이 튜토리얼에서는 파일을main.tf
라고 합니다.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.
샘플 코드를 새로 만든
main.tf
에 복사합니다.필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.
- 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
- 변경사항을 저장합니다.
-
Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
terraform init
원하는 경우 최신 Google 공급업체 버전을 사용하려면
-upgrade
옵션을 포함합니다.terraform init -upgrade
변경사항 적용
-
구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
terraform plan
필요에 따라 구성을 수정합니다.
-
다음 명령어를 실행하고 프롬프트에
yes
를 입력하여 Terraform 구성을 적용합니다.terraform apply
Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.
- 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.
API
- 현재 정책을 검색하려면
tables.getIamPolicy
메서드를 호출합니다. 정책을 수정하여 구성원 또는 결합을 추가합니다. 정책에 필요한 형식은 정책 참조 주제를 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
리소스에 대한 액세스 취소
다음 섹션에서는 여러 리소스에 대한 액세스 권한을 취소하는 방법을 설명합니다.
데이터 세트에 대한 액세스 취소
다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
탐색기 패널에서 프로젝트를 확장하고 데이터 세트를 선택합니다.
세부정보 패널에서 공유 > 권한을 클릭합니다.
데이터 세트 권한 대화상자에서 취소하려는 액세스 권한이 있는 주 구성원을 확장합니다.
주 구성원 삭제를 클릭합니다.
주 구성원에서 역할을 삭제할까요? 대화상자에서 삭제를 클릭합니다.
데이터 세트 세부정보로 돌아가려면 닫기를 클릭합니다.
SQL
주 구성원에서 데이터 세트에 대해 액세스 권한을 삭제하려면 REVOKE
DCL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
다음을 바꿉니다.
ROLE_LIST
: 취소하려는 역할 또는 쉼표로 구분된 역할 목록입니다.RESOURCE_NAME
: 권한을 취소하려는 리소스의 이름입니다.USER_LIST
: 역할이 취소되는 쉼표로 구분된 사용자 목록입니다.유효한 형식 목록은
user_list
를 참조하세요.
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
다음 예시에서는 myDataset
데이터 세트에 대한 관리자 역할을 취소합니다.
REVOKE `roles/bigquery.admin`
ON SCHEMA `myProject`.myDataset
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
기존 데이터 세트 정보(액세스 제어 포함)를 JSON 파일에 기록하려면
bq show
명령어를 사용합니다.bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- DATASET: 데이터 세트의 이름입니다.
- PATH_TO_FILE: 로컬 머신의 JSON 파일 경로입니다.
JSON 파일의
access
섹션으로 변경합니다.specialGroup
항목(projectOwners
,projectWriters
,projectReaders
,allAuthenticatedUsers
)을 삭제할 수 있습니다.userByEmail
,groupByEmail
,domain
도 삭제할 수 있습니다.예를 들어 데이터 세트 JSON 파일의
access
섹션은 다음과 비슷합니다.{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
수정이 완료되면
bq update
명령어를 사용하고--source
플래그로 JSON 파일을 포함합니다. 데이터 세트가 기본 프로젝트가 아닌 다른 프로젝트에 있다면 프로젝트 ID를PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
액세스 제어 변경사항을 확인하려면 파일에 정보를 쓰지 않고
show
명령어를 다시 사용합니다.bq show --format=prettyjson PROJECT_ID:DATASET
API
datasets.patch
를 호출하고 Dataset
리소스의 access
속성을 사용하여 액세스 제어를 업데이트합니다.
datasets.update
메서드는 전체 데이터 세트 리소스를 바꾸기 때문에 datasets.patch
메서드를 사용하여 액세스 제어를 업데이트하는 것이 좋습니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
데이터 세트에 대한 액세스 제어를 사용하여dataset.access_entries
속성을 설정합니다. 그런 다음 client.update_dataset()
함수를 호출하여 속성을 업데이트합니다.
테이블 또는 뷰에 대해 액세스 취소
다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 확장하고 테이블 또는 뷰를 선택합니다.
세부정보 패널에서 공유를 클릭합니다.
공유 대화상자에서 액세스 권한을 취소하려는 주 구성원을 확장합니다.
삭제를 클릭합니다.
주 구성원에서 역할을 삭제할까요? 대화상자에서 삭제를 클릭합니다.
테이블 또는 뷰 세부정보로 돌아가려면 닫기를 클릭합니다.
SQL
주 구성원에서 테이블 또는 뷰에 대해 액세스 권한을 삭제하려면 REVOKE
DCL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
다음을 바꿉니다.
ROLE_LIST
: 취소하려는 역할 또는 쉼표로 구분된 역할 목록입니다.RESOURCE_TYPE
: 역할이 취소되는 리소스 유형입니다.지원되는 값은
TABLE
,VIEW
,MATERIALIZED VIEW
,EXTERNAL TABLE
입니다.RESOURCE_NAME
: 권한을 취소하려는 리소스의 이름입니다.USER_LIST
: 역할이 취소되는 쉼표로 구분된 사용자 목록입니다.유효한 형식 목록은
user_list
를 참조하세요.
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
다음 예시에서는 myTable
테이블에서 관리자 역할을 취소합니다.
REVOKE `roles/bigquery.admin`
ON TABLE `myProject`.myDataset.myTable
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
기존 테이블 또는 뷰 정보(액세스 제어 포함)를 JSON 파일에 기록하려면
bq get-iam-policy
명령어를 사용합니다.bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- DATASET: 업데이트하려는 테이블 또는 뷰가 포함된 데이터 세트의 이름입니다.
- TABLE_OR_VIEW: 업데이트할 리소스의 이름입니다.
PATH_TO_FILE: 로컬 머신의 JSON 파일 경로입니다.
JSON 파일의
access
섹션으로 변경합니다.specialGroup
항목(projectOwners
,projectWriters
,projectReaders
,allAuthenticatedUsers
)을 삭제할 수 있습니다.userByEmail
,groupByEmail
,domain
도 삭제할 수 있습니다. 예를 들어 테이블 또는 뷰의 JSON 파일의access
섹션은 다음과 비슷합니다.{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
액세스 정책을 업데이트하려면
bq set-iam-policy
명령어를 사용합니다.bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
액세스 제어 변경사항을 확인하려면 파일에 정보를 쓰지 않고
get-iam-policy
명령어를 다시 사용합니다.bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
API
- 현재 정책을 검색하려면
tables.getIamPolicy
메서드를 호출합니다. 정책을 수정하여 구성원 또는 결합 또는 둘 다를 삭제합니다. 정책에 필요한 형식은 정책 참조 주제를 참조하세요.
tables.setIamPolicy
를 호출하여 업데이트된 정책을 작성합니다. 참고: 구성원이 없는 비어 있는 binding은 허용되지 않으며 이 경우 오류가 발생합니다.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
리소스에 대한 액세스 거부
IAM 거부 정책을 사용하면 BigQuery 리소스에 대한 액세스에 가드레일을 설정할 수 있습니다. 부여된 역할에 관계없이 선택한 주 구성원이 특정 권한을 사용하지 못하게 하는 거부 규칙을 정의할 수 있습니다.
거부 정책을 만들고, 업데이트하고, 삭제하는 방법에 대한 자세한 내용은 리소스 액세스 거부를 참고하세요.
특수한 경우
일부 BigQuery 권한에 대한 IAM 거부 정책을 만들 때 다음 시나리오를 고려하세요.
승인된 리소스(뷰, routines, 데이터 세트 또는 저장 프러시저)에 액세스하면 이러한 작업을 수행할 직접적인 권한이 없더라도 테이블 데이터를 읽고 수정하는 것과 함께 테이블을 create 삭제하거나 조작할 수 있습니다. 또한 모델 데이터 또는 메타데이터를 가져오고 기본 테이블에서 다른 저장 프러시저를 호출할 수도 있습니다. 이 기능은 승인된 리소스에 다음 권한이 있음을 의미합니다.
bigquery.tables.get
bigquery.tables.list
bigquery.tables.getData
bigquery.tables.updateData
bigquery.tables.create
bigquery.tables.delete
bigquery.routines.get
bigquery.routines.list
bigquery.datasets.get
bigquery.models.getData
bigquery.models.getMetadata
이러한 승인된 리소스에 대한 액세스를 거부하려면 거부 정책을 만들 때
deniedPrincipal
필드에 다음 값 중 하나를 추가합니다.값 사용 사례 principalSet://goog/public:all
승인된 리소스를 포함한 모든 주 구성원을 차단합니다. principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
지정된 프로젝트에서 승인된 모든 BigQuery 리소스를 차단합니다. PROJECT_NUMBER
는INT64
유형의 프로젝트에 대해 자동으로 생성되는 고유 식별자입니다.BigQuery는 24시간 동안 작업 소유자의 쿼리 결과를 캐시하므로 작업 소유자는 데이터가 포함된 테이블에 대한
bigquery.tables.getData
권한이 없어도 액세스할 수 있습니다. 따라서bigquery.tables.getData
권한에 IAM 거부 정책을 추가해도 캐시가 만료될 때까지 작업 소유자의 캐시된 결과에 대한 액세스가 차단되지 않습니다. 캐시된 결과에 대한 작업 소유자의 액세스를 차단하려면bigquery.jobs.create
권한에 별도의 거부 정책을 만듭니다.