建立及管理授權檢視表

本文說明如何使用 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 管理

建立授權檢視表

建立授權檢視表時,請考量將對其執行的查詢。傳送至授權檢視區塊的讀取、寫入和刪除要求,只能參照授權檢視區塊中的資料。舉例來說,如果您嘗試讀取、寫入或刪除資料列,但該資料列在資料表中的某些資料欄不在授權檢視畫面中,要求就會失敗。

為避免因資料表新增資料欄,導致授權檢視畫面無法處理資料要求,您可以為資料欄系列指定空白的資料欄限定符前置字元「」。

每個授權檢視最多可指定 100 個定義參數。

控制台

  1. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下含有您要授權檢視資料表的執行個體。

  3. 在導覽窗格中,按一下「Bigtable Studio」

  4. 按一下「建構工具」開啟查詢建構工具。

  5. 選擇要授權檢視的資料表。

  6. 新增子句,建構查詢,只傳回您希望授權檢視使用者存取的資料。

    • 授權 view 可接受的子句為資料列索引鍵前置字串資料欄 (資料欄限定詞)。
    • 如要指定資料欄限定符前置字串,請在前置字串後加上星號。舉例來說,如要納入所有以「data」開頭的資料欄,請在資料欄系列名稱後方的「資料欄」欄位中輸入 data*
    • 儲存授權 view 時,系統會忽略 LIMIT 子句。
    • 如要進一步瞭解如何使用查詢產生器,請參閱「在控制台中建立查詢」。
  7. 按一下「執行」

  8. 確認結果窗格顯示的資料應納入授權檢視區後,請按一下「另存為檢視區」

  9. 輸入授權檢視區塊的永久 ID,該 ID 目前未用於資料表。

  10. 選用:如要在不授予存取權的情況下儲存,請按一下「儲存」

  11. 選用:如要儲存授權檢視表,然後設定存取權,請按一下「儲存並授予存取權」。如要進一步瞭解存取權控管,請參閱「使用 IAM 控管 Bigtable 存取權」。

    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:授權檢視區塊的永久 ID,不得已用於資料表
  • INSTANCE_ID:包含資料表的執行個體永久 ID
  • TABLE_ID:您要建立授權檢視區塊的資料表永久 ID
  • DEFINITION_FILE_PATH:授權檢視畫面的有效 JSON 格式表示法路徑。如需格式正確的定義檔案範例,請參閱「定義檔案範例」。

您也可以執行指令,不必提供定義檔。在本例中,gcloud CLI 會開啟編輯器,並提示您輸入值。

如要確認授權檢視表已建立,請取得資料表的授權檢視表清單

Java

如要瞭解如何安裝及使用 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. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下包含授權檢視區塊的執行個體。

  3. 在導覽窗格中,按一下「Bigtable Studio」

  4. 在檔案總管中,展開資料表和「已授權檢視表」

  5. 在要修改的授權檢視畫面旁,按一下 more_vert 動作選單,然後點選「開啟」

  6. 修改或新增子句,建構查詢,只傳回您希望授權檢視使用者存取的資料。

    • 授權 view 可接受的子句為資料列索引鍵前置字串資料欄 (資料欄限定詞)。
    • 如要指定資料欄限定符前置字串,請在前置字串後加上星號。舉例來說,如要納入所有以「data」開頭的資料欄,請在資料欄系列名稱後方的「資料欄」欄位中輸入 data*
    • 儲存授權 view 時,系統會忽略 LIMIT 子句。
    • 如要進一步瞭解如何使用查詢產生器,請參閱「在控制台中建立查詢」。
  7. 按一下「執行」

  8. 確認結果窗格顯示的資料應納入授權檢視區後,請按一下「另存為檢視區」

  9. 在對話方塊中,輸入您修改的授權檢視 ID。

    對話方塊會顯示警告訊息,指出您即將覆寫現有的授權檢視畫面。

  10. 選用:如要在不授予存取權的情況下儲存,請按一下「儲存」

  11. 選用:如要儲存授權檢視表,然後設定存取權,請按一下「儲存並授予存取權」。如要進一步瞭解存取權控管,請參閱「使用 IAM 控管 Bigtable 存取權」。

    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:授權檢視區塊的永久 ID
  • INSTANCE_ID:執行個體的永久 ID
  • TABLE_ID:來源資料表的永久 ID
  • DEFINITION_FILE_PATH:授權檢視畫面有效 JSON 格式表示法的路徑。如需格式正確的定義檔案範例,請參閱「定義檔案範例」。

您也可以執行指令,不必提供定義檔。在本例中,gcloud CLI 會開啟編輯器,並提示您輸入值。

選用:如要避免 gcloud CLI 顯示確認提示,說明目前授權檢視結構與更新後結構的差異,請在指令中附加 --no-interactive 標記。

Java

如要瞭解如何安裝及使用 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

如要停用刪除保護機制,請將 deletionProtection 旗標設為 false,藉此修改定義授權檢視區塊的 JSON 檔案。

執行 bigtable authorized-views update 指令,並提供更新後的 JSON 檔案名稱,即可完成授權檢視表的變更。詳情請參閱 gcloud bigtable authorized-views update 參考說明文件。

刪除授權檢視表

刪除資料表時,系統也會一併刪除該資料表的所有授權檢視畫面。

授權檢視區刪除後就無法復原。不過,如果您刪除資料表,然後取消刪除,系統會連同資料表一併還原所有授權檢視畫面。然後您必須重新設定授權檢視區塊和資料表的 IAM。詳情請參閱「取消刪除資料表」。

控制台

  1. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  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:授權檢視區塊的永久 ID
  • INSTANCE_ID:執行個體的永久 ID
  • TABLE_ID:來源資料表的永久 ID

選用:如要避免 gcloud CLI 顯示確認提示,要求您確認或取消刪除作業,請在指令中附加 --nointeractive 旗標。

Java

如要瞭解如何安裝及使用 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. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  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:執行個體的永久 ID
  • TABLE_ID:資料表的永久 ID

Java

如要瞭解如何安裝及使用 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. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  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:執行個體的永久 ID
  • TABLE_ID:資料表的永久 ID
  • AUTHORIZED_VIEW_ID:授權檢視區塊的永久 ID

Java

如要瞭解如何安裝及使用 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. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下包含授權檢視區塊的執行個體。

  3. 在導覽窗格中,按一下「Bigtable Studio」

  4. 在「Explorer」窗格中,展開資料表和「Authorized views」(已授權檢視表)

  5. 在授權檢視名稱旁,按一下 more_vert 動作選單,然後點選「授予存取權」

  6. 新增至少一個主體,並選取要指派給該主體或主體群組的角色。

  7. 選用:如要授予其他角色的存取權,請按一下「新增其他角色」,然後輸入每個其他角色的主體和角色。

  8. 按一下 [儲存]

gcloud

如要授予授權 view 的存取權,請使用 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

後續步驟