phpMyAdminをセキュアに運用するためのCloudFormationテンプレート


AWS CloudFormationで得られるメリット

私の所属する開発チームではAWSへのインフラ構築時には、
インフラのドキュメント管理というムダを排除するためにCloudFormationを積極的に活用することにしています。

CloudFormationで得られるメリットには、
いわゆるInfrastructure as Codeで得られる部分と、
その構築したリソースの削除もまとめてしてくれるところだと感じています。

リソース作成と削除が単純にできることで、
必要なときだけリソースを作成して不要になったら削除するという
基本的なことが苦痛なく実行できるようになります。
そうすると、クラウドのメリットでもある利用した分だけの利用料ですみますし
作成したリソースの維持、運用にかける手間やムダも減らせて
みんなが幸せになれますので、まだの人は積極的に活用していきましょう。

今回のCloudFormationテンプレートは以下のリポジトリで公開しています。

このCloudFormationはなにが嬉しいか

普通RDSはプライベートサブネットに立てると思うのですが、
そうすると、外部から管理ツールで接続するのが面倒になりますよね。

そこで、phpMyAdminがインストールされたEC2が立ち上がって
WEB越しにRDSを管理できる環境を構築するようにテンプレートファイルを定義しています。
もちろん、すでに作成されているリソースは一切触りません。

つかいかた

CloudFormationの画面から、このテンプレートファイルでスタックを作成すると、
以下のパラメータの入力を求められますので、入力してスタックを作成してください。
リソース作成が完了すると、出力タブにphpMyAdminへのURIが出力されます。
作られたリソースを削除したい場合は、スタックを削除するだけです。

AllowIp
phpMyAdminへのアクセスを許可するIPアドレスをCIDR表記で指定します。(例:111.111.111.111/32)
ここをガバガバにすると、セキュリティリスクが高まります。

DBHost
RDSのエンドポイントを入力します。

DBPort
RDSのポート番号を入力します。

InstanceType
phpMyAdminを動かすEC2のインスタンスタイプを指定します。

LatestAmiId
起動するAMIイメージを指定します。

これがこのテンプレートファイルのポイントで、
CloudFormationで動的にAMI IDを取ってくるので
スタックを作成する度に最新のイメージでEC2が起動します。

指定可能な値はaws cliで確認可能です。


# 東京リージョンの場合
aws ssm get-parameters-by-path --path "/aws/service/ami-amazon-linux-latest" --region ap-northeast-1

RDSSecurityGroupId
RDSにアクセス許可されたセキュリティグループを選択してください。

SubnetId
RDSと同じVPCに存在するEC2を配置するパブリックサブネットを選択してください。

VpcId
RDSと同じVPCを選択してください。

構成図

CloudFormationで作成したリソースは、VPC内でこんな感じに配置されます。

さいごに

phpMyAdminはシェルコマンドでインストールしているだけなので、
インストールするアプリケーションを変更すれば、色々応用できると思います。

宣伝

2019年4月14日の技術書典6に初出典することになりました!
AWS脱初心者向けというテーマで、複数人で共同で執筆しました。
場所は「え28」になりますので、よろしければぜひ!