Amazon EC2 のセキュリティグループの設定にあたって次の要件を解決したいというものがありました。
- Amazon VPC に参加するインスタンスなどからだけ、RDS にアクセスを許可したい。
- 任意の IP だけ、外部アクセスを一時的に許可したい。
これらを実現を試してみました。
参考
- blog.foresta.me - Github Actions から AWS の Security Group に Public IP を追加する
- AWS CLI Command Reference - authorize-security-group-ingress
- AWS CLI Command Reference - revoke-security-group-ingress
前提
作業前段階で次の状態になっている。
- RDS が作成してある。
- パブリックアクセスは許可してある
- default のセキュリティグループ 0.0.0.0/0 が許可されている
VPC の内からのアクセスだけ許可する
以下の作業を行う。
- 新しくセキュリティグループを追加(今回は、TEST-SG とします。)
- TEST-SG にインバウンドルールを追加
- タイプ:MYSQL/Aurora
- プロトコル:TCP
- ポート範囲:3306
- ソース:カスタム
IP 範囲として、 VPC の IPv4 CIDR を記述。
- default のセキュリティグループを外す
これで、VPC 内のインスタンスからは、アクセスができるようになりました。
任意の IP だけ外部からアクセスを許可したい。
例えば、Github Actions でデータベースのマイグレーションを行いたいときに任意の IP からだけ VPC 外からアクセスを許可したいというような要件です。
なので、Github Actions で行うことを前提として、用意してみます。
- IAM ポリシーを新規に作成する
- 名前は任意(今回は、my-authorize-revoke-security-group-ingress-iam)
- 許可するアクション
- ec2:RevokeSecurityGroupIngress
- ec2:AuthorizeSecurityGroupIngress
- 認証に使用するIAM ユーザーに先に作成したポリシーを付与する
これらができたら、github actions で確認を進めます。
次のワークフローを用意します。
1 | name: Migration |
上記のワークフローを実行(deploy-hogehogeのタグをつける)と動作します。
これを動かすと、IAMユーザーを認証しパブリックIPを取得。
セキュリティーグループのルールを追加し、セキュリティグループのルールを削除します。
実行結果として、完全に終わるとTEST-SGのセキュリティルールは元に戻っています。
本当にIPを許可しているのか見るには、Security group rule remove をコメントアウトなどするとわかりやすいです。
パブリックIPをセキュリティーグループに許可している間にマイグレーション行い、閉じれば良いです。
ではでは。