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 政策集中管理執行個體的存取權控管。
IAM 政策涉及下列實體:
- 原則。在 Cloud SQL 中,您可以使用幾種主體:使用者帳戶、服務帳戶 (適用於應用程式) 或群組。詳情請參閱與身分有關的概念。
- 角色:角色是一組權限。您可以將角色授予主體,提供完成特定工作所需的權限。舉例來說,使用 IAM 資料庫驗證時,主體需要
cloudsql.instances.login
權限才能登入執行個體,而這項權限包含在「Cloud SQL 執行個體使用者」角色中。如要取得這項權限,請將使用者、服務帳戶或群組繫結至預先定義的 Cloud SQL 角色,或是包含這項權限的自訂角色。如要進一步瞭解 IAM 角色,請參閱「角色」。 - 資源。主體存取的資源是 Cloud SQL 執行個體。根據預設,IAM 政策繫結是在專案層級套用,因此主體會取得專案中所有 Cloud SQL 執行個體的角色權限。
IAM 資料庫驗證
資料庫驗證程序會驗證嘗試存取資料庫的使用者身分。在 Cloud SQL 中,您可以為資料庫使用者採用下列類型的資料庫驗證:
- 資料庫的內建驗證功能會使用使用者名稱和密碼驗證資料庫使用者。
- IAM 資料庫驗證功能會使用存取權權杖,透過 IAM 驗證使用者身分。您可以透過下列兩種方式管理使用者或服務帳戶。
- 個別:根據預設,使用 IAM 資料庫驗證時,您會將 IAM 角色授予個別使用者和服務帳戶,並指派資料庫權限。您可以將個別帳戶新增至執行個體,並分別管理每個帳戶的權限。
- 依群組:透過 IAM 群組驗證,您可以在群組層級控管 Cloud SQL 執行個體的存取權。舉例來說,您可以將 Identity and Access Management 角色和資料庫權限指派給 Cloud Identity 群組。Cloud Identity 群組中的所有使用者和服務帳戶,都會繼承指派給群組的 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 群組驗證使用者user-b@example.com
,請勿將user-b@example.com
角色授予user-a
。
IAM 群組驗證限制
- 一個執行個體最多可新增 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 資料庫驗證
MySQL 適用的 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 連接器,都可以採用這個方法。
使用 IAM 資料庫驗證功能登入時,只能透過 SSL 連線進行。
詳情請參閱「使用手動 IAM 資料庫驗證登入」。
情境感知存取權和 IAM 資料庫驗證
如果您在 IAM 設定中使用情境感知存取權,就無法搭配 IAM 資料庫驗證使用 Cloud SQL 連接器,例如 Cloud SQL Auth Proxy 或其中一個 Cloud SQL 語言連接器。嘗試透過 IAM 驗證手動或自動登入都會失敗。請改為直接連線至執行個體。
使用者和服務帳戶管理
如要讓使用者和服務帳戶透過 IAM 資料庫驗證存取執行個體上的資料庫,請將他們新增至執行個體,或新增至有權存取執行個體的群組。詳情請參閱「新增使用 IAM 的使用者或服務帳戶」。
如果您使用 Google Cloud 控制台新增使用者或服務帳戶,Cloud SQL 會要求您為使用者新增「Cloud SQL User」(Cloud SQL 使用者) 角色。使用者必須具備這個角色,才能登入執行個體。
將 IAM 使用者新增至資料庫後,您需要手動授予資料庫權限。使用 MySQL GRANT 指令授予其他資料庫權限。Cloud SQL IAM 資料庫驗證的執行個體設定
您可以使用 cloudsql_iam_authentication
旗標,在執行個體上啟用 IAM 資料庫驗證。啟用這個旗標後,執行個體會允許已設定 IAM 資料庫驗證的帳戶登入。
IAM 群組驗證和 IAM 資料庫驗證都需要這個旗標。
設定這個標記後,現有的非 IAM 使用者仍可使用使用者名稱和密碼登入。不過,如果您在執行個體上停用這個旗標,先前使用 IAM 資料庫驗證功能新增的使用者,將無法再存取執行個體。詳情請參閱「為 IAM 資料庫驗證設定執行個體」。
不同執行個體情境的 Cloud SQL IAM 資料庫驗證
唯讀備用資源 | 即使主要執行個體已啟用 IAM 資料庫驗證,唯讀備用資源也不會自動啟用這項功能。建立唯讀副本後,您需要新增 IAM 資料庫驗證。詳情請參閱「設定 IAM 資料庫驗證的唯讀備用資源登入作業」。 |
已還原的執行個體 | 如果先前備份的執行個體後來還原至相同或不同執行個體 (位於同一專案中),則適用目前的使用者登入授權。如果將備份檔還原至其他專案的新執行個體,則需為新執行個體設定使用者授權。詳情請參閱「新增使用 IAM 資料庫驗證功能的使用者或服務帳戶」。 |
關於 IAM 條件
透過 IAM 條件,您可以根據各種屬性授予角色。舉例來說,您可以只允許在特定日期和時間存取,或是只允許存取特定名稱的 Cloud SQL 資源。
如要進一步瞭解 IAM 條件,請參閱「IAM 條件總覽」頁面。您也可以進一步瞭解如何使用 IAM 條件搭配 Cloud SQL,包括範例。
使用 Cloud 稽核記錄
如要記錄資料存取情形 (包括登入),可以使用稽核記錄。 Cloud 稽核記錄預設為關閉。您必須開啟資料存取稽核記錄,才能追蹤登入活動。為此使用稽核記錄會產生資料記錄費用。詳情請參閱「稽核記錄」、「設定資料存取稽核記錄」和「記錄資料的定價」。
限制
- IAM 資料庫驗證使用者帳戶的登入名稱必須全部為小寫。例如:
example-user@example.com
。不允許Example-User@example.com
。 - 為確保安全,使用 IAM 資料庫驗證登入時,只能透過 SSL 連線。系統會拒絕未加密的連線。
- 每個執行個體都有每分鐘登入配額,包括成功和失敗的登入嘗試。超過配額時,登入功能會暫時無法使用。建議您避免頻繁登入,並使用授權網路限制登入。 每個執行個體每分鐘的登入授權配額為 12,000 次。
- 使用 MySQL 5.6 的執行個體不支援 IAM 資料庫驗證。
後續步驟
- 瞭解如何設定執行個體,以便進行 IAM 資料庫驗證。
- 瞭解如何將使用 IAM 資料庫驗證功能的使用者或服務帳戶新增至資料庫。
- 瞭解如何使用 IAM 資料庫驗證功能登入 Cloud SQL 資料庫。
- 瞭解如何在稽核記錄中查看登入資訊。