これは ZOZO Advent Calendar 2022 カレンダー Vol.5の18日目の記事です。昨日の投稿は @curry_on_a_rice さんの 「√2の肩に無限に√2を乗せると2になる振る舞いを matplotlib でリアルタイム描画する」でした。
概要
ZOZOTOWNではマイクロサービスによって技術選定が様々で、AWS Aurora MySQLも使用しております。
Aurora MySQLのユーザー・権限のIaC化を検討しており、AWS CloudFormationのカスタムリソースプロバイダーであるcfn-mysql-user-providerのお試し結果を記載します。
Aurora MySQLのIaC化状況
CloudFormationによって「Cluster/Instance, Database, Admin User」、sqldefによって「Table」をそれぞれIaC化しています。
System User, Operation Userと言ったユーザーのコード化はCloudFormation, sqldefで実施できず別途検討が必要な状態でした。
cfn-mysql-user-provider
CloudFormationのカスタムリソースプロバイダーです。
カスタムリソースを使用すると、CloudFormationテンプレートにカスタムのプロビジョニングロジックを記述することが可能になります。詳細はAWSドキュメントをご覧ください。
試した結果:ユーザー作成はできたが権限は付与できない
結論からになりますが、cfn-mysql-user-providerを使うことでCloudFormationからユーザーを作成することができました!が、作成したユーザーへの権限付与を行うことはできませんでした。
カスタムプロバイダーのインストール、カスタムリソースを使ったユーザーの作成はGitHubリポジトリのInstallationにある通りなので詳細は省きますが、下記が注意点になります。
-
VPC_ID
、SUBNET_ID
、SG_ID
はカスタムリソースのバックエンドであるLambdaのパラメーターです。接続先のAurora MySQLと接続可能なIDの指定が必要です。
下記のような簡単なCloudFormationテンプレートでAurora MySQLのユーザー作成ができました。
AWSTemplateFormatVersion: "2010-09-09"
Description: "MySQL User"
Resources:
CustomMySQLUserTest:
Type: Custom::MySQLUser
Properties:
User: hoge
Password: fuga
WithDatabase: false
DeletionPolicy: Drop
Database:
Host: <db-host>
Port: 3306
DBName: <db-name>
User: <db-user-name>
Password: <db-user-password>
ServiceToken: <lambda-service-token>
作成されたユーザー
mysql> select user,host from mysql.user where user = "hoge";
+---------------+-----------+
| user | host |
+---------------+-----------+
| hoge | % |
+---------------+-----------+
mysql> show grants for `hoge`@`%`;
+-----------------------------------+
| Grants for kamei@% |
+-----------------------------------+
| GRANT USAGE ON *.* TO 'hoge'@'%' |
+-----------------------------------+
権限付与のサポートは議論されていますが(ref. PR)、残念ながら2022/12時点で実装はされていません。
まとめ
- cfn-mysql-user-providerを試してみました
- ユーザー作成はできましたが、2022/12時点では権限の付与など細かい点の柔軟性がなくこちらのみでAurora MySQLのユーザー・権限のIaC化は難しそうでした
- Aurora MySQLのユーザー・権限のIaC化は引き続き検討していきます(sqldefの乗るKubernets JobにTerraformなどのツールを載せIaC化する方針が良さそうに思っています)
- もし、Aurora MySQLのユーザー・権限のIaC化でよい方法をご存知の方がおりましたらお気軽にコメント頂けると幸いです