ユーザ認証方式検討 / IaC検討
まえがき
CloudSQL(PostgreSQL/MySQL)のユーザ認証方式を検討したのでここに書き記しておきます。
- ユーザ認証方式検討 (本記事)
- PostgreSQLのユーザ構成管理(IaC) -Anasible編-
- PostgreSQLのユーザ構成管理(IaC) -Terraform編-
- MySQLのユーザ構成管理(IaC) -Anasible編- (記事がかけたらリンク張る)
- MySQLのユーザ構成管理(IaC) -Terraform編- (記事がかけたらリンク張る)
比較した認証方式
Cloud IAM
- メリット
- cloud_sql_proxyがBastionの代わりを用意してくれるので踏み台サーバを用意しなくても良くなる。
- パスワードの配布をしなくても良い。
$ cloud_sql_proxy -instances=[project id]:[region]:[instance name]=tcp:5432 -enable_iam_login
$ psql "host=localhost dbname=postgres user=taro.yamada@example.com"
- デメリット
- オンプレのDBに関しては別の手法で管理する必要がある(GCP/AWSと管理方式が異なる)
- DBにアクセスする際には、都度cloud_sql_proxyを都度実行してやる必要がある。複数のDBに常日頃から接続する必要がある場合には面倒。
- その他
- 権限周りの設定ができるわけではない。
- メール名が同じでドメイン名が異なる 2 人のユーザーを追加できない
https://cloud.google.com/sql/docs/postgres/add-manage-iam-users?hl=ja- - IntelliJ / DataGripだと
postgres-socket-factory
で認証できそうだけれどできない(検証済み)。
https://www.jetbrains.com/help/datagrip/connect-to-google-cloud-sql-instances.html
組み込み認証
-
メリット
- cloud_sql_proxyを都度実行しなくても、IntelliJとかSequelでアクセスできるのは便利。
-
デメリット
- DB毎にユーザ名とパスワードを管理する必要がでてくる。
- メールなどで配信する機構を実装するのが面倒。
Okta + StrongDM
- メリット
- お金があれば管理は楽そう(未検証)。DBだけではなくいろいろなシステムに連携できるのアカウント発行運用コストも減りそう。
https://dev.classmethod.jp/articles/dive-deep-into-modern-data-saas-about-strongdm/
- お金があれば管理は楽そう(未検証)。DBだけではなくいろいろなシステムに連携できるのアカウント発行運用コストも減りそう。
ActiveDirectory
ActiveDirectoryを使っていればADも良いと思います。うちの会社では使っていませんでした。
https://cloud.google.com/blog/ja/topics/developers-practitioners/creating-sql-server-instance-integrated-active-directory-using-google-cloud-sql
LDAP
CloudSQL、RDSでは使えませんでした。
比較したIaC
Ansible
- メリット
- オンプレ、CloudSQL、RDS問わずAnsibleで一元管理ができる。
- デメリット
- CloudSQLをTerraformで管理しているばあい、DBインスタンスの構築とユーザ作成の処理を別で回さないと行けないので面倒。
Terraform
- メリット
- CloudSQLをTerraformで管理していれば、Terraformで完結させられる。
- オンプレ、CloudSQL、RDS問わずTerraformで一元管理ができる。
- デメリット
- ゼロトラストなどの理由で組み込み認証ユーザをSSH経由でのみのアクセスに制限している場合は、
local-exec
を使ったり、ssh port fowardingなどの対応が必要。(※local-exec
を使うにしても環境差異はでそうなのでGitHubAction化するか踏み台サーバ上で実行するなどが必要そう)
https://github.com/hashicorp/terraform-provider-postgresql/issues/42
- ゼロトラストなどの理由で組み込み認証ユーザをSSH経由でのみのアクセスに制限している場合は、
オマケ
メール名が同じでドメイン名が異なる 2 人のユーザーを追加できない
この記載はPostgreSQLとMySQLのドキュメントどちらにも記載があります。
MySQLに関してはその通りですが、PostgreSQLに関しては実態は違っていてメールアドレスがドメインごとフルで登録されます。メール名が同じでドメインが異なればユーザ登録も問題なく可能でした。
https://cloud.google.com/sql/docs/postgres/add-manage-iam-users?hl=ja-