管理 IAM 驗證

本頁說明如何準備 AlloyDB for PostgreSQL 執行個體,以便使用 Identity and Access Management (IAM) 進行資料庫驗證。

IAM 驗證功能可輔助透過標準 PostgreSQL 使用者進行的資料庫驗證,所有 AlloyDB 叢集都支援這項功能。

您可以透過個別帳戶或群組進行驗證:

  • 個別帳戶:將每個 IAM 使用者或服務帳戶新增至叢集。您可以使用 IAM 或 PostgreSQL 使用者角色,向該叢集進行驗證。
  • 群組:將 IAM 群組新增至叢集。該群組的所有成員 (使用者和服務帳戶) 都會繼承驗證權限。這樣一來,您就能透過管理群組成員來管理存取權,而不必將每位成員逐一新增至叢集。

AlloyDB 執行個體預設會停用 IAM 驗證。

如要使用 IAM 驗證,請完成下列一般步驟:

  1. 在執行個體上啟用 IAM 個人或群組驗證
  2. 將必要角色授予帳戶或群組。
  3. 將帳戶或群組新增至叢集。
  4. 將資料庫權限授予帳戶或群組。

啟用及停用 IAM 驗證

如要在執行個體上啟用 IAM 驗證,請設定資料庫旗標。

如要停用 IAM 驗證,請將旗標設為 off

如要進一步瞭解如何設定旗標,請參閱「設定執行個體的資料庫旗標」。

授予個人帳戶存取權

如要為新的資料庫使用者啟用 IAM 存取權,請按照下列步驟操作:

  1. 更新專案的 IAM 設定,授予適當的 IAM 使用者或服務帳戶 AlloyDB 資料庫存取權。

  2. 在叢集上建立新的資料庫使用者,並將使用者名稱設為 IAM 使用者或服務帳戶的電子郵件地址。

如要授予 IAM 帳戶專案中其他叢集的存取權,請重複最後一個步驟。

更新 IAM 帳戶並授予適當角色

您可以授予下列 IAM 角色,讓 IAM 使用者或服務帳戶能夠向 AlloyDB 執行個體進行驗證:

  • alloydb.databaseUser:讓使用者連線至 AlloyDB 執行個體。
  • serviceusage.serviceUsageConsumer:提供使用者存取權,可使用 API 檢查權限。

如要執行這項操作,請按照「授予其他使用者存取權」一文中的操作說明進行。在選取要授予 IAM 主體的角色時,請選擇 alloydb.databaseUser

在叢集中新增 IAM 使用者或服務帳戶

控制台

  1. 前往「Clusters」(叢集) 頁面。

    前往叢集

  2. 按一下要新增使用者的叢集名稱。

  3. 按一下「Users」(使用者)

  4. 按一下「Add user account」(新增使用者帳戶)

  5. 選取「Cloud IAM」

  6. 在「主體」欄位中,輸入 IAM 主體。

    如果是 IAM 使用者帳戶,請提供使用者帳戶的完整電子郵件地址。例如 kai@altostrat.com

    如果是 IAM 服務帳戶,請提供服務帳戶的地址,但要加上 .gserviceaccount.com 後置字元。舉例來說,如要指定服務帳戶 my-service@my-project.iam.gserviceaccount.com,請使用值 my-service@my-project.iam

  7. 如要為使用者指派預設 alloydbsuperuser 以外的角色,請按照下列步驟操作:

    1. 在「角色」中輸入角色名稱。
    2. 如要新增角色,請按 Enter 鍵或 Tab 鍵。
    3. 選取要為該使用者移除的任何角色 x

      詳情請參閱「預先定義的角色」。

  8. 按一下「新增」。

gcloud

如要根據 IAM 使用者或服務帳戶建立 PostgreSQL 資料庫使用者,請使用 gcloud alloydb users create 指令。

gcloud alloydb users create USERNAME \
--cluster=CLUSTER \
--region=REGION \
--type=IAM_BASED

請替換下列變數:

  • USERNAME:要新增為資料庫使用者的 IAM 使用者 ID。

    如果是 IAM 使用者帳戶,請提供使用者帳戶的完整電子郵件地址。例如 kai@altostrat.com

    如果是 IAM 服務帳戶,請提供服務帳戶的地址,但要加上 .gserviceaccount.com 後置字元。舉例來說,如要指定服務帳戶 my-service@my-project.iam.gserviceaccount.com,請使用值 my-service@my-project.iam

  • CLUSTER:要在其中建立這個資料庫使用者帳戶的叢集 ID。

  • REGION:叢集所在區域的 ID,例如 us-central1

授予 IAM 使用者適當的資料庫權限

將 IAM 使用者新增至 AlloyDB 叢集時,使用者預設不會擁有任何資料庫的權限,但 PUBLIC 可存取的資料庫物件除外。

如果使用者需要其他存取權,請使用 GRANT PostgreSQL 陳述式授予更多權限:

GRANT SELECT ON TABLE_NAME TO "USERNAME";

請替換下列變數:

  • USERNAME:使用者的電子郵件地址。地址前後須加上雙引號。

  • TABLE_NAME:您要授予使用者存取權的資料表名稱。

從叢集中移除 IAM 使用者或服務帳戶

控制台

  1. 前往「Clusters」(叢集) 頁面。

    前往叢集

  2. 按一下要移除使用者的叢集名稱。

  3. 按一下「Users」(使用者)

  4. 在要移除的使用者所在資料列,按一下「開啟這個使用者的動作」

  5. 選取「移除」

  6. 在「要移除使用者帳戶嗎?」對話方塊中,按一下「移除」

gcloud

使用gcloud alloydb users delete 指令

gcloud alloydb users delete USERNAME \
--cluster=CLUSTER \
--region=REGION

更改下列內容:

  • USERNAME:要從叢集移除的 IAM 使用者 ID。

    如果是 IAM 使用者帳戶,請提供使用者帳戶的完整電子郵件地址。例如 kai@altostrat.com

    如果是 IAM 服務帳戶,請提供服務帳戶的地址,但要加上 .gserviceaccount.com 後置字元。舉例來說,如要指定服務帳戶 my-service@my-project.iam.gserviceaccount.com,請使用值 my-service@my-project.iam

  • CLUSTER:要移除使用者的叢集 ID。

  • REGION:叢集所在的區域 ID。 例如:us-central1

授予 IAM 群組存取權

如要使用群組驗證 (搶先版),請將 IAM 群組新增至 AlloyDB 叢集。

將 IAM 群組新增至叢集

  1. alloydb.databaseUserserviceusage.serviceUsageConsumer 角色指派給群組帳戶。詳情請參閱「更新 IAM 帳戶並指派適當角色」。

    叢集隨時最多可有 200 個 IAM 群組。 閒置群組也會計入這項限制。

    IAM 群組名稱長度上限為 63 個字元。

    如果身分與存取權管理群組的名稱超過長度限制,您可以將其巢狀結構設在名稱有效的父項群組下。您必須先將父項群組新增至叢集,才能使用巢狀群組。

  2. 如要為群組建立資料庫使用者,請使用 gcloud alloydb users create 指令搭配 --type=IAM_GROUP 旗標。

    gcloud beta alloydb users create GROUP_EMAIL \
    --cluster=CLUSTER \
    --region=REGION \
    --type=IAM_GROUP

自動新增群組成員

將 IAM 群組新增至叢集後,該群組的所有成員 (使用者和服務帳戶) 都會繼承驗證權限,不必個別新增成員。成員首次登入後,AlloyDB 會自動為他們建立帳戶。

將資料庫權限授予 IAM 群組

將資料庫權限授予群組,而非個別使用者。

psql 指令列執行 GRANT 陳述式:

GRANT SELECT ON TABLE_NAME TO "GROUP_NAME";
  • GROUP_NAME:群組的電子郵件地址。由於字串包含特殊字元,因此您必須使用引號。
  • TABLE_NAME:資料表名稱。

從叢集刪除 IAM 群組

如要從 AlloyDB 叢集刪除 IAM 群組,請在 Google Cloud 控制台中撤銷群組權限,並從 AlloyDB 叢集刪除對應的群組使用者。

  1. 撤銷 IAM 權限:

    1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

      前往「IAM」(身分與存取權管理) 頁面

    2. 找出要移除存取權的 IAM 群組。

    3. 移除 roles/alloydb.databaseUser 角色,以及授予叢集存取權的任何其他 AlloyDB 相關角色。這項操作會禁止群組成員進行驗證。

  2. 從 AlloyDB 叢集刪除群組使用者:

    使用 Google Cloud CLI 從 AlloyDB 叢集刪除代表 IAM 群組的使用者。使用者名稱通常是 IAM 群組的電子郵件地址。

    gcloud alloydb users delete GROUP_EMAIL_ADDRESS \
    --cluster=CLUSTER_ID \
    --region=REGION_ID

    更改下列內容:

    • GROUP_EMAIL_ADDRESS:IAM 群組的完整電子郵件地址,例如 my-group@example.com
    • CLUSTER_ID:AlloyDB 叢集的 ID。
    • REGION_ID:AlloyDB 叢集所在的區域,例如 us-central1
  3. 選用:從 Cloud Identity 刪除群組:

    您必須在 Cloud Identity 帳戶中具備適當的管理員權限 (例如群組管理員),才能刪除群組。版主通常只能刪除自己擁有的群組。

    IAM 權限和群組成員資格的變更可能需要一段時間才能傳播,可能需要 15 分鐘以上。

    1. 請確認您在 Cloud Identity 帳戶中具備適當的管理員權限,例如群組管理員。版主只能刪除自己擁有的群組。詳情請參閱「預先建立的管理員角色」。

    2. 執行下列 Cloud Identity gcloud CLI 指令:

      gcloud identity groups delete GROUP_EMAIL_ADDRESS
    3. 在 Cloud Identity 中撤銷 IAM 群組的登入權限alloydb.databaseUser時,您也必須從 AlloyDB 叢集刪除該群組,確保 完全移除存取權。

將現有使用者遷移至 IAM 群組驗證

現有的個別 IAM 使用者不會使用群組驗證。 如要遷移,請按照下列步驟操作:

  1. 將使用者新增至 IAM 群組。
  2. 將群組新增至叢集。
  3. 為群組指派必要角色。
  4. 將資料庫權限指派給群組。
  5. 從叢集中刪除現有使用者。確認是否要轉移擁有權。

使用者再次登入時,AlloyDB 會以群組使用者的身分重新建立帳戶。

排解群組驗證問題

請使用下列資訊排解群組驗證問題。

現有帳戶未沿用權限

如果帳戶未從群組繼承權限,請按照下列步驟操作:

  1. 列出使用者。

    gcloud alpha alloydb users list --cluster=CLUSTER --region=REGION
  2. 如果類型為 ALLOYDB_IAM_USERALLOYDB_IAM_SERVICE_ACCOUNT,請移除帳戶。不會沿用群組權限。

  3. 如要使用正確的群組類型重新建立帳戶,請使用使用者或服務帳戶再次登入執行個體。再次登入執行個體,即可使用正確的帳戶類型 (ALLOYDB_IAM_GROUP_USERALLOYDB_IAM_GROUP_SERVICE_ACCOUNT) 重新建立帳戶。

後續步驟