Configルールでウィザードで作成されるセキュリティグループが利用されていないか確認してみた | Developers.IO

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内の統制やチェックを行う参考にしていただければ幸いです。

参考