Mysql

使用 Cloud SQL 代理的 Google Cloud SQL (MySQL) 的無密碼使用者?

  • November 6, 2017

關於 Cloud SQL 代理的文件包含一行,“

$$ B $$因為代理總是從除了代理之外無法訪問的主機名連接,您可以創建一個只能由代理使用的使用者帳戶。這樣做的好處是您可以在沒有密碼的情況下指定此帳戶,而不會損害您的實例或數據的安全性。” 是否有任何實用的方法可以通過Google云代理連接 MySQL 客戶端,該代理使用只允許訪問特定 MySQL 使用者的服務帳戶進行身份驗證?

使用 Cloud SQL 代理時限制訪問的一種可能方法是使用 Cloud SQL 代理 IP 地址創建 MySQL 使用者帳戶'[USER_NAME]'@'cloudsqlproxy~[IP_ADDRESS]'. 但這不適用於在多個雲虛擬機上執行的服務帳戶。這基本上是通過 IP 地址而不是服務帳戶對 MySQL 使用者進行身份驗證。

將服務帳戶限制為 MySQL 使用者的第二種方法可能是使用 MySQL 使用者帳戶'[USER_NAME]'@'cloudsqlproxy~%'並依靠 IAM 來限制訪問。執行 Cloud SQL Client的Service Account需要roles/cloudsql.client角色,相當於cloudsql.instances.connectcloudsql.instances.get權限。不幸的是,如果您授予多個服務帳戶此角色,那麼看起來沒有辦法限制它們使用彼此的 MySQL 使用者。

啟用無密碼身份驗證的第三種潛在方法可能是使用客戶端證書 ( gcloud sql ssl-certs create [CERT_NAME] client-key.pem --instance [INSTANCE_NAME])。但是客戶端私鑰比密碼更難管理,因為它們在刷新伺服器證書時會在不到 1 年的時間內同時失效:“刷新伺服器證書時,還必須生成新的客戶端證書;現有的客戶證書被吊銷。” 這使得它們基本上無法在生產中使用。

基本上,Cloud SQL 代理似乎無法通過 IAM 服務帳戶對特定 MySQL 使用者進行身份驗證。它是否正確?

基本上,Cloud SQL 代理似乎無法通過 IAM 服務帳戶對特定 MySQL 使用者進行身份驗證。它是否正確?

那是對的。Cloud SQL 代理不提供任何機制來限制您在使用代理連接時有權訪問哪些 MySQL 使用者。通過代理建立的連接僅受分配給它們的任何 IAM 角色的限制。限制哪些帳戶可以訪問哪些使用者的機制是使用密碼保護。

引用自:https://serverfault.com/questions/881726