테이블 및 뷰에 대한 액세스 제어

이 문서에서는 BigQuery 테이블 ACL을 사용하여 테이블 및 뷰에 대한 액세스를 제어하는 방법을 설명합니다. BigQuery 테이블 ACL의 개요는 테이블 액세스 제어 소개를 참조하세요.

테이블 또는 보기를 만든 후에는 다음과 같은 방법으로 정책을 설정할 수 있습니다.

  • Cloud Console 사용
  • bq set-iam-policy 명령어 사용
  • tables.setIamPolicy 메서드 호출

BigQuery 테이블 ACL을 사용하여 논리 보기와 데이터 세트 수준의 승인된 보기 모두에 대한 액세스를 설정할 수 있습니다. 또한 논리적 보기는 BigQuery 테이블 ACL을 사용하여 공유한 다른 소스 테이블 및 보기를 참조할 수 있습니다.

시작하기 전에

  1. BigQuery 테이블 ACL과 함께 사용할 테이블 또는 보기를 만듭니다.

  2. 이 주제의 단계를 수행할 사람에게 BigQuery 데이터 소유자 (roles/bigquery.dataOwner) 역할 또는 BigQuery 관리자(roles/bigquery.admin) 역할을 부여합니다.

  3. Identity and Access Management(IAM) 정책에 대한 자세한 내용은 정책 이해정책 참조 주제를 참조하세요.

액세스 정책 만들기

테이블 또는 보기에 대한 액세스 정책을 만들려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 BigQuery 페이지를 엽니다.

    Cloud Console로 이동

  2. 탐색기 패널에서 프로젝트를 선택합니다.

  3. 테이블 또는 보기가 포함된 데이터 세트를 선택합니다.

  4. 테이블 또는 보기를 선택합니다.

  5. 테이블의 액세스 권한을 수정하는 경우 테이블 공유를 클릭합니다. 보기에 대한 액세스 권한을 수정하는 경우 보기 공유를 클릭합니다.

  6. 테이블 권한 또는 보기 권한 페이지가 열립니다. 구성원 추가에서 테이블 또는 보기에 대한 액세스 권한을 받을 사용자의 이메일 주소를 입력합니다.

  7. 역할 선택 드롭다운에서 사용자에게 부여할 역할을 선택합니다. 다음은 joe@example.com를 BigQuery 데이터 뷰어(roles/bigquery.dataViewer) 역할에 부여하는 방법을 보여줍니다.

    테이블 권한

  8. 완료를 클릭합니다.

bq

  1. 기존 정책을 로컬 파일로 가져옵니다.

    bq get-iam-policy \
     project-id:dataset.table_or_view \
     > policy.json
    

    각 항목의 의미는 다음과 같습니다.

    • project-id는 프로젝트 ID입니다.
    • dataset는 업데이트할 리소스(테이블 또는 뷰)가 포함된 데이터 세트의 이름입니다.
    • table_or_view는 업데이트할 리소스의 이름입니다.

    테이블 또는 뷰를 식별하고 정책 출력을 파일로 리디렉션하는 또 다른 예시는 다음과 같습니다.

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. 정책에 구성원을 아직 추가하지 않은 경우 policy.json 파일에 etag 값이 포함되고 다른 필드는 포함되지 않습니다. policy.json 파일의 형식을 지정하는 방법에 대한 자세한 내용은 정책 이해를 참조하세요.

  3. 첫 번째 구성원을 추가하려면 정책에 bindings 필드를 추가합니다. 예를 들어 joe@example.com에 BigQuery 데이터 뷰어(roles/bigquery.dataViewer) 역할을 부여하려면 다음 안내를 따르세요.

    "bindings": [
     {
       "members": [
         "user:joe@example.com"
       ],
       "role": "roles/bigquery.dataViewer"
     }
    ]
    

    기존 바인딩에 구성원을 더 추가해야 하는 경우 구성원을 추가하면 됩니다. 이 예시에서는 jane@example.com에 이미 존재하는 결합에 대한 BigQuery 데이터 뷰어(roles/bigquery.dataViewer) 역할을 부여하는 방법을 보여줍니다.

    "members": [
           "user:joe@example.com",
           "user:jane@example.com"
         ],
         "role": "roles/bigquery.dataViewer"
       }
    
  4. 정책을 업데이트합니다.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

    IAM 정책 스키마 버전에 대한 자세한 내용은 정책 버전을 참조하세요.

API

  1. tables.getIamPolicy를 호출하여 현재 정책을 검색합니다.

  2. 정책을 수정하여 구성원 또는 결합을 추가합니다. 정책 형식은 bq 예시를 참조하세요.

  3. tables.setIamPolicy를 호출하여 새 정책을 작성합니다.

IAM 정책 스키마 버전에 대한 자세한 내용은 정책 버전을 참조하세요.

자바

이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

// Sample to create iam policy for table
public class CreateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    createIamPolicy(datasetName, tableName);
  }

  public static void createIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      policy
          .toBuilder()
          .addIdentity(Role.of("roles/bigquery.dataViewer"), Identity.allUsers())
          .build();
      bigquery.setIamPolicy(tableId, policy);
      System.out.println("Iam policy created successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not created. \n" + e.toString());
    }
  }
}

액세스 정책 업데이트

테이블 또는 보기에 대한 액세스 정책을 업데이트하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 BigQuery 페이지를 엽니다.

    Cloud Console로 이동

  2. 탐색기 패널에서 프로젝트를 선택합니다.

  3. 테이블 또는 보기가 포함된 데이터 세트를 선택합니다.

  4. 테이블 또는 보기를 선택합니다.

  5. 테이블의 액세스 권한을 수정하는 경우 테이블 공유를 클릭합니다. 보기에 대한 액세스 권한을 수정하는 경우 보기 공유를 클릭합니다.

  6. 테이블 권한 또는 보기 권한 페이지가 열립니다.

    • 새 구성원을 추가하려면 액세스 정책 만들기에 표시된 것과 동일한 기술을 사용하세요.

    • 사용자의 액세스 권한을 삭제하려면 구성원 검색 필드를 사용하여 사용자를 검색하세요. 사용자를 삭제할 그룹마다 그룹을 펼친 다음 해당 사용자의 삭제 버튼을 클릭합니다.

    • 사용자의 그룹 회원을 변경하려면 바로 위 2개 단계에서 설명하는 내용대로 추가하거나 삭제합니다.

  7. 액세스 권한을 추가, 수정 또는 삭제하려는 다른 사용자에 대해 필요에 따라 반복합니다. 완료되면 완료를 클릭합니다.

bq

  1. 기존 정책을 로컬 파일로 가져옵니다.

    bq get-iam-policy --format=prettyjson \
     project-id:dataset.table_or_view \
     > policy.json
    

    각 항목의 의미는 다음과 같습니다.

    • project-id는 프로젝트 ID입니다.
    • dataset는 업데이트할 테이블이 포함되어 있는 데이터 세트의 이름입니다.
    • table_or_view는 업데이트할 테이블 또는 보기의 이름입니다.

    테이블 또는 뷰를 식별하고 정책 출력을 파일로 리디렉션하는 또 다른 예시는 다음과 같습니다.

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. 필요에 따라 정책.json을 수정합니다.

    policy.json 파일의 형식을 지정하는 방법에 대한 자세한 내용은 정책 이해를 참조하세요.

    IAM 정책 스키마 버전에 대한 자세한 내용은 정책 버전을 참조하세요.

  3. 정책을 업데이트합니다.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

API

  1. tables.getIamPolicy를 호출하여 현재 정책을 검색합니다.

  2. 정책을 수정하여 구성원 또는 결합을 추가합니다.

    정책에 필요한 형식은 정책 참조 주제를 참조하세요.

  3. tables.setIamPolicy를 호출하여 업데이트된 정책을 작성합니다.

자바

이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

// Sample to update iam policy in table
public class UpdateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    updateIamPolicy(datasetName, tableName);
  }

  public static void updateIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      Map<Role, Set<Identity>> binding = new HashMap<>(policy.getBindings());
      binding.remove(Role.of("roles/bigquery.dataViewer"));

      policy.toBuilder().setBindings(binding).build();
      bigquery.setIamPolicy(tableId, policy);

      System.out.println("Iam policy updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not updated. \n" + e.toString());
    }
  }
}

Identity and Access Management 정책에 대한 자세한 내용은 정책 이해정책 참조 주제를 참조하세요.

다음 단계

  • FAQ를 읽어보세요.
  • 감사 로깅에서 BigQuery 테이블 ACL 관리자 활동의 감사 로깅에 대해 알아보세요.