승인된 뷰 만들기 및 관리

이 문서에서는 Google Cloud CLI를 사용하여 승인된 뷰에서 다른 관리 작업을 정의, 생성, 수행하는 방법을 설명합니다. 이 문서를 읽기 전에 승인된 뷰 개요를 숙지해야 합니다.

필요한 역할

승인된 뷰에서 관리 작업을 수행하는 데 필요한 권한을 얻으려면 관리자에게 기본 테이블에 대한 Bigtable 관리자(roles/bigtable.admin) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이 사전 정의된 역할에는 승인된 뷰에서 관리 작업을 수행하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

승인된 뷰에서 관리 작업을 수행하려면 다음 권한이 필요합니다.

  • bigtable.authorizedViews.get
  • bigtable.authorizedViews.list
  • bigtable.authorizedViews.create
  • bigtable.authorizedViews.update
  • bigtable.authorizedViews.delete
  • bigtable.authorizedViews.getIamPolicy
  • bigtable.authorizedViews.setIamPolicy
  • bigtable.authorizedViews.readRows
  • bigtable.authorizedViews.sampleRowKeys
  • bigtable.authorizedViews.mutateRows

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

승인된 뷰 수준에서 Bigtable IAM 역할을 관리하는 방법은 승인된 뷰 수준 IAM 관리를 참조하세요.

승인된 뷰 만들기

승인된 뷰를 만들 때는 승인된 뷰를 대상으로 실행할 쿼리를 고려해야 합니다. 승인된 뷰로 전송되는 읽기, 쓰기, 삭제 요청은 승인된 뷰에 있는 데이터만 참조해야 합니다. 예를 들어 테이블에서 승인된 뷰에 없는 열의 행을 읽거나 쓰거나 삭제하려고 하면 요청이 실패합니다.

승인된 뷰에 없는 테이블에 열이 추가되어 승인된 뷰에 대한 데이터 요청이 실패하는 상황을 방지하려면 column family에 빈 column qualifier 프리픽스("")를 지정하면 됩니다.

승인된 뷰당 최대 100개의 정의 매개변수를 지정할 수 있습니다.

gcloud

bigtable authorized-views create 명령어를 실행합니다.

gcloud bigtable authorized-views create AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID \
  --definition-file=DEFINITION_FILE_PATH

다음을 바꿉니다.

  • AUTHORIZED_VIEW_ID: 테이블에 아직 사용되지 않는 승인된 뷰의 영구 식별자
  • INSTANCE_ID: 테이블을 포함하는 인스턴스의 영구 식별자
  • TABLE_ID: 승인된 뷰를 만드는 테이블의 영구 식별자
  • DEFINITION_FILE_PATH: 승인된 뷰의 유효한 JSON 형식 표현의 경로 올바른 형식의 정의 파일 예시는 정의 파일 예시를 참조하세요.

정의 파일을 제공하지 않고 명령어를 실행할 수도 있습니다. 이 경우 gcloud CLI가 편집기를 열고 값을 입력하라는 메시지를 표시합니다.

승인된 뷰가 생성되었는지 확인하려면 테이블에서 승인된 뷰 목록을 가져옵니다.

Java

Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.

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

try {
  CreateAuthorizedViewRequest request =
      CreateAuthorizedViewRequest.of(tableId, authorizedViewId)
          .setAuthorizedViewType(
              SubsetView.create()
                  .addRowPrefix("")
                  .setFamilySubsets(
                      COLUMN_FAMILY,
                      FamilySubsets.create().addQualifierPrefix(COLUMN_QUALIFIER_NAME)));
  AuthorizedView authorizedView = adminClient.createAuthorizedView(request);
  System.out.printf("AuthorizedView: %s created successfully%n", authorizedView.getId());
} catch (NotFoundException e) {
  System.err.println(
      "Failed to create an authorized view from a non-existent table: " + e.getMessage());
}

승인된 뷰 수정

gcloud

bigtable authorized-views update 명령어를 사용하여 승인된 뷰를 수정합니다.

gcloud bigtable authorized-views update AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID \
  --definition-file=DEFINITION_FILE_PATH

다음을 바꿉니다.

  • AUTHORIZED_VIEW_ID: 승인된 뷰의 영구 식별자
  • INSTANCE_ID: 인스턴스의 영구 식별자
  • TABLE_ID: 소스 테이블의 영구 식별자
  • DEFINITION_FILE_PATH: 승인된 뷰의 유효한 JSON 형식 표현의 경로 올바른 형식의 정의 파일 예시는 정의 파일 예시를 참조하세요.

정의 파일을 제공하지 않고 명령어를 실행할 수도 있습니다. 이 경우 gcloud CLI가 편집기를 열고 값을 입력하라는 메시지를 표시합니다.

선택사항: gcloud CLI가 현재 승인된 뷰 구조와 업데이트가 커밋된 후 차이를 보여주는 확인 메시지를 표시하지 않도록 하려면 명령어에 --no-interactive 플래그를 추가합니다.

Java

Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.

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

try {
  // Update to an authorized view permitting everything.
  UpdateAuthorizedViewRequest request =
      UpdateAuthorizedViewRequest.of(tableId, authorizedViewId)
          .setAuthorizedViewType(
              SubsetView.create()
                  .addRowPrefix("")
                  .setFamilySubsets(
                      COLUMN_FAMILY, FamilySubsets.create().addQualifierPrefix("")));
  AuthorizedView authorizedView = adminClient.updateAuthorizedView(request);
  System.out.printf("AuthorizedView: %s updated successfully%n", authorizedView.getId());
} catch (NotFoundException e) {
  System.err.println("Failed to modify a non-existent authorized view: " + e.getMessage());
}

삭제 보호 사용 설정 또는 사용 중지

승인된 뷰에 대해 삭제 보호를 사용 설정하려면 업데이트 명령어에 --deletion-protection을 추가합니다.

삭제 보호를 사용 중지하려면 업데이트 명령어에 no-deletion-protection을 추가합니다.

승인된 뷰 삭제

테이블을 삭제하면 테이블의 모든 승인된 뷰도 삭제됩니다.

승인된 뷰를 삭제하면 이를 삭제 취소할 수 없습니다. 그러나 테이블을 삭제한 다음 테이블을 삭제 취소하면 테이블의 모든 승인된 뷰가 테이블과 함께 복원됩니다. 그런 다음 승인된 뷰와 테이블에 대해 IAM을 다시 구성해야 합니다. 자세한 내용은 테이블 삭제 취소를 참조하세요.

gcloud

bigtable instances tables authorized-views delete 명령어를 사용하여 승인된 뷰를 삭제합니다.

gcloud bigtable authorized-views delete AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID

다음을 바꿉니다.

  • AUTHORIZED_VIEW_ID: 승인된 뷰의 영구 식별자
  • INSTANCE_ID: 인스턴스의 영구 식별자
  • TABLE_ID: 소스 테이블의 영구 식별자

선택사항: gcloud CLI가 삭제를 확인하거나 취소하라는 확인 메시지를 표시하지 않도록 하려면 명령어에 --nointeractive 플래그를 추가합니다.

Java

Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.

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

try {
  adminClient.deleteAuthorizedView(tableId, authorizedViewId);
  System.out.printf("AuthorizedView: %s deleted successfully%n", authorizedViewId);
} catch (NotFoundException e) {
  System.err.println("Failed to delete a non-existent authorized view: " + e.getMessage());
}

테이블의 승인된 뷰 목록 가져오기

gcloud

bigtable authorized-views list 명령어를 실행합니다.

gcloud bigtable authorized-views list \
  --instance=INSTANCE_ID \
  --table=TABLE_ID

다음을 바꿉니다.

  • INSTANCE_ID: 인스턴스의 영구 식별자
  • TABLE_ID: 테이블의 영구 식별자

Java

Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.

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

List<String> authorizedViewIds = new ArrayList<>();
try {
  authorizedViewIds = adminClient.listAuthorizedViews(tableId);
  for (String authorizedViewId : authorizedViewIds) {
    System.out.println(authorizedViewId);
  }
} catch (NotFoundException e) {
  System.err.println(
      "Failed to list authorized views from a non-existent table: " + e.getMessage());
}

승인된 뷰 세부정보 보기

gcloud

승인된 뷰에 대한 세부정보를 가져오려면 bigtable instances tables authorized-views describe 명령어를 실행합니다.

gcloud bigtable authorized-views describe \
–-instance=INSTANCE_ID \
–-table=TABLE_ID \
–-view=AUTHORIZED_VIEW_ID

다음을 바꿉니다.

  • INSTANCE_ID: 인스턴스의 영구 식별자
  • TABLE_ID: 테이블의 영구 식별자
  • AUTHORIZED_VIEW_ID: 승인된 뷰의 영구 식별자

Java

Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.

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

AuthorizedView authorizedView = null;
try {
  authorizedView = adminClient.getAuthorizedView(tableId, authorizedViewId);
  SubsetView subsetView = (SubsetView) authorizedView.getAuthorizedViewType();

  for (ByteString rowPrefix : subsetView.getRowPrefixes()) {
    System.out.printf("Row Prefix: %s%n", rowPrefix.toStringUtf8());
  }
  for (Map.Entry<String, FamilySubsets> entry : subsetView.getFamilySubsets().entrySet()) {
    for (ByteString qualifierPrefix : entry.getValue().getQualifierPrefixes()) {
      System.out.printf(
          "Column Family: %s, Qualifier Prefix: %s%n",
          entry.getKey(), qualifierPrefix.toStringUtf8());
    }
    for (ByteString qualifier : entry.getValue().getQualifiers()) {
      System.out.printf(
          "Column Family: %s, Qualifier: %s%n", entry.getKey(), qualifier.toStringUtf8());
    }
  }
} catch (NotFoundException e) {
  System.err.println(
      "Failed to retrieve metadata from a non-existent authorized view: " + e.getMessage());
}

다음 단계