Google Cloud 提供「身分與存取權管理」(IAM) 功能,可讓您授予使用者特定 Google Cloud 資源的存取權,並避免其他資源遭到未經授權者擅自存取。本頁面說明如何將 Cloud SQL 與 IAM 整合,以及如何使用 IAM 管理 Cloud SQL 資源的存取權,以及進行資料庫驗證。如需 Google Cloud IAM 的詳細說明,請參閱 IAM 說明文件。
Cloud SQL 提供一組預先定義的角色,方便您控管 Cloud SQL 資源的存取權。如果預先定義的角色未提供您需要的權限集,您也可以建立自己的自訂角色。此外,您仍可使用舊版基本角色 (編輯者、檢視者和擁有者),但這些角色無法提供與 Cloud SQL 角色相同的完善控管能力。特別是,基本角色提供的是跨 Google Cloud的資源存取權,而非僅限於 Cloud SQL。如要進一步瞭解基本 Google Cloud 角色,請參閱「基本角色」一文。
您可以在資源階層的任何層級設定 IAM 政策:機構層級、資料夾層級或專案層級。資源會繼承所有父項資源的政策。
Cloud SQL 的 IAM 參考資料
- Google Cloud 主控台中常見工作所需的權限
gcloud sql
指令所需權限- Cloud SQL Admin API 方法所需的權限
- 預先定義的 Cloud SQL IAM 角色
- 權限與角色
- 自訂角色
IAM 驗證概念
使用 IAM 驗證時,系統不會「直接」將存取資源 (Cloud SQL 執行個體) 的權限授予使用者,而是將權限分組為「角色」,然後將角色授予「主體」。詳情請參閱 IAM 總覽。
管理員可使用 IAM 驗證功能,透過 IAM 政策集中管理對其執行個體的存取權控管。
IAM 政策涉及下列實體:
- 原則:在 Cloud SQL 中,您可以使用多種主體類型:使用者帳戶、服務帳戶 (適用於應用程式) 或群組。詳情請參閱「與身分有關的概念」。
- 角色:角色是一組權限。您可以為實體授予角色,為其提供完成特定工作所需的權限。舉例來說,如果使用 IAM 資料庫驗證功能,主體必須具備
cloudsql.instances.login
權限才能登入執行個體,而這項權限包含在 Cloud SQL 執行個體使用者角色中。如要取得權限,請將使用者、服務帳戶或群組繫結至預先定義的 Cloud SQL 角色,或繫結至包含該權限的自訂角色。如要進一步瞭解身分與存取權管理 (IAM) 角色,請參閱「角色」。 - 資源:主要實體存取的資源是 Cloud SQL 執行個體。根據預設,IAM 政策繫結會套用至專案層級,讓主體獲得專案中所有 Cloud SQL 執行個體的角色權限。
IAM 資料庫驗證
資料庫驗證是指驗證嘗試存取資料庫的使用者身分。在 Cloud SQL 中,您可以為資料庫使用者使用下列類型的資料庫驗證機制:
- 資料庫的內建驗證功能會使用使用者名稱和密碼驗證資料庫使用者。
- IAM 資料庫驗證功能會使用 IAM 驗證使用者,並使用存取權存取權杖。
比較資料庫驗證選項
下表比較了 Cloud SQL 的不同資料庫驗證方法。
功能 | 內建資料庫驗證 | IAM 資料庫驗證 (個別) | IAM 群組驗證 |
---|---|---|---|
驗證方法 | 密碼 | 臨時驗證權杖 | 臨時驗證權杖 |
網路流量加密 | 不需要 SSL | 必須符合 SSL 規定 | 必須符合 SSL 規定 |
使用者管理 | 手動 | 透過 IAM 集中管理 | 透過 IAM 和 Cloud Identity 群組集中管理 |
IAM 群組驗證
您可以透過 IAM 群組驗證功能,在群組層級管理 Cloud SQL 使用者。群組的範例包括 Cloud Identity 群組。這項功能可簡化資料庫使用者管理作業。您可以一次管理多個帳戶的 Cloud SQL IAM 角色或權限,而不需要逐一更新每個使用者或服務帳戶。您也可以為 Cloud Identity 群組授予及撤銷資料庫權限。您新增至 Cloud Identity 群組的任何新帳戶都會繼承該群組的權限。
您可以透過 IAM 群組驗證功能執行下列操作:
- 將使用者加入群組,讓使用者自動繼承 IAM 角色和資料庫權限。
- 將使用者從群組中移除,即可從 Cloud SQL 資料庫中移除其登入存取權和資料庫權限。
- 一次為群組授予登入或資料庫權限,而非為不同使用者多次授予相同權限。
- 一次移除群組的登入權限或資料庫物件的存取權。
雖然 IAM 角色和權限是在群組層級指派,但使用者和服務帳戶會使用各自的 IAM 帳戶和憑證登入,而非共用群組帳戶。使用者或服務帳戶首次登入後,Cloud SQL 會在執行個體上建立資料庫帳戶。
稽核記錄會顯示每位使用者或服務帳戶的個別登入和資料庫活動。為了稽核目的,您可以查看哪個帳戶在資料庫中執行了哪些動作。
如要進一步瞭解如何使用 Cloud Identity 群組,請參閱「Cloud Identity 簡介」。
將使用者或服務帳戶新增至群組後,Cloud SQL 會發生下列變更:
- 如果您已將 IAM 登入權限授予群組,則使用者或服務帳戶就會獲得登入 Cloud SQL 執行個體的權限,因為使用者或服務帳戶屬於該群組。
- 使用者會自動繼承已授予群組的任何資料庫權限。
從群組中移除使用者或服務帳戶時,Cloud SQL 會發生下列變更:
- 使用者將失去先前因為是群組成員而繼承的所有資料庫權限。
- 如果使用者透過其他群組成員資格取得 Cloud SQL 執行個體的 IAM 登入權限,仍可登入。不過,使用者登入後,就不會擁有先前群組成員資格所提供的資料庫權限。
IAM 群組驗證最佳做法
- 在 Cloud Identity 中撤銷 IAM 群組的登入權限 (
cloudsql.instances.login
) 時,請務必從 Cloud SQL 執行個體中刪除該群組。 - 從 Cloud Identity 中刪除群組時,請務必一併從 Cloud SQL 執行個體中刪除該群組。
- 使用群組在資料庫中設定角色式存取權控管。一律只授予群組最少必要的權限。
- 請勿將 IAM 群組驗證角色授予內建使用者。舉例來說,如果您有內建使用者
user-a
,並且建立 IAM 群組驗證使用者[email protected]
,請勿將[email protected]
角色授予user-a
。
IAM 群組驗證限制
- 使用 IAM 群組驗證功能時,如果您有含唯讀備用資源的 Cloud SQL 執行個體,則必須先登入主要執行個體,才能登入唯讀備用資源執行個體。首次登入主執行個體後,群組使用者資訊會複製到讀取副本。後續登入時,您可以直接登入唯讀副本。
- 您最多可在執行個體中新增 200 個 IAM 群組。
- 您無法在同一個執行個體中新增個別 IAM 使用者或屬於群組的服務帳戶。換句話說,如果已存在類型為
CLOUD_IAM_GROUP_USER
或CLOUD_IAM_GROUP_SERVICE_ACCOUNT
的相同帳戶,就無法新增類型為CLOUD_IAM_USER
或CLOUD_IAM_SERVICE_ACCOUNT
的帳戶。 - 如果在類型為
CLOUD_IAM_USER
或CLOUD_IAM_SERVICE_ACCOUNT
的執行個體上已存在個人帳戶,則該帳戶無法用於 IAM 群組驗證。這些使用者類型不會繼承群組的 IAM 角色和資料庫權限。如要修正這個問題,並使用具有 IAM 群組驗證的帳戶,請移除個別 IAM 使用者或服務帳戶。
詳情請參閱「現有的 IAM 使用者或服務帳戶未繼承群組的資料庫權限」一文。 - 變更 Cloud Identity 群組成員資格 (例如新增帳戶) 後,需要約 15 分鐘才能套用。這項時間除了IAM 變更所需的時間之外。
自動與手動 IAM 資料庫驗證
PostgreSQL 適用的 Cloud SQL 提供兩種 IAM 資料庫驗證機制:自動和手動。
自動 IAM 資料庫驗證
自動 IAM 資料庫驗證可讓您將要求和管理存取權權杖的作業交給中介 Cloud SQL 連接器,例如 Cloud SQL Auth Proxy 或其中一個 Cloud SQL 語言連接器。使用自動 IAM 資料庫驗證功能時,使用者只需在用戶端的連線要求中傳遞 IAM 資料庫使用者名稱即可。連接器會代表用戶端,提交密碼屬性的存取權權杖資訊。
自動 IAM 資料庫驗證需要使用 Cloud SQL 連接器,並支援 Cloud SQL Auth Proxy、Go 連接器、Java 連接器和 Python 連接器。
為提供最安全可靠的體驗,建議您使用自動 IAM 資料庫驗證功能。IAM 資料庫驗證功能會使用 OAuth 2.0 存取權杖,這類憑證的有效期間很短,只有一小時。Cloud SQL 連接器可以要求和重新整理這些符記,確保依賴連線資源池的長期程序或應用程式能擁有穩定的連線。強烈建議您使用自動 IAM 資料庫驗證功能,而非手動驗證。
詳情請參閱「使用自動 IAM 資料庫驗證功能登入」。
手動 IAM 資料庫驗證
手動 IAM 資料庫驗證需要 IAM 管理主體明確傳遞用戶端連線要求中密碼屬性的存取權杖。主體必須先登入 Google Cloud ,並明確向 IAM 要求存取權存取權杖。
您可以使用 gcloud CLI,透過 Cloud SQL Admin API 範圍明確要求 OAuth 2.0 權杖,用於登入資料庫。當您以資料庫使用者身分登入,並使用 IAM 資料庫驗證功能時,您可以使用電子郵件地址做為使用者名稱,並將存取權存取權杖做為密碼。您可以使用這個方法,直接連線至資料庫,也可以使用 Cloud SQL 連接器。
您只能透過 SSL 連線使用 IAM 資料庫驗證功能登入。
詳情請參閱「使用手動 IAM 資料庫驗證功能登入」。
情境感知存取權和 IAM 資料庫驗證
如果您在 IAM 設定中使用情境感知存取權,就無法使用 Cloud SQL 連接器 (例如 Cloud SQL Auth Proxy 或其中一個 Cloud SQL 語言連接器) 搭配 IAM 資料庫驗證。嘗試以手動或自動方式使用 IAM 驗證功能登入時,系統會失敗。請改為直接連線至執行個體。
使用者和服務帳戶管理
如要讓使用者和服務帳戶使用身分與存取權管理資料庫驗證功能,存取執行個體上的資料庫,您必須將他們新增至執行個體,或將他們新增至具有執行個體存取權的群組。詳情請參閱「新增使用 IAM 的使用者或服務帳戶」。
如果您使用 Google Cloud 控制台新增使用者或服務帳戶,Cloud SQL 會要求您為使用者新增「Cloud SQL 使用者」角色。使用者必須具備這個角色,才能登入執行個體。
如果您使用gcloud
或 API 新增使用者,就必須手動授予登入權限。使用 PostgreSQL GRANT 指令授予資料庫權限。設定 Cloud SQL 身分與存取權管理資料庫驗證的執行個體
您可以使用 cloudsql.iam_authentication
旗標,在執行個體上啟用 IAM 資料庫驗證功能。啟用這個旗標後,執行個體會啟用帳戶的登入功能,這些帳戶已針對 IAM 資料庫驗證進行設定。
如要進行 IAM 群組驗證和 IAM 資料庫驗證,就必須使用這個旗標。
設定標記不會阻止現有的非 IAM 使用者使用其使用者名稱和密碼登入。不過,如果您在執行個體上停用這個旗標,先前使用 IAM 資料庫驗證功能新增的任何使用者都會失去對執行個體的存取權。詳情請參閱「為 IAM 資料庫驗證設定執行個體」。
適用於不同執行個體情境的 Cloud SQL 身分與存取權管理資料庫驗證
唯讀備用資源 | 即使主要執行個體已啟用 IAM 資料庫驗證,系統也不會自動在唯讀備用資源中啟用這項功能。建立讀取/寫入複本後,您需要新增 IAM 資料庫驗證。詳情請參閱「為 IAM 資料庫驗證程序設定唯讀備用資源登入作業」。 |
已還原的執行個體 | 如果先前備份的執行個體稍後還原至同一專案中的相同或其他執行個體,則會套用目前使用者的登入授權。如果您將備份還原至其他專案的新執行個體,就必須為新執行個體設定使用者授權。詳情請參閱「新增使用身分與存取權管理資料庫驗證功能的使用者或服務帳戶」。 |
關於 IAM 條件
您可以使用 IAM 條件,根據各種屬性授予角色。舉例來說,您可以只允許在特定日期和時間存取,或是只授予特定名稱的 Cloud SQL 資源存取權。
如要進一步瞭解 IAM 條件,請參閱「IAM 條件總覽」頁面。您也可以進一步瞭解如何在 Cloud SQL 中使用 IAM 限制條件,包括相關範例。
使用 Cloud 稽核記錄
如要保留資料存取記錄 (包括登入),您可以使用稽核記錄。Cloud 稽核記錄預設為關閉。您需要啟用資料存取稽核記錄,才能追蹤登入情形。使用稽核記錄功能時,系統會產生資料記錄費用。詳情請參閱「稽核記錄」、「設定資料存取稽核記錄」和「記錄資料的定價」。
限制
- IAM 資料庫驗證使用者帳戶的登入名稱必須全為小寫字母。例如:
[email protected]
。[email protected]
不允許。 - 為確保安全性,使用 IAM 資料庫驗證功能登入的作業只能透過 SSL 連線進行。系統會拒絕未加密的連線。
- 每個執行個體都有每分鐘登入配額,包括成功和失敗的登入。超過配額後,系統將暫時無法登入。建議您避免頻繁登入,並使用授權網路限制登入。登入授權的配額為每個例項每分鐘 12,000 次。
後續步驟
- 瞭解如何設定執行個體,以便進行 IAM 資料庫驗證。
- 瞭解如何在資料庫中新增使用身分與存取權管理資料庫驗證功能的使用者或服務帳戶。
- 瞭解如何使用 IAM 資料庫驗證功能登入 Cloud SQL 資料庫。
- 瞭解如何在稽核記錄中查看登入資訊。