Configルールでウィザードで作成されるセキュリティグループが利用されていないか確認してみた
EC2をウィザードに従って作成すると、launch-wizard-xという名前のセキュリティグループが作成されます。
launch-wizard-xを使う事自体に問題はありませんが、launch-wizard-xが本番環境で利用されている環境では、許可ルールが緩くなっていたり、ルールが意図しないインスタンスに割り当てられている事があります。
AWS Config Rulesを使って、launch-wizard-xがENIに割り当てられていないか確認してみました。
カスタムルールの作成
カスタムルールは AWS Lambda 関数と関連付けます。
1から関数を作成する事もできますが、awslabsで公開されているec2_launch_wizard_security_group_prohibited.pyを利用しました。
ec2_launch_wizard_security_group_prohibited.pyは、名前にlaunch-wizardが付いたセキュリティグループがENIに関連づけられていないか確認します。
Lambda関数の作成
Lambdaコンソールを開き、"関数の作成"を選択します。
名前は任意ですが、ec2_launch_wizard_security_group_prohibited
としました。
Python3.6を選択し、カスタムロールを作成します。
IAMロールの作成
新しいロールを作成します。
ロール名は"lambda_configrules_execution"としました。
ポリシーは、こちらに表示されているものを記載します。
検証で設定したポリシーは以下の通りです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "config:PutEvaluations" ], "Resource": "*" } ] }
コードの入力
こちらのコードを入力し、保存します。
Configルールの作成
Configコンソールから、ルールの追加を選択します。
カスタムルールの追加を選択します。
ルール名はlambda_configrules_executionとしました。
説明文は任意の値を設定できますが、35. Check that SGs prefixed with "launch-wizard" are not associated with ENIs.のDescriptionを利用しました。
Lambda関数のARNは関数の編集画面上部で確認できます。
トリガータイプは設定の変更とし、EC2: NetworkInterfaceが変更された時にチェックします。
ルールのパラメーターは空で保存します。
評価結果の確認
正常にルールを作成できると、評価結果を確認できます。
以下の例では"準拠"した状態です。
違反するEC2の作成
EC2の作成ウィザードから、EC2を作成します。
EC2には"launch-wizard-1"というセキュリティグループが割り当てられました。
しばらく待つとルールの再評価が行われ、1つのリソースが準拠していない旨が表示されます。
おわりに
AWS Config Rulesを使って、launch-wizard-xがENIに割り当てられていないか確認してみました。
ConfigルールでAWS内の統制やチェックを行う参考にしていただければ幸いです。