管理 IAM 驗證

如要使用 Google Cloud 憑證 (而非資料庫密碼) 驗證資料庫使用者和群組,您可以在 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 設定,將 AlloyDB 資料庫存取權授予適當的 IAM 使用者或服務帳戶。

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

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

為 IAM 帳戶更新適當角色

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

  • AlloyDB 資料庫使用者 (roles/alloydb.databaseUser):可讓使用者連線至 AlloyDB 執行個體。

  • 服務使用情形消費者 (roles/serviceusage.serviceUsageConsumer):可讓使用者存取檢查權限的 API。

如要這麼做,請按照「將存取權授予其他使用者」一文的指示操作。在選取要授予 IAM 主體的角色時,請選擇「AlloyDB Database User」(AlloyDB 資料庫使用者) (roles/alloydb.databaseUser)。

將 IAM 使用者或服務帳戶新增至叢集

控制台

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

    前往叢集

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

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

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

  5. 選取「Cloud IAM」。

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

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

    如果是 IAM 服務帳戶,請提供服務帳戶的地址,但「不含」.gserviceaccount.com 後置字串。例如,如要指定服務帳戶 my-service@my-project.iam.gserviceaccount.com,請使用 my-service@my-project.iam 值。

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

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

      如要進一步瞭解預先定義的 PostgreSQL 角色,請參閱「預先定義的角色」。

  8. 按一下「新增」。

gcloud

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

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

更改下列內容:

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

    如果是 IAM 使用者帳戶,請提供使用者帳戶的完整電子郵件地址。例如 dana@example.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. 在要移除的使用者所在資料列,按一下 「Open actions for this user」(開啟這位使用者的動作)。

  5. 選取「移除」。

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

gcloud

使用gcloud alloydb users delete 指令。

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

更改下列內容:

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

    如果是 IAM 使用者帳戶,請提供使用者帳戶的完整電子郵件地址。例如 dana@example.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. 將 roles/alloydb.databaseUser 和 roles/serviceusage.serviceUsageConsumer 角色指派給群組帳戶。詳情請參閱「為 IAM 帳戶更新適當角色」。

    叢集最多可同時存在 200 個 IAM 群組。閒置群組會計入這項限制。

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

    如果 IAM 群組名稱超過長度限制,可以將其巢狀結構置於名稱有效的父項群組下。您必須先將父項群組新增至叢集,才能使用巢狀群組。

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

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

    更改下列內容:

    • GROUP_EMAIL:IAM 群組的完整電子郵件地址,例如 my-group@example.com。

    • CLUSTER:要新增這個群組的叢集 ID。

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

自動新增群組成員

將 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 資料庫使用者角色 (roles/alloydb.databaseUser) 時,您也必須從 AlloyDB 叢集刪除該群組,才能完全移除存取權。

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

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

  1. 將使用者新增至 IAM 群組。

  2. 將必要的 IAM 角色 (roles/alloydb.databaseUser 和 roles/serviceusage.serviceUsageConsumer) 指派給群組。

  3. 將群組新增至叢集。

  4. 將資料庫權限指派給群組。

  5. 從叢集刪除現有的個別使用者。如有需要,請先轉移物件擁有權,再刪除使用者。

使用者再次登入時,AlloyDB 會將帳戶重新建立為群組使用者。

排解群組驗證問題

請參考下列資訊,排解群組驗證問題。

現有帳戶未沿用權限

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

  1. 列出使用者:

    gcloud alloydb users list --cluster=CLUSTER --region=REGION

    更改下列內容:

    • CLUSTER:叢集 ID。

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

  2. 如果類型是 ALLOYDB_IAM_USER 或 ALLOYDB_IAM_SERVICE_ACCOUNT,請移除帳戶。不會沿用群組權限。

  3. 如要以正確的群組類型重新建立帳戶,請使用使用者或服務帳戶重新登入執行個體。再次登入執行個體後,系統會以正確的帳戶類型 (ALLOYDB_IAM_GROUP_USER 或 ALLOYDB_IAM_GROUP_SERVICE_ACCOUNT) 重新建立帳戶。

後續步驟