AWS Config Rules でルールに違反するAWSリソースを操作したい

記事タイトルとURLをコピーする


みなさんこんにちは。
技術研究課の山田です。

さて、今回は AWS Config Rules についての記事になります。

はじめに

何かブログを書くネタは無いかなーと AWS Config Rules の「よくある質問」を読んでいてふと思いつきました。
 

AWS Config Rules のプレビュー - よくある質問

Config Rules はコンプライアンスに違反しているリソースを自動的に修正するサービスでもありません。

これって、Customer Managed Rules なら出来るのでは ... 。
違反したリソースを自動で修正とか削除とかしてくれたら便利なのでは ... !

ということで、Customer Managed Rules でやってみました。
Config Rules って何?、Customer Managed Rulesって何? という方は以前の記事をご確認ください!

Customer Managed Rules の作成

まずは、ベースとなる Customer Managed Rules を作成しましょう。
今回はAWS公式のチュートリアルそのままの設定値で、 Customer Managed Rule を作成します。
「インスタンスが指定したインスタンスタイプで起動していない場合」に警告する、というルールです。

また、Customer Managed Rules は AWS Lambda を利用して独自ルールを定義するのですが、これもチュートリアルの内容をそのままコピペします。

Developing a Custom Rule for AWS Config (Node.js)

 

config_6


ルールに違反するリソースがあった場合に、対象リソースの操作を行うので Lambda function に紐付けるロールへ下記権限を付与してください。
今回は違反したインスタンスがあった場合にインスタンスを Stop するので ec2:StopInstances を追加します。

 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:StopInstances",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "s3:GetObject",
        "config:PutEvaluations"
      ],
      "Resource": "*"
    }
  ]
}

 

Rule parameters という項目で、ルールのチェック処理に引き渡すパラメーターを Key, Value の形式で指定します。
今回は、desiredInstanceType というパラメータで正とするインスタンスタイプを指定して、autoFix というパラメータでルールの on/off を切り替えられるようにしました。
autoFix パラメータを true にすることでルールが有効化、false にすることで無効化されます。

 

config_2

 

そして、先ほど書いたように Customer Managed Rules で使用する AWS Lambda のコードはチュートリアルの内容をそのままコピペして使いますが、少しだけ手を加えます。
具体的には putEvaluations のコールバックの中で EC2 Instance の Stop 操作を行うコードを追加します。

 

リソースの起動

では、確認のために EC2 Instance を起動してみましょう。
インスタンスタイプが t2.micro で起動している状態を正とするので、t2.small を起動します。
 

config_3

 

暫く待つと定義したルールが動作して、t2.small の EC2 Instance がストップしました!
 

config_4

最後に

こういう使い方が正しいのかどうか分かりませんが、Customer Managed Rules の一つの利用例をご紹介しました。
AWS Config Rules は現在プレビュー版で、使ってみたブログが余り上がっていない状態なので、他の方がどのように使っているのか色々と見てみたいですね。