테이블, 뷰, 데이터 세트에 태그 지정

이 문서에서는 태그를 사용하여 BigQuery 테이블, 뷰, 데이터 세트에 Identity and Access Management (IAM) 정책을 조건부로 적용하는 방법을 설명합니다.

태그는 테이블, 뷰 또는 데이터 세트에 직접 연결할 수 있는 키-값 쌍이거나 테이블, 뷰 또는 데이터 세트가 다른 Google Cloud 리소스에서 상속할 수 있는 키-값 쌍입니다. 리소스에 특정 태그가 있는지 여부에 따라 정책을 조건부로 적용할 수 있습니다. 예를 들어 environment:dev 태그가 있는 모든 데이터 세트의 주 구성원에게 BigQuery 데이터 뷰어 역할을 조건부로 부여할 수 있습니다.

Google Cloud 리소스 계층 구조에서 태그 사용에 대한 자세한 내용은 태그 개요를 참조하세요.

아직 존재하지 않는 리소스를 포함하여 여러 관련 BigQuery 리소스에 동시에 권한을 부여하려면 IAM 조건을 사용하는 것이 좋습니다.

시작하기 전에

사용자에게 이 문서의 각 태스크를 수행하는 데 필요한 권한을 부여하는 IAM 역할을 부여해야 합니다. 리소스에 연결할 태그 키와 값도 만들어야 합니다.

필수 권한

BigQuery에서 태그를 사용하려면 다음 권한이 필요합니다.

  • 테이블 또는 뷰에 태그를 연결하려면 테이블 또는 뷰에 대한 bigquery.tables.createTagBinding IAM 권한과 연결하려는 태그 값에 대한 프로젝트 수준의 resourcemanager.tagValueBindings.create 권한이 필요합니다.
  • 데이터 세트에 태그 연결하기 - 데이터 세트에 대한 bigquery.datasets.createTagBinding IAM 권한 및 연결하려는 태그 값에 대한 프로젝트 수준의 resourcemanager.tagValueBindings.create 권한이 필요합니다.
  • 테이블 또는 뷰에서 태그를 삭제하려면 테이블 또는 뷰에 대한 bigquery.tables.deleteTagBinding IAM 권한과 삭제하려는 태그 값에 대한 프로젝트 수준의 resourcemanager.tagValueBindings.delete 권한이 필요합니다.
  • 데이터 세트에서 태그 삭제하기 - 데이터 세트에 대한 bigquery.datasets.deleteTagBinding IAM 권한 및 삭제할 태그 값에 대한 프로젝트 수준의 resourcemanager.tagValueBindings.delete 권한이 필요합니다.
  • 테이블, 보기 또는 데이터 세트의 세부정보 수정 패널에서 상위 조직 또는 프로젝트와 연결된 태그 키를 나열하려면 태그 키의 상위 수준에 resourcemanager.tagKeys.list 권한 및 각 태그 키에 대해 resourcemanager.tagKeys.get 권한이 필요합니다.
  • 테이블, 보기 또는 데이터 세트의 세부정보 수정 패널에서 상위 조직 또는 프로젝트와 연결된 키의 태그 값을 나열하려면 태그 값의 상위 수준에 resourcemanager.tagValues.list 권한 및 각 태그 값에 대해 resourcemanager.tagValues.get 권한이 필요합니다.

Cloud Resource Manager API 또는 gcloud에서 태그를 사용하는 경우 다음 권한도 필요합니다.

  • Cloud Resource Manager API 또는 gcloud CLI를 사용하여 테이블 또는 뷰에 연결된 태그를 나열하려면 bigquery.tables.listTagBindings IAM 권한이 필요합니다.
  • 테이블 또는 뷰의 유효 태그를 나열하려면 bigquery.tables.listEffectiveTags IAM 권한이 필요합니다.
  • Cloud Resource Manager API 또는 gcloud CLI를 사용하여 데이터 세트에 연결된 태그를 나열하려면 bigquery.datasets.listTagBindings IAM 권한이 필요합니다.
  • 데이터 세트의 유효 태그를 나열하려면 bigquery.datasets.listEffectiveTags IAM 권한이 필요합니다.

다음과 같은 사전 정의된 두 IAM 역할 모두에는 필요한 모든 BigQuery 권한이 포함되어 있습니다.

  • BigQuery 데이터 소유자(roles/bigquery.dataOwner)
  • BigQuery 관리자(roles/bigquery.admin)

Resource Manager 권한은 태그 사용자 역할(roles/resourcemanager.tagUser)에 포함됩니다.

또한 태그를 사용하여 BigQuery 테이블, 보기, 데이터 세트 (미리보기)에 대한 IAM 정책을 통해 조건부로 액세스를 거부할 수도 있습니다. 자세한 내용은 거부 정책을 참조하세요.

태그 키 및 값 만들기

태그를 연결하려면 먼저 태그를 만들고 값을 구성해야 합니다. 태그 키와 태그 값을 만들려면 태그 만들기태그 값 추가를 참조하세요.

테이블 태그하기

다음 섹션에서는 새 테이블과 기존 테이블에 태그를 연결하고, 테이블에 연결된 태그를 나열하고, 테이블에서 태그를 분리하는 방법을 설명합니다.

새 테이블을 만들 때 태그 연결

태그를 만든 후 새 테이블에 연결할 수 있습니다. 지정된 태그 키의 테이블에 태그 값 하나만 연결할 수 있습니다. 테이블에 태그를 최대 50개까지 연결할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트를 펼친 후 데이터 세트를 선택합니다.

  3. 데이터 세트 정보 섹션에서 테이블 만들기를 클릭합니다.

  4. 새 테이블의 정보를 입력합니다. 자세한 내용은 테이블 만들기 및 사용을 참조하세요.

  5. 태그 섹션에서 새 테이블에 추가할 태그를 선택합니다.

  6. 테이블 만들기를 클릭합니다.

bq

--add_tags 플래그와 함께 bq mk --table 명령어를 사용합니다.

bq mk --table \
    --schema=SCHEMA \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

다음을 바꿉니다.

  • SCHEMA: 인라인 스키마 정의입니다.
  • TAG: 새 테이블에 연결할 태그입니다. 태그가 여러 개면 쉼표로 구분합니다. 예를 들면 556741164180/env:prod,myProject/department:sales입니다. 각 태그에는 네임스페이스화된 키 이름 및 값 짧은 이름이 있어야 합니다.
  • PROJECT_ID: 테이블을 만들 프로젝트의 ID입니다.
  • DATASET_ID: 테이블을 만들 데이터 세트의 ID입니다.
  • TABLE_ID: 만들려는 새 테이블의 ID입니다.

Terraform

google_bigquery_table 리소스를 사용합니다.

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.

다음 예시에서는 mytable이라는 테이블을 만든 후 resource_tags 필드를 채워 태그를 연결합니다.


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env3"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department3"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "MyDataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days
}

# Create a table
resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "mytable"
  description         = "table description"
  deletion_protection = false # set to "true" in production

  # Attach tags to the table
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.

Cloud Shell 준비

  1. Cloud Shell을 실행합니다.
  2. Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.

    이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.

디렉터리 준비

각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.

  1. Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는 .tf 확장자가 있어야 합니다(예: main.tf). 이 튜토리얼에서는 파일을 main.tf라고 합니다.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.

    샘플 코드를 새로 만든 main.tf에 복사합니다.

    필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.

  3. 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
  4. 변경사항을 저장합니다.
  5. Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
    terraform init

    원하는 경우 최신 Google 공급업체 버전을 사용하려면 -upgrade 옵션을 포함합니다.

    terraform init -upgrade

변경사항 적용

  1. 구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
    terraform plan

    필요에 따라 구성을 수정합니다.

  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 Terraform 구성을 적용합니다.
    terraform apply

    Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.

  3. 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.

API

테이블 리소스가 정의된 tables.insert 메서드를 호출합니다. resource_tags 필드에 태그를 포함합니다.

기존 테이블에 태그 연결

태그를 만든 후 기존 테이블에 연결할 수 있습니다. 지정된 태그 키의 테이블에 태그 값 하나만 연결할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트와 데이터 세트를 펼친 후 테이블을 선택합니다.

  3. 세부정보 탭에서 세부정보 수정을 클릭합니다.

  4. 태그 섹션에서 표에 추가할 태그를 선택합니다.

  5. 저장을 클릭합니다.

bq

--add_tags 플래그와 함께 bq update 명령어를 사용합니다.

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

다음을 바꿉니다.

  • TAG: 테이블에 연결할 태그입니다. 태그가 여러 개면 쉼표로 구분합니다. 예를 들면 556741164180/env:prod,myProject/department:sales입니다. 각 태그에는 네임스페이스화된 키 이름 및 값 짧은 이름이 있어야 합니다.
  • PROJECT_ID: 테이블이 포함된 프로젝트의 ID입니다.
  • DATASET_ID: 테이블이 포함된 데이터 세트의 ID입니다.
  • TABLE_ID: 업데이트하려는 테이블의 ID입니다.

gcloud

명령줄을 사용하여 태그를 테이블에 연결하려면 gcloud resource-manager tags bindings create 명령어를 사용하여 태그 binding 리소스를 만듭니다.

gcloud resource-manager tags bindings create \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

다음을 바꿉니다.

  • TAGVALUE_NAME: 연결할 태그 값의 영구 ID 또는 네임스페이스 이름(예: tagValues/4567890123 또는 1234567/my_tag_key/my_tag_value)입니다.
  • RESOURCE_ID: 리소스 유형을 식별하는 API 도메인 이름(//bigquery.googleapis.com/)을 포함한 테이블의 전체 ID입니다. 예를 들면 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table입니다.
  • LOCATION: 테이블의 위치입니다.

Terraform

테이블의 resource_tags 필드에 태그를 추가한 후 google_bigquery_table 리소스를 사용하여 업데이트된 구성을 적용합니다. 자세한 내용은 새 테이블을 만들 때 태그 연결의 Terraform 예시를 참조하세요.

API

테이블 리소스가 정의된 tables.update 메서드를 호출합니다. resource_tags 필드에 태그를 포함합니다.

테이블에 연결된 태그 나열

테이블에 직접 연결된 태그를 나열할 수 있습니다. 이 프로세스는 상위 리소스에서 상속된 태그를 나열하지 않습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트와 데이터 세트를 펼친 후 테이블을 선택합니다.

    태그는 세부정보 탭에 표시됩니다.

bq

bq show 명령어를 사용하고 tags 열을 찾습니다. 테이블에 태그가 없으면 tags 열이 표시되지 않습니다.

bq show \
    PROJECT_ID:DATASET_ID.TABLE_ID

다음을 바꿉니다.

  • PROJECT_ID: 테이블이 포함된 프로젝트의 ID입니다.
  • DATASET_ID: 테이블이 포함된 데이터 세트의 ID입니다.
  • TABLE_ID: 테이블의 ID입니다.

gcloud

리소스에 연결된 태그 binding 목록을 가져오려면 gcloud resource-manager tags bindings list 명령어를 사용합니다.

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

다음을 바꿉니다.

  • RESOURCE_ID: 리소스 유형을 식별하는 API 도메인 이름(//bigquery.googleapis.com/)을 포함한 테이블의 전체 ID입니다. 예를 들면 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table입니다.

  • LOCATION: 데이터 세트 위치입니다.

출력은 다음과 비슷합니다.

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

terraform state show 명령어를 사용하여 resource_tags 필드를 포함한 테이블의 속성을 나열합니다. 테이블의 Terraform 구성 파일이 실행된 디렉터리에서 이 명령어를 실행합니다.

terraform state show google_bigquery_table.default

API

정의된 테이블 리소스를 사용하여 tables.get 메서드를 호출하고 resource_tags 필드를 찾습니다.

INFORMATION_SCHEMA.TABLE_OPTIONS를 사용합니다.

예를 들어 다음 쿼리는 데이터 세트의 모든 테이블에 연결된 모든 태그를 보여줍니다. 이 쿼리는 schema_name(데이터 세트 이름), option_name(항상 'tags'), object_type(항상 ARRAY<STRUCT<STRING, STRING>>), 각 데이터 세트와 연결된 태그를 나타내는 STRUCT 객체의 배열이 포함된 option_value 열이 있는 테이블을 반환합니다. 할당된 태그가 없는 테이블의 경우 option_value 열에서 빈 배열을 반환합니다.

SELECT * from DATASET_ID.INFORMATION_SCHEMA.TABLE_OPTIONS
WHERE option_name='tags'

DATASET_ID를 테이블이 포함된 데이터 세트의 ID로 바꿉니다.

테이블에서 태그 분리

태그 바인딩을 삭제하여 테이블에서 태그 연결을 삭제할 수 있습니다. 태그를 삭제해야 하는 경우 먼저 태그를 분리해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트와 데이터 세트를 펼친 후 테이블을 선택합니다.

  3. 세부정보 탭에서 세부정보 수정을 클릭합니다.

  4. 태그 섹션에서 테이블에서 분리하려는 태그를 삭제합니다.

  5. 저장을 클릭합니다.

bq

테이블에서 일부 태그를 삭제하려면 --remove_tags 플래그와 함께 bq update 명령어를 사용합니다.

bq update \
    --remove_tags=TAG_KEYS \
    PROJECT_ID:DATASET_ID.TABLE_ID

다음을 바꿉니다.

  • TAG_KEYS: 테이블에서 분리할 태그 키이며 쉼표로 구분됩니다. 예를 들면 556741164180/env,myProject/department입니다. 각 태그 키에는 네임스페이스화된 키 이름이 있어야 합니다.
  • PROJECT_ID: 테이블이 포함된 프로젝트의 ID입니다.
  • DATASET_ID: 테이블이 포함된 데이터 세트의 ID입니다.
  • TABLE_ID: 업데이트하려는 테이블의 ID입니다.

테이블에서 모든 태그를 삭제하려면 --clear_all_tags 플래그와 함께 bq update 명령어를 사용합니다.

bq update \
    --clear_all_tags \
    PROJECT_ID:DATASET_ID.TABLE_ID

gcloud

명령줄을 사용하여 테이블에서 태그 연결을 삭제하려면 gcloud resource-manager tags bindings delete 명령어를 사용하여 태그 바인딩을 삭제합니다.

gcloud resource-manager tags bindings delete \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

다음을 바꿉니다.

  • TAGVALUE_NAME: 삭제할 태그 값의 영구 ID 또는 네임스페이스 이름(예: tagValues/4567890123 또는 1234567/my_tag_key/my_tag_value)입니다.
  • RESOURCE_ID: 리소스 유형을 식별하는 API 도메인 이름(//bigquery.googleapis.com/)을 포함한 테이블의 전체 ID입니다. 예를 들면 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table입니다.
  • LOCATION: 데이터 세트 위치입니다.

Terraform

테이블의 resource_tags 필드에서 태그를 삭제한 다음 google_bigquery_table 리소스를 사용하여 업데이트된 구성을 적용합니다.

API

정의된 테이블 리소스를 사용하여 tables.update 메서드를 호출하고 resource_tags 필드에서 태그를 삭제합니다. 모든 태그를 삭제하려면 resource_tags 필드를 삭제합니다.

데이터 세트 태그

다음 섹션에서는 새 데이터 세트와 기존 데이터 세트에 태그를 연결하고, 데이터 세트에 연결된 태그를 나열하고, 데이터 세트에서 태그를 분리하는 방법을 설명합니다.

새 데이터 세트를 만들 때 태그 연결

태그를 만든 후 새 BigQuery 데이터 세트에 연결할 수 있습니다. 지정된 태그 키의 데이터 세트에 태그 값 하나만 연결할 수 있습니다. 데이터 세트에 태그를 최대 50개까지 연결할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 데이터 세트를 만들 프로젝트를 선택합니다.

  3. 작업 보기 > 데이터 세트 만들기를 클릭합니다.

  4. 태그 패널에서 범위 선택을 클릭합니다.

  5. 태그의 범위를 선택합니다.

  6. 데이터 세트에 추가할 태그를 선택하고 추가합니다.

  7. 데이터 세트 만들기를 클릭합니다.

bq

--add_tags 플래그와 함께 bq mk --dataset 명령어를 사용합니다.

bq mk --dataset \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

다음을 바꿉니다.

  • TAG: 새 데이터 세트에 연결할 태그입니다. 태그가 여러 개면 쉼표로 구분합니다. 예를 들면 556741164180/env:prod,myProject/department:sales입니다. 각 태그에는 네임스페이스화된 키 이름 및 값 짧은 이름이 있어야 합니다.
  • PROJECT_ID: 데이터 세트를 만들 프로젝트의 ID입니다.
  • DATASET_ID: 만들려는 새 데이터 세트의 ID입니다.

Terraform

google_bigquery_dataset 리소스를 사용합니다.

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.

다음 예시에서는 my_dataset라는 데이터 세트를 만든 후 resource_tags 필드를 채워 태그를 연결합니다.


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env2"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department2"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "my_dataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  # Attach tags to the dataset
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.

Cloud Shell 준비

  1. Cloud Shell을 실행합니다.
  2. Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.

    이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.

디렉터리 준비

각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.

  1. Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는 .tf 확장자가 있어야 합니다(예: main.tf). 이 튜토리얼에서는 파일을 main.tf라고 합니다.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.

    샘플 코드를 새로 만든 main.tf에 복사합니다.

    필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.

  3. 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
  4. 변경사항을 저장합니다.
  5. Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
    terraform init

    원하는 경우 최신 Google 공급업체 버전을 사용하려면 -upgrade 옵션을 포함합니다.

    terraform init -upgrade

변경사항 적용

  1. 구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
    terraform plan

    필요에 따라 구성을 수정합니다.

  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 Terraform 구성을 적용합니다.
    terraform apply

    Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.

  3. 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.

API

datasets.insert 메서드를 호출하고 resource_tags 필드에 태그를 추가합니다.

기존 데이터 세트에 태그 연결

태그를 만든 후 기존 데이터 세트에 연결할 수 있습니다. 지정된 태그 키의 데이터 세트에 태그 값 하나만 연결할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트를 확장하고 데이터 세트를 선택합니다.

  3. 데이터 세트 정보 섹션에서 세부정보 수정을 클릭합니다.

  4. 태그 섹션에서 데이터 세트에 추가할 태그를 선택합니다.

  5. 저장을 클릭합니다.

bq

--add_tags 플래그와 함께 bq update 명령어를 사용합니다.

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

다음을 바꿉니다.

  • TAG: 데이터 세트에 연결하는 태그입니다. 태그가 여러 개면 쉼표로 구분합니다. 예를 들면 556741164180/env:prod,myProject/department:sales입니다. 각 태그에는 네임스페이스화된 키 이름 및 값 짧은 이름이 있어야 합니다.
  • PROJECT_ID: 기존 데이터 세트가 있는 프로젝트의 ID입니다.
  • DATASET_ID: 기존 데이터 세트의 ID입니다.

gcloud

명령줄을 사용하여 태그를 데이터 세트에 연결하려면 gcloud resource-manager tags bindings create 명령어를 사용하여 태그 binding 리소스를 만듭니다.

gcloud resource-manager tags bindings create \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

다음을 바꿉니다.

  • TAGVALUE_NAME: 연결할 태그 값의 영구 ID 또는 네임스페이스 이름(예: tagValues/4567890123 또는 1234567/my_tag_key/my_tag_value)입니다.
  • RESOURCE_ID: 리소스 유형을 식별하는 API 도메인 이름(//bigquery.googleapis.com/)을 포함한 데이터 세트의 전체 ID입니다. 예를 들면 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset입니다.
  • LOCATION: 데이터 세트 위치입니다.

Terraform

데이터 세트의 resource_tags 필드에 태그를 추가한 다음 google_bigquery_dataset 리소스를 사용하여 업데이트된 구성을 적용합니다. 자세한 내용은 새 데이터 세트를 만들 때 태그 연결의 Terraform 예시를 참조하세요.

API

datasets.get 메서드를 호출하여 resource_tags 필드를 포함한 데이터 세트 리소스를 가져옵니다. resource_tags 필드에 태그를 추가하고 datasets.update 메서드를 사용하여 업데이트된 데이터 세트 리소스를 다시 전달합니다.

데이터 세트에 연결된 태그 나열

다음 단계에서는 데이터 세트에 직접 연결된 태그 binding 목록을 제공합니다. 상위 리소스에서 상속된 태그는 반환되지 않습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트를 확장하고 데이터 세트를 선택합니다.

    태그가 데이터 세트 정보 섹션에 표시됩니다.

bq

데이터 세트에 연결된 태그를 나열하려면 bq show 명령어를 사용합니다.

bq show PROJECT_ID:DATASET_ID

다음을 바꿉니다.

  • PROJECT_ID: 데이터 세트가 포함된 프로젝트의 ID입니다.
  • DATASET_ID: 태그를 나열할 데이터 세트의 ID입니다.

gcloud

리소스에 연결된 태그 binding 목록을 가져오려면 gcloud resource-manager tags bindings list 명령어를 사용합니다.

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

다음을 바꿉니다.

  • RESOURCE_ID: 리소스 유형을 식별하는 API 도메인 이름(//bigquery.googleapis.com/)을 포함한 데이터 세트의 전체 ID입니다. 예를 들면 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset입니다.

  • LOCATION: 데이터 세트 위치입니다.

출력은 다음과 비슷합니다.

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

terraform state show 명령어를 사용하여 resource_tags 필드를 포함한 데이터 세트의 속성을 나열합니다. 데이터 세트의 Terraform 구성 파일이 실행된 디렉터리에서 이 명령어를 실행합니다.

terraform state show google_bigquery_dataset.default

API

datasets.get 메서드를 호출하여 데이터 세트 리소스를 가져옵니다. 데이터 세트 리소스에는 resource_tags 필드의 데이터 세트에 연결된 태그가 포함됩니다.

INFORMATION_SCHEMA.SCHEMATA_OPTIONS를 사용합니다.

예를 들어 다음 쿼리는 한 리전의 모든 데이터 세트에 연결된 모든 태그를 보여줍니다. 이 쿼리는 schema_name(데이터 세트 이름), option_name(항상 'tags'), object_type(항상 ARRAY<STRUCT<STRING, STRING>>), 각 데이터 세트와 연결된 태그를 나타내는 STRUCT 객체의 배열이 포함된 option_value 열이 있는 테이블을 반환합니다. 할당된 태그가 없는 데이터 세트의 경우 option_value 열에서 빈 배열을 반환합니다.

SELECT * from region-REGION.INFORMATION_SCHEMA.SCHEMATA_OPTIONS
WHERE option_name='tags'

다음을 바꿉니다.

  • REGION: 데이터 세트가 있는 리전입니다.

데이터 세트에서 태그 분리

태그 바인딩 리소스를 삭제하여 리소스에서 태그를 분리할 수 있습니다. 태그를 삭제해야 하는 경우 먼저 태그를 분리해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트를 확장하고 데이터 세트를 선택합니다.

  3. 데이터 세트 정보 섹션에서 세부정보 수정을 클릭합니다.

  4. 태그 섹션에서 삭제하려는 태그 옆에 있는 항목 삭제를 클릭합니다.

  5. 저장을 클릭합니다.

bq

--remove_tags 플래그와 함께 bq update 명령어를 사용합니다.

bq update \
    --remove_tags=REMOVED_TAG \
    PROJECT_ID:DATASET_ID

다음을 바꿉니다.

  • REMOVED_TAG: 데이터 세트에서 삭제할 태그입니다. 태그가 여러 개면 쉼표로 구분합니다. 값 쌍이 없는 키만 허용합니다. 예를 들면 556741164180/env,myProject/department입니다. 각 태그에는 네임스페이스화된 키 이름이 있어야 합니다.
  • PROJECT_ID: 데이터 세트가 포함된 프로젝트의 ID입니다.
  • DATASET_ID: 태그를 분리할 데이터 세트의 ID입니다.

또는 데이터 세트에서 모든 태그를 삭제하려면 --clear_all_tags 플래그와 함께 bq update 명령어를 사용합니다.

bq update \
    --clear_all_tags
    PROJECT_ID:DATASET_ID

gcloud

명령줄을 사용하여 데이터 세트에서 태그를 분리하려면 gcloud resource-manager tags bindings delete 명령어를 사용하여 태그 바인딩을 삭제합니다.

gcloud resource-manager tags bindings delete \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

다음을 바꿉니다.

  • TAGVALUE_NAME: 분리할 태그 값의 영구 ID 또는 네임스페이스 이름(예: tagValues/4567890123 또는 1234567/my_tag_key/my_tag_value)입니다.
  • RESOURCE_ID: 리소스 유형을 식별하는 API 도메인 이름(//bigquery.googleapis.com/)을 포함한 데이터 세트의 전체 ID입니다. 예를 들면 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset입니다.
  • LOCATION: 데이터 세트 위치입니다.

Terraform

데이터 세트의 resource_tags 필드에서 태그를 삭제한 다음 google_bigquery_dataset 리소스를 사용하여 업데이트된 구성을 적용합니다.

API

datasets.get 메서드를 호출하여 resource_tags 필드를 포함한 데이터 세트 리소스를 가져옵니다. resource_tags 필드에서 태그를 삭제하고 datasets.update 메서드를 사용하여 업데이트된 데이터 세트 리소스를 다시 전달합니다.

다른 표와 유사한 리소스에 태그 지정

마찬가지로 BigQuery 뷰, 구체화된 뷰, 클론, 스냅샷에 태그를 지정할 수 있습니다.

태그 삭제

테이블, 뷰 또는 데이터 세트에서 참조하는 태그는 삭제할 수 없습니다. 태그 키나 값 자체를 삭제하기 전에 기존 모든 태그 바인딩 리소스를 분리해야 합니다. 태그 키와 태그 값을 삭제하려면 태그 삭제를 참조하세요.

조직의 관리자라고 가정해 보겠습니다. 데이터 분석가는 프로젝트 userData에 대한 BigQuery 데이터 뷰어 IAM 역할이 있는 analysts@example.com 그룹의 모든 구성원입니다. 데이터 분석가 인턴은 채용되며 회사 정책에 따라 userData 프로젝트에서 anonymousData 데이터 세트를 볼 수 있는 권한만 부여받아야 합니다. 태그를 사용하여 액세스를 제어할 수 있습니다.

  1. 키가 employee_type이고 값이 intern태그를 만듭니다.

    태그 키와 값 만들기 예시

  2. Google Cloud Console에서 IAM 페이지로 이동합니다.

    IAM으로 이동

  3. 제한하려는 데이터 세트 액세스 권한이 있는 인턴이 포함된 행을 찾고 이 행에서 주 구성원 수정을 클릭합니다.

  4. 역할 메뉴에서 BigQuery 데이터 뷰어를 선택합니다.

  5. 조건 추가를 클릭합니다.

  6. 제목 필드와 설명 필드에 만들려는 IAM 태그 조건을 설명하는 값을 입력합니다.

  7. 조건 작성 도구 탭에서 추가를 클릭합니다.

  8. 조건 유형 메뉴에서 리소스를 선택한 후 태그를 선택합니다.

  9. 연산자 메뉴에서 값 있음을 선택합니다.

  10. 값 경로 필드에 ORGANIZATION/TAG_KEY/TAG_VALUE 형식으로 태그 값 경로(예: example.org/employee_type/intern)를 입력합니다.

    태그를 사용하는 IAM 조건 예시

    이 IAM 태그 조건은 intern 태그가 있는 데이터 세트에 대한 인턴의 액세스 권한을 제한합니다.

  11. 태그 조건을 저장하려면 저장을 클릭합니다.

  12. 권한 수정 창에서 변경한 모든 사항을 저장하려면 저장을 클릭합니다.

  13. intern 태그 값을 anonymousData 데이터 세트에 연결하려면 명령줄을 사용하여 gcloud resource-manager tags bindings create 명령어를 실행합니다.

    gcloud resource-manager tags bindings create \
    --tag-value=tagValues/4567890123 \
    --parent=//bigquery.googleapis.com/projects/userData/datasets/anonymousData \
    --location=US
    

제한사항

  • BigQuery Omni 테이블, 숨겨진 데이터 세트의 테이블 또는 임시 테이블에는 테이블 태그가 지원되지 않습니다. 또한 BigQuery Omni의 리전 간 쿼리는 다른 리전의 테이블에 대한 액세스 제어 검사 중에 태그를 사용하지 않습니다.

  • 테이블 또는 데이터 세트에 태그를 최대 50개까지 연결할 수 있습니다.

  • 와일드 카드 쿼리에서 참조하는 모든 테이블의 태그 키와 값 집합이 정확히 동일해야 합니다.

  • 데이터 세트 또는 테이블에 대한 조건부 액세스 권한이 있는 사용자는 Google Cloud 콘솔을 통해 해당 리소스에 대한 권한을 수정할 수 없습니다. 권한 수정은 bq 도구 및 BigQuery API를 통해서만 지원됩니다.

  • BigQuery 외부의 일부 서비스는 IAM 태그 조건을 올바르게 확인할 수 없습니다. 태그 조건이 양수인 경우, 즉 리소스에 특정 태그가 있는 경우에만 사용자에게 리소스에 대한 역할이 부여되는 경우, 연결된 태그에 관계없이 리소스에 대한 액세스가 거부됩니다. 태그 조건이 부정인 경우, 즉 해당 리소스에 특정 태그가 없는 경우에만 사용자에게 리소스에 대한 역할이 부여되는 경우에는 태그 조건을 확인하지 않습니다.

    예를 들어 Data Catalog는 BigQuery 데이터 세트 및 테이블의 IAM 태그 조건을 확인할 수 없습니다. employee_type=intern 태그가 있는 데이터 세트에 대한 BigQuery 데이터 뷰어 역할을 인턴에게 부여하는 조건부 IAM 정책이 있다고 가정해 보겠습니다. 양수 태그 조건이므로 데이터 세트에 employee_type=intern 태그가 있어도 인턴이 Data Catalog에서 검색하여 데이터 세트를 볼 수 없습니다. 태그 조건이 부정으로 변경되어 인턴 직원이 employee_type=intern 태그가 없는 데이터 세트만 볼 수 있다면, 확인을 완전히 건너뛰게 되고 인턴은 평소에는 BigQuery에서 액세스할 수 없었던 데이터 세트를 볼 수 있게 됩니다.

다음 단계