本頁說明如何準備 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 設定,授予適當的 IAM 使用者或服務帳戶 AlloyDB 資料庫存取權。
在叢集上建立新的資料庫使用者,並將使用者名稱設為 IAM 使用者或服務帳戶的電子郵件地址。
如要授予 IAM 帳戶專案中其他叢集的存取權,請重複最後一個步驟。
更新 IAM 帳戶並授予適當角色
您可以授予下列 IAM 角色,讓 IAM 使用者或服務帳戶能夠向 AlloyDB 執行個體進行驗證:
alloydb.databaseUser:讓使用者連線至 AlloyDB 執行個體。serviceusage.serviceUsageConsumer:提供使用者存取權,可使用 API 檢查權限。
如要執行這項操作,請按照「授予其他使用者存取權」一文中的操作說明進行。在選取要授予 IAM 主體的角色時,請選擇 alloydb.databaseUser。
在叢集中新增 IAM 使用者或服務帳戶
控制台
前往「Clusters」(叢集) 頁面。
按一下要新增使用者的叢集名稱。
按一下「Users」(使用者)。
按一下「Add user account」(新增使用者帳戶)。
選取「Cloud IAM」。
在「主體」欄位中,輸入 IAM 主體。
如果是 IAM 使用者帳戶,請提供使用者帳戶的完整電子郵件地址。例如
kai@altostrat.com。如果是 IAM 服務帳戶,請提供服務帳戶的地址,但不要加上
.gserviceaccount.com後置字元。舉例來說,如要指定服務帳戶my-service@my-project.iam.gserviceaccount.com,請使用值my-service@my-project.iam。如要為使用者指派預設
alloydbsuperuser以外的角色,請按照下列步驟操作:- 在「角色」中輸入角色名稱。
- 如要新增角色,請按 Enter 鍵或 Tab 鍵。
選取要為該使用者移除的任何角色 x。
詳情請參閱「預先定義的角色」。
按一下「新增」。
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 使用者或服務帳戶
控制台
前往「Clusters」(叢集) 頁面。
按一下要移除使用者的叢集名稱。
按一下「Users」(使用者)。
在要移除的使用者所在資料列,按一下「開啟這個使用者的動作」。
選取「移除」。
在「要移除使用者帳戶嗎?」對話方塊中,按一下「移除」。
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 群組新增至叢集
將
alloydb.databaseUser和serviceusage.serviceUsageConsumer角色指派給群組帳戶。詳情請參閱「更新 IAM 帳戶並指派適當角色」。叢集隨時最多可有 200 個 IAM 群組。 閒置群組也會計入這項限制。
IAM 群組名稱長度上限為 63 個字元。
如果身分與存取權管理群組的名稱超過長度限制,您可以將其巢狀結構設在名稱有效的父項群組下。您必須先將父項群組新增至叢集,才能使用巢狀群組。
如要為群組建立資料庫使用者,請使用
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 叢集刪除對應的群組使用者。
撤銷 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 alpha alloydb users list --cluster=CLUSTER --region=REGION如果類型為
ALLOYDB_IAM_USER或ALLOYDB_IAM_SERVICE_ACCOUNT,請移除帳戶。不會沿用群組權限。如要使用正確的群組類型重新建立帳戶,請使用使用者或服務帳戶再次登入執行個體。再次登入執行個體,即可使用正確的帳戶類型 (
ALLOYDB_IAM_GROUP_USER或ALLOYDB_IAM_GROUP_SERVICE_ACCOUNT) 重新建立帳戶。