您可以在新的或現有的 AlloyDB for PostgreSQL 叢集上,設定 Identity and Access Management (IAM) 資料庫驗證機制,使用個別 IAM 帳戶或 IAM 群組管理資料庫登入和權限。
IAM 驗證機制可透過標準 PostgreSQL 使用者補充資料庫驗證機制,每個 AlloyDB 叢集都支援這項功能。
您可以使用個人帳戶或群組進行驗證:
個別帳戶:將每個 IAM 使用者或服務帳戶新增至叢集,並管理各帳戶的權限。
群組:將 IAM 群組新增至叢集,讓所有成員 (使用者和服務帳戶) 繼承驗證主要執行個體、讀取集區執行個體和 AlloyDB Studio 的權限,不必個別新增每位成員。
AlloyDB 執行個體預設會停用 IAM 驗證。
如要使用 IAM 驗證,請完成下列一般步驟:
- 在執行個體上啟用 IAM 個人或群組驗證。
- 將必要角色授予帳戶或群組。
- 將帳戶或群組新增至叢集。
- 將資料庫權限授予帳戶或群組。
啟用及停用 IAM 驗證
如要在新叢集或現有叢集的執行個體上啟用 IAM 驗證,請設定必要的資料庫旗標:
如要進行個別驗證,請將
alloydb.iam_authentication資料庫旗標設為on。如要進行群組驗證,請將
alloydb.iam_authentication和alloydb.iam_group_authentication資料庫旗標設為on。
如要停用 IAM 驗證,請將旗標設為 off。
如要進一步瞭解如何設定旗標,請參閱「設定執行個體的資料庫旗標」。
授予個人帳戶存取權
如要為新的資料庫使用者啟用 IAM 存取權,請按照下列步驟操作:
更新專案的 IAM 設定,將 AlloyDB 資料庫存取權授予適當的 IAM 使用者或服務帳戶。
在叢集上建立新的資料庫使用者,並將使用者名稱設為 IAM 使用者或服務帳戶的電子郵件地址。
如要將專案中其他叢集的存取權授予 IAM 帳戶,請重複最後一個步驟。
為 IAM 帳戶更新適當角色
您可以將下列 IAM 角色授予 IAM 使用者或服務帳戶,讓他們能夠向 AlloyDB 執行個體進行驗證:
alloydb.databaseUser:可讓使用者連線至 AlloyDB 執行個體。serviceusage.serviceUsageConsumer:提供使用者存取權,可存取檢查權限的 API。
如要這麼做,請按照「將存取權授予其他使用者」一文的指示操作。在選取要授予 IAM 主體的角色時,請選擇 alloydb.databaseUser。
將 IAM 使用者或服務帳戶新增至叢集
控制台
前往「Clusters」(叢集) 頁面。
按一下要新增使用者的叢集名稱。
按一下「Users」(使用者)。
按一下「Add user account」(新增使用者帳戶)。
選取「Cloud IAM」。
在「Principal」(主體) 欄位中,輸入 IAM 主體。
如果是 IAM 使用者帳戶,請提供使用者帳戶的完整電子郵件地址。例如
dana@example.com。如果是 IAM 服務帳戶,請提供服務帳戶的地址,但「不含」
.gserviceaccount.com後置字串。例如,如要指定服務帳戶my-service@my-project.iam.gserviceaccount.com,請使用my-service@my-project.iam值。如要為使用者指派預設
alloydbsuperuser以外的角色,請按照下列步驟操作:- 在「角色」中輸入角色名稱。
- 如要新增角色,請按 Enter 鍵或 Tab 鍵。
如要移除該使用者的任何角色,請選取「x」x。
詳情請參閱「預先定義的角色」
按一下「新增」。
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 使用者或服務帳戶
控制台
前往「Clusters」(叢集) 頁面。
按一下要移除使用者的叢集名稱。
按一下「Users」(使用者)。
在要移除的使用者所在資料列,按一下 「Open actions for this user」(開啟這位使用者的動作)。
選取「移除」。
在「要移除使用者帳戶嗎?」對話方塊中,按一下「移除」。
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 群組新增至叢集,請按照下列步驟操作:
將
roles/alloydb.databaseUser和roles/serviceusage.serviceUsageConsumer角色指派給群組帳戶。如要進一步瞭解如何授予這些角色,請參閱「為 IAM 帳戶更新適當角色」。如要為群組建立資料庫使用者,請執行
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 叢集刪除對應的群組使用者。
撤銷 IAM 權限:
前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。
找出要移除存取權的 IAM 群組。
移除
roles/alloydb.databaseUser角色,以及任何其他可授予叢集存取權的 AlloyDB 相關角色。這項操作會導致群組成員無法驗證。
從 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。
選用:從 Cloud Identity 刪除群組:
您必須在 Cloud Identity 帳戶中具備適當的管理員權限 (例如群組管理員),才能刪除群組。群組擁有者通常只能刪除自己擁有的群組。
IAM 權限和群組成員資格的變更可能需要一些時間才會生效,有時甚至需要 15 分鐘以上。
確認您在 Cloud Identity 帳戶中擁有適當的管理員權限,例如網路論壇管理員。版主只能刪除自己擁有的群組。詳情請參閱「預先建立的管理員角色」。
執行下列 Cloud Identity gcloud CLI 指令:
gcloud identity groups delete GROUP_EMAIL_ADDRESS在 Cloud Identity 中撤銷 IAM 群組的登入權限
alloydb.databaseUser時,您也必須從 AlloyDB 叢集刪除該群組,確保完全移除存取權。
將現有使用者遷移至 IAM 群組驗證
現有的個別 IAM 使用者不會使用群組驗證。如要遷移,請按照下列步驟操作:
- 將使用者新增至 IAM 群組。
- 將群組新增至叢集。
- 為群組指派必要角色。
- 將資料庫權限指派給群組。
- 從叢集刪除現有的個別使用者。請務必視需要轉移擁有權。
使用者再次登入時,AlloyDB 會將帳戶重新建立為群組使用者。
排解群組驗證問題
請參考下列資訊,排解群組驗證問題。
現有帳戶未沿用權限
如果帳戶未沿用群組權限,請按照下列步驟操作:
列出叢集中的使用者:
gcloud alloydb users list \ --cluster=CLUSTER \ --region=REGION更改下列內容:
CLUSTER:AlloyDB 叢集的 ID。REGION:AlloyDB 叢集所在區域的 ID,例如us-central1。
如果帳戶類型為
ALLOYDB_IAM_USER,請從叢集移除帳戶。ALLOYDB_IAM_USER類型的帳戶不會沿用群組權限。如要以群組使用者類型重新建立帳戶,請使用使用者或服務帳戶再次登入執行個體。再次登入執行個體時,系統會以
ALLOYDB_IAM_GROUP_USER或ALLOYDB_IAM_GROUP_SERVICE_ACCOUNT帳戶類型重新建立帳戶。