管理 IAM 驗證

您可以在新的或現有的 AlloyDB for PostgreSQL 叢集上,設定 Identity and Access Management (IAM) 資料庫驗證機制,使用個別 IAM 帳戶或 IAM 群組管理資料庫登入和權限。

IAM 驗證機制可透過標準 PostgreSQL 使用者補充資料庫驗證機制,每個 AlloyDB 叢集都支援這項功能。

您可以使用個人帳戶或群組進行驗證:

  • 個別帳戶:將每個 IAM 使用者或服務帳戶新增至叢集,並管理各帳戶的權限。

  • 群組:將 IAM 群組新增至叢集,讓所有成員 (使用者和服務帳戶) 繼承驗證主要執行個體、讀取集區執行個體和 AlloyDB Studio 的權限,不必個別新增每位成員。

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.databaseUser:可讓使用者連線至 AlloyDB 執行個體。
  • serviceusage.serviceUsageConsumer:提供使用者存取權,可存取檢查權限的 API。

如要這麼做,請按照「將存取權授予其他使用者」一文的指示操作。在選取要授予 IAM 主體的角色時,請選擇 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。

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

  8. 按一下「新增」。

gcloud

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

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

請替換下列變數:

  • 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 群組新增至叢集

將 IAM 群組新增至叢集前,請注意下列規定:

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

  • IAM 群組名稱不得超過 63 個字元。如果 IAM 群組名稱超過 63 個字元,可以將其巢狀結構置於名稱有效的父項群組下。您必須先將父項群組新增至叢集,才能使用巢狀群組。

如要將 IAM 群組新增至叢集,請按照下列步驟操作:

  1. 將 roles/alloydb.databaseUser 和 roles/serviceusage.serviceUsageConsumer 角色指派給群組帳戶。如要進一步瞭解如何授予這些角色,請參閱「為 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 群組新增至叢集後,該群組中的所有使用者和服務帳戶都會繼承驗證權限。您不必個別新增成員。群組成員可以直接登入主要執行個體、讀取集區執行個體,以及 Google Cloud 控制台中的 AlloyDB Studio,包括首次登入讀取集區執行個體,而不必先連線至主要執行個體。成員首次登入時,AlloyDB 會自動為該主體建立資料庫帳戶。

從 PostgreSQL 適用的 Cloud SQL 備份還原或遷移 AlloyDB 叢集時,AlloyDB 會對應並保留個別和 IAM 群組使用者設定。如要進一步瞭解如何從 PostgreSQL 適用的 Cloud SQL 備份遷移,請參閱「從 PostgreSQL 適用的 Cloud SQL 遷移至 AlloyDB」。

將資料庫權限授予 IAM 群組

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

透過 psql 指令列執行 GRANT 陳述式:

GRANT SELECT ON TABLE_NAME TO "GROUP_NAME";

更改下列內容:

  • TABLE_NAME:要授予群組存取權的資料表名稱。

  • GROUP_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 alloydb users list \
        --cluster=CLUSTER \
        --region=REGION

    更改下列內容:

    • CLUSTER:AlloyDB 叢集的 ID。

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

  2. 如果帳戶類型為 ALLOYDB_IAM_USER,請從叢集移除帳戶。ALLOYDB_IAM_USER 類型的帳戶不會沿用群組權限。

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

後續步驟