CloudSQL的一些安全連線方式

2023/01/20

Cloud SQL Authorized Networks

可以透過設定固定的ip或ip range來限制CloudSQL User的存取

 

CloudSQL Proxy

ref

透過CloudSQL Proxy可在任何gcloud CLI登入的電腦

直接連上Cloud SQL

 

安裝CloudSQL Proxy Client

ref

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設定

ref

在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

ref

 

開啟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)

cloudsql-create-client-cr.png

 

設定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

ref

 

權限

首先要確認佈署的人或是SQ必須有以下Cloud SQL Client role

 

Cloud Run UI設定

可直接選取CloudSQL Instance

Cloud Run就會自動與Cloud SQL對接

可以直接存取CloudSQL的Public IP

cloudrun-cloudsql-connection.png

 

使用gcloud佈署Cloud Run的設定方式

透過gcloud run deploy command的--set-cloudsql-instances選項

可直接設定CloudSQL的Instance name來建立CloudSQL Connection

 

Cloud Run透過VPC Connector連接CloudSQL Private IP

ref

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存取資料庫

cloudrun-vpc-connector.png

使用gcloud佈署Cloud Run的設定方式

透過gcloud run deploy command的--vpc-connector--vpc-egress選項

其實就是UI上的VPC Connector兩個設定

vpc-connector選項只要設定VCP Connector的名稱即可

 

在GKE中透過CloudSQL Private IP連線至資料庫

ref

 

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