CloudSQL
#MySQL #GoogleCloud
Cloud SQL とは  |  Cloud SQL ドキュメント  |  Google Cloud
Cloud SQL のよくある質問  |  Cloud SQL ドキュメント  |  Google Cloud
MySQL フラグ周り
データベース フラグを構成する  |  Cloud SQL for MySQL  |  Google Cloud
これらのフラグにデフォルト以外の設定を使用するインスタンスは、Cloud SQL SLA の対象外になります。
えー
フラグの使用に関するヒント - データベース フラグを構成する  |  Cloud SQL for MySQL  |  Google Cloud
Cloud SQL で管理されるフラグ - データベース フラグを構成する  |  Cloud SQL for MySQL  |  Google Cloud
データベース フラグ値 - MySQL インスタンスのオペレーション ガイドライン  |  Cloud SQL for MySQL  |  Google Cloud
CloudSQLProxy のインストール
$ gcloud components install cloud_sql_proxy
パスは gcloud#5d00c6eebbf73900004a1c0b で通してもいい
$ $(gcloud info --format="value(installation.sdk_root)")/bin/cloud_sql_proxy
Docker で CloudSQL Proxy を立てる
GitHub - GoogleCloudPlatform/cloudsql-proxy: Cloud SQL proxy client and Go library
gcr.io/cloudsql-docker/gce-proxy を使う
ただし 1.17 からデフォルトで distroless になったので、環境変数で接続先変える shell script をマウントしたりコピーしたりして起動するのができなくなった、gcr.io/cloudsql-docker/gce-proxy:1.17-alpine などを使う
インスタンスごとに接続できるサービスアカウント
Cloud IAM の話かも
Cloud SQL のロールと権限  |  Cloud SQL for MySQL  |  Google Cloud
インスタンスのアクセス制御  |  Cloud SQL for MySQL  |  Google Cloud
CloudSQL IAM permissions per CloudSQL instance 68765990 - Visible to Public - Issue Tracker
インスタンス単位の制御はまだない
つまり roles/cloudsql.client を持ってたら同プロジェクトに接続することは可能
MySQL レベルの user & password で制御する
サービスアカウントキーではない認証
CloudSQL Proxy はアクセストークンでも認証できる
Cloud SQL Proxy を認証するためのオプション - Cloud SQL Proxy について  |  Cloud SQL for MySQL  |  Google Cloud
アクセス トークンを作成し、Cloud SQL Proxy の起動時、コマンドラインでこのアクセス トークンを -token フラグとともに指定します。
有効期間が短いサービス アカウント認証情報の作成  |  Cloud IAM のドキュメント  |  Google Cloud
gcloud auth print-access-token  |  Cloud SDK のドキュメント  |  Google Cloud で作成できる?
作成したやつを -token=<TOKEN> に指定したら認証できた
サービスアカウントキーを作るより有効期限が短いし良いかと思ったけど微妙で
作業者のアカウントは大抵強力
サービスアカウントのトークンを生成するにはサービスアカウントキーが必要そう
For service account, please activate it first:
$ gcloud auth activate-service-account ACCOUNT
role 絞った管理用サービスアカウントで、使う時にキーを発行して終わったら失効させる、あたりがいいかなあ
作業者に、管理用サービスアカウントのアクセストークンを発行できる権限、みたいなのを割り当てられないのかな
サービス アカウントの権限借用の管理  |  Cloud IAM のドキュメント  |  Google Cloud
サービス アカウント トークン作成者(roles/iam.serviceAccountTokenCreator): 認証に使用できるように OAuth 2.0 アクセス トークンの作成、JSON Web Token(JWT)への署名、バイナリ blob への署名をサービス アカウントとして行うことをメンバーに許可します
なのでなんかやったらできそう
あるサービスアカウントを利用するには
サービスアカウントユーザー/トークン作成者になって間接的に使う
サービスアカウントのキーを発行して使う
の2つで、大抵後者が紹介される
code:curl
$ curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"scope": ["https://www.googleapis.com/auth/iam","https://www.googleapis.com/auth/cloud-platform"]}' \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SANAME@PROJECT.iam.gserviceaccount.com:generateAccessToken'
で取れる、期限が短いのでよさそうだけど、ロールを作業者に付与するのがちょっとめんどい
メンテナンス不要期間
メンテナンス不要期間を構成する - メンテナンスの時間枠の検索と設定  |  Cloud SQL for MySQL  |  Google Cloud
毎月末を指定したらいいかと思ったけど年に1回使えるスペシャル技のような扱いだった
#GoogleCloud