如要使用 Google Cloud 憑證 (而非資料庫密碼) 驗證資料庫使用者和群組,您可以在 AlloyDB for PostgreSQL 執行個體上啟用及設定 Identity and Access Management (IAM) 驗證。
IAM 驗證機制可透過標準 PostgreSQL 使用者補充資料庫驗證機制,每個 AlloyDB 叢集都支援這項功能。
您可以使用個人帳戶或群組進行驗證:
- 個別帳戶:將每個 IAM 使用者或服務帳戶新增至叢集。您可以使用 IAM 或 PostgreSQL 使用者角色,向該叢集進行驗證。
- 群組:將 IAM 群組新增至叢集。該群組的所有成員 (使用者和服務帳戶) 都會繼承驗證權限。這樣一來,您就能透過管理群組成員來管理存取權,不必個別將每位成員新增至叢集。
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 資料庫使用者 (
roles/alloydb.databaseUser):可讓使用者連線至 AlloyDB 執行個體。服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer):可讓使用者存取檢查權限的 API。
如要這麼做,請按照「將存取權授予其他使用者」一文的指示操作。在選取要授予 IAM 主體的角色時,請選擇「AlloyDB Database User」(AlloyDB 資料庫使用者) (roles/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。
如要進一步瞭解預先定義的 PostgreSQL 角色,請參閱「預先定義的角色」。
按一下「新增」。
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 使用者或服務帳戶
控制台
前往「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 群組新增至叢集
將
roles/alloydb.databaseUser和roles/serviceusage.serviceUsageConsumer角色指派給群組帳戶。詳情請參閱「為 IAM 帳戶更新適當角色」。叢集最多可同時存在 200 個 IAM 群組。閒置群組會計入這項限制。
IAM 群組名稱長度上限為 63 個字元。
如果 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 群組新增至叢集後,該群組的所有成員 (使用者和服務帳戶) 都會繼承驗證權限。不必個別新增成員。成員首次登入後,AlloyDB 會自動為他們建立帳戶。
將資料庫權限授予 IAM 群組
將資料庫權限授予群組,而非個別使用者。
透過 psql 指令列執行 GRANT 陳述式:
GRANT SELECT ON TABLE_NAME TO "GROUP_NAME";
更改下列內容:
GROUP_NAME:群組的電子郵件地址。由於字串包含特殊字元,因此必須使用引號。TABLE_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 資料庫使用者角色 (
roles/alloydb.databaseUser) 時,您也必須從 AlloyDB 叢集刪除該群組,才能完全移除存取權。
將現有使用者遷移至 IAM 群組驗證
現有的個別 IAM 使用者不會使用群組驗證。如要遷移,請按照下列步驟操作:
將使用者新增至 IAM 群組。
將必要的 IAM 角色 (
roles/alloydb.databaseUser和roles/serviceusage.serviceUsageConsumer) 指派給群組。將資料庫權限指派給群組。
從叢集刪除現有的個別使用者。如有需要,請先轉移物件擁有權,再刪除使用者。
使用者再次登入時,AlloyDB 會將帳戶重新建立為群組使用者。
排解群組驗證問題
請參考下列資訊,排解群組驗證問題。
現有帳戶未沿用權限
如果帳戶未沿用群組權限,請按照下列步驟操作:
列出使用者:
gcloud alloydb users list --cluster=CLUSTER --region=REGION更改下列內容:
CLUSTER:叢集 ID。REGION:叢集所在的區域,例如us-central1。
如果類型是
ALLOYDB_IAM_USER或ALLOYDB_IAM_SERVICE_ACCOUNT,請移除帳戶。不會沿用群組權限。如要以正確的群組類型重新建立帳戶,請使用使用者或服務帳戶重新登入執行個體。再次登入執行個體後,系統會以正確的帳戶類型 (
ALLOYDB_IAM_GROUP_USER或ALLOYDB_IAM_GROUP_SERVICE_ACCOUNT) 重新建立帳戶。