承認済みビューを作成および管理する

このドキュメントでは、Google Cloud CLI または Google Cloud コンソールを使用して、承認済みビューを定義、作成し、その他の管理オペレーション を実行する方法について説明します。このドキュメントを読む前に、 承認済みビューの概要をよく理解しておく必要があります。

必要なロール

承認済みビューに対して管理オペレーションを実行するために必要な権限を取得するには、基盤となるテーブルに対する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 管理をご覧ください。

Google Cloud

承認済みビューを作成する

承認済みビューを作成するときは、実行するクエリを考慮してください。承認済みビューに送信される読み取り、書き込み、削除リクエストでは、承認済みビュー内のデータのみを参照する必要があります。つまり、たとえば、承認済みビューにないテーブル内の列を含む行の読み取り、書き込み、削除を試行すると、リクエストは失敗することを意味します。

承認済みビューにない列がテーブルに追加されたことで承認済みビューへのデータ リクエストが失敗する状況を回避するには、列ファミリーに空の列修飾子接頭辞の接頭辞 "" を指定します。

承認済みビューごとに、最大 100 個の定義パラメータを指定できます。

コンソール

  1. コンソールで Bigtable インスタンスのリストを開きます。 Google Cloud

    インスタンスのリストを開く

  2. 承認済みビューを作成するテーブルを含むインスタンスをクリックします。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. [ビルダー] をクリックして、クエリビルダーを開きます。

  5. 承認済みビューを作成するテーブルを選択します。

  6. 承認済みビューのユーザーがアクセスできるデータのみを返すクエリを作成する句を追加します。

    • 承認済みビューで使用できる句は、行キー接頭辞 (列修飾子)です。
    • 列修飾子接頭辞を指定するには、接頭辞の後にアスタリスクを追加します。たとえば、「data」で始まるすべての列を含めるには、列ファミリー名の後の [] フィールドに data* と入力します。
    • 承認済みビューを保存すると、Limit 句は無視されます。
    • クエリビルダーの使用方法については、コンソールでクエリを作成する をご覧ください
  7. [実行] をクリックします。

  8. 結果ペインに承認済みビューに含めるデータが表示されていることを確認したら、[ビューとして保存] をクリックします。

  9. テーブルでまだ使用されていない承認済みビューの永続的な識別子を入力します。

  10. 省略可: アクセス権を付与せずに保存するには、[保存] をクリックします。

  11. 省略可: 承認済みビューを保存してアクセス権を構成するには、[保存してアクセス権を付与] をクリックします。アクセス制御の詳細については、IAM を使用した Bigtable のアクセス制御をご覧ください。

    1. 少なくとも 1 つのプリンシパルを追加し、そのプリンシパルまたはプリンシパルのグループに割り当てるロールを選択します。
    2. 省略可: 追加のロールのアクセス権を付与するには、[別のロールを追加] をクリックし、追加のロールごとにプリンシパルとロールを入力します。
    3. [保存] をクリックします。

gcloud

bigtable authorized-views create コマンドを実行します。詳細については、 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());
}

承認済みビューを変更する

コンソール

  1. コンソールで Bigtable インスタンスのリストを開きます。 Google Cloud

    インスタンスのリストを開く

  2. 承認済みビューを含むインスタンスをクリックします。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. エクスプローラで、テーブルと [承認済みビュー] を開きます。

  5. 変更する承認済みビューの横にある more_vert 操作メニューをクリックし、 [開く] をクリックします。

  6. 承認済みビューのユーザーがアクセスできるデータのみを返すクエリを作成する句を変更または追加します。

    • 承認済みビューで使用できる句は、行キー接頭辞 (列修飾子)です。
    • 列修飾子接頭辞を指定するには、接頭辞の後にアスタリスクを追加します。たとえば、「data」で始まるすべての列を含めるには、列ファミリー名の後の [] フィールドに data* と入力します。
    • 承認済みビューを保存すると、Limit 句は無視されます。
    • クエリビルダーの使用方法については、コンソールでクエリを作成する をご覧ください
  7. [実行] をクリックします。

  8. 結果ペインに承認済みビューに含めるデータが表示されていることを確認したら、[ビューとして保存] をクリックします。

  9. ダイアログで、変更した承認済みビューの ID を入力します。

    ダイアログに、既存の承認済みビューを上書きする警告メッセージが表示されます。

  10. 省略可: アクセス権を付与せずに保存するには、[保存] をクリックします。

  11. 省略可: 承認済みビューを保存してアクセス権を構成するには、[保存してアクセス権を付与] をクリックします。アクセス制御の詳細については、IAM を使用した Bigtable のアクセス制御をご覧ください。

    1. 少なくとも 1 つのプリンシパルを追加し、そのプリンシパルまたはプリンシパルのグループに割り当てるロールを選択します。
    2. 省略可: 追加のロールのアクセス権を付与するには、[別のロールを追加] をクリックし、追加のロールごとにプリンシパルとロールを入力します。
    3. [保存] をクリックします。

gcloud

bigtable authorized-views update コマンドを使用して、承認済みビューを変更します。詳細については、 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 でエディタが開き、値の入力を求められます。

省略可: 現在の承認済みビューの構造と、更新が commit された後の違いを示す確認プロンプトが 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());
}

削除からの保護を有効または無効にする

承認済みビューの削除からの保護を有効にするには、承認済みビューを定義する JSON ファイルを変更して、deletionProtection フラグを true に設定します。

削除からの保護を無効にするには、承認済みビューを定義する JSON ファイルを変更して、deletionProtection フラグを false に設定します。

更新された JSON ファイルの名前を指定して bigtable authorized-views update コマンドを実行し、承認済みビューへの変更を確定します。詳細については、 gcloud bigtable authorized-views update のリファレンス ドキュメントをご覧ください。

承認済みビューを削除する

テーブルを削除すると、そのテーブルの承認済みビューもすべて削除されます。

承認済みビューを削除すると、削除を取り消すことはできません。ただし、テーブルを削除してから削除を取り消すと、テーブルとともにテーブルの承認済みビューがすべて復元されます。その後、承認済みビューとテーブルの IAM を再構成する必要があります。詳細については、テーブルの削除を取り消す をご覧ください

コンソール

  1. コンソールで Bigtable インスタンスのリストを開きます。 Google Cloud

    インスタンスのリストを開く

  2. 承認済みビューを含むインスタンスをクリックします。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. エクスプローラで、テーブルと [承認済みビュー] を開きます。

  5. 削除する承認済みビューの横にある more_vert操作メニューをクリックし、 [削除] をクリックします。

gcloud

bigtable instances tables authorized-views delete コマンドを使用して、承認済みビューを削除します。詳細については、 gcloud bigtable 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());
}

テーブルの承認済みビューのリストを取得する

コンソール

  1. コンソールで Bigtable インスタンスのリストを開きます。 Google Cloud

    インスタンスのリストを開く

  2. 承認済みビューを含むインスタンスをクリックします。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. エクスプローラで、テーブルと [承認済みビュー] を開きます。

gcloud

bigtable authorized-views list コマンドを実行します。詳細については、 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());
}

承認済みビューの詳細を表示する

コンソール

  1. コンソールで Bigtable インスタンスのリストを開きます。 Google Cloud

    インスタンスのリストを開く

  2. 承認済みビューを含むインスタンスをクリックします。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. エクスプローラで、テーブルと [承認済みビュー] を開きます。

  5. 表示する承認済みビューの横にある more_vert 操作メニューをクリックし、 [開く] をクリックします。

gcloud

承認済みビューの詳細を取得するには、bigtable instances tables authorized-views describe コマンドを実行します。詳細については、 gcloud bigtable authorized-views describe のリファレンス ドキュメントをご覧ください。

gcloud bigtable authorized-views describe \
–-instance=INSTANCE_ID \
–-table=TABLE_ID \
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());
}

承認済みビューへのアクセス権を付与する

アクセス制御の詳細については、IAM を使用した Bigtable のアクセス制御 をご覧ください。

コンソール

  1. コンソールで Bigtable インスタンスのリストを開きます。 Google Cloud

    インスタンスのリストを開く

  2. 承認済みビューを含むインスタンスをクリックします。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. エクスプローラ ペインで、テーブルと [承認済みビュー] を開きます。

  5. 承認済みビュー名の横にある more_vert 操作メニューをクリックし、 [アクセス権を付与] をクリックします。

  6. 少なくとも 1 つのプリンシパルを追加し、そのプリンシパルまたはプリンシパルのグループに割り当てるロールを選択します。

  7. 省略可: 追加のロールのアクセス権を付与するには、[別のロールを追加] をクリックし、追加のロールごとにプリンシパルとロールを入力します。

  8. [保存] をクリックします。

gcloud

承認済みビューへのアクセス権を付与するには、bigtable authorized-views add-iam-policy-binding コマンドを使用します。詳細については、 gcloud bigtable authorized-views add-iam-policy-binding のリファレンス ドキュメントをご覧ください。

gcloud bigtable authorized-views add-iam-policy-binding AUTH_VIEW_ID \
--instance=INSTANCE_ID --table=TABLE_ID \
--member=PRINCIPAL --role=ROLE

次のように置き換えます。

  • AUTH_VIEW_ID: 承認済みビューの ID
  • TABLE_ID: 承認済みビューのテーブルの ID
  • INSTANCE_ID: テーブルを含むインスタンス
  • PRINCIPAL: アクセス権を付与するプリンシパル(ユーザー)(user:222larabrown@gmail.com など)
  • ROLE: 付与するロール(roles/bigtable.reader など)。

次のステップ