CloudSQL的一些安全連線方式
Cloud SQL Authorized Networks
可以透過設定固定的ip或ip range來限制CloudSQL User的存取
CloudSQL Proxy
透過CloudSQL Proxy可在任何gcloud CLI登入的電腦
直接連上Cloud SQL
安裝CloudSQL Proxy Client
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
# 放到/usr/bin中方便在任何地方使用
sudo mv ./cloud_sql_proxy /usr/bin/
Authorized Networks設定
在CloudSQL的authorized networks設定中
host必須設定為"cloudsqlproxy~%"
即可讓任何位置使用CloudSQL Proxy的人連上
當然也可以限制ip或ip range
host要設定為"cloudsqlproxy~[ip-address]"
連接方式
用法透過port-forward的方式為將CloudSQL的連線轉至本機的指定port上
# 格式
cloud_sql_proxy -instances={PROJECT_NAME}:{REGION}:{INSTANCE_NAME}=tcp:0.0.0.0:{FORWARD_PORT}
# 範例
cloud_sql_proxy -instances=project_foobar:asia-east1:my-db=tcp:0.0.0.0:3307
使用phpmyadmin增加CloudSQL連線
如果使用phpmyadmin
可在phpmyadmin的設定檔/etc/phpmyadmin/config.inc.php中
可加入以下設定來新增連線連接CloudSQL
$i++;
$cfg['Servers'][$i]['verbose'] = 'my-db';
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3307';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'db-user';
$cfg['Servers'][$i]['password'] = 'db-pw';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
SSL Connection
開啟SSL Connection
Connections > Security > Allow only ssl connections(勾選後會restart server)
建立server憑證
點擊create new certificate
建立成功後會出現一個download按鈕可以下載server憑證(server-ca.pem)
建立client憑證
點擊create client certificate後
將會出現三種憑證可供下載
直接下載client的憑證(client-cert.pem)跟key(client-key.pem)
設定Authorized Networks
一樣要設定ip或ip range
連線方式
mysql -u[username] -p -h [public-ip] --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
Cloud Run透過CloudSQL Connection連接CloudSQL Public IP
權限
首先要確認佈署的人或是SQ必須有以下Cloud SQL Client role
Cloud Run UI設定
可直接選取CloudSQL Instance
Cloud Run就會自動與Cloud SQL對接
可以直接存取CloudSQL的Public IP
使用gcloud佈署Cloud Run的設定方式
透過gcloud run deploy command的--set-cloudsql-instances選項
可直接設定CloudSQL的Instance name來建立CloudSQL Connection
Cloud Run透過VPC Connector連接CloudSQL Private IP
Cloud Run預設的VPC為None
如果要將Cloud Run連接CloudSQL
必須使用VPC Connector來連接
VPC Connector是提供GCP Serverless服務來直接連到VPC內部的資源
Cloud Run UI設定方式
只要建立一個與CloudSQL同subnet的VPC Connector
Cloud Run即可在"NETWORKGING"設定中直接選擇VPC Connector
這時候Cloud Run內部就可以直接透過CloudSQL的Private IP存取資料庫
使用gcloud佈署Cloud Run的設定方式
透過gcloud run deploy command的--vpc-connector及--vpc-egress選項
其實就是UI上的VPC Connector兩個設定
vpc-connector選項只要設定VCP Connector的名稱即可
在GKE中透過CloudSQL Private IP連線至資料庫
GKE Cluster設定
建立cluster的時候
必須將cluster與CloudSQL DB設定在同一個的vpc與subnetwork中
CloudSQL Authorized Networks設定
因為預設GKE Pod的ip range都是"10.0.0.0/8"
要調整可在建立的時候使用--cluster-ipv4-cidr選項來調整
接著只要在CloudSQL User的host中設定為Pod的ip range
即可從pod透過private ip連線至CloudSQL