はじめに
Amazon InspectorによるEC2のセキュリティ脆弱性評価について、定期的に自動実行したいケースがあるかと思います。
AWS Lambdaファンクションは「Trigges」の「CloudWatch Events - Schedule」機能を利用する事で、指定したタイミングでAWS Lambdaファンクションを自動的に実行させる事が可能です。
AWS Lambdaファンクション(Node.js) または crontab で、Amazon InspectorによるEC2のセキュリティ脆弱性評価を定期的に実行する方法を以下に記します。
参考資料
本手順で脆弱性評価を実行するEC2インスタンス(Amazon Linux)、AWS Lambdaファンクションは以下の手順で作成したものを利用しております。
AWS Lambda で Amazon Inspector によるEC2のセキュリティ脆弱性評価を実行する
http://qiita.com/na0AaooQ/items/9cfd66ac0e83de651f98
crontabでEC2セキュリティ脆弱性評価を定期的に実行する
(1) Amazon InspectorによりEC2セキュリティ脆弱性評価を実行するバッチを作成します。
Amazon InspectorによりEC2セキュリティ脆弱性評価を実行するバッチを作成します。
[ec2-user@example-server ~]$ vi /home/ec2-user/start_amazon_inspector.sh
#!/bin/bash
date
/usr/bin/aws inspector start-assessment-run --region ap-northeast-1 --assessment-template-arn "arn:aws:inspector:ap-northeast-1:XXXXXXXXXXXX:target/0-XXXXXXXX/template/X-XXXXXXXX" --assessment-run-name "`/bin/hostname`-`/bin/date '+%Y%m%d-%H%M%S'`"
date
[ec2-user@example-server ~]$ cat /home/ec2-user/start_amazon_inspector.sh
#!/bin/bash
date
/usr/bin/aws inspector start-assessment-run --region ap-northeast-1 --assessment-template-arn "arn:aws:inspector:ap-northeast-1:XXXXXXXXXXXX:target/0-XXXXXXXX/template/X-XXXXXXXX" --assessment-run-name "`/bin/hostname`-`/bin/date '+%Y%m%d-%H%M%S'`"
date
[ec2-user@example-server ~]$
(2) 作成したバッチに構文エラーない事を確認します。
[ec2-user@example-server ~]$ sh -n /home/ec2-user/start_amazon_inspector.sh
[ec2-user@example-server ~]$
(3) 作成したバッチに実行権限を設定します。
[ec2-user@example-server ~]$ chmod 755 /home/ec2-user/start_amazon_inspector.sh
[ec2-user@example-server ~]$
(4) crontabにバッチを登録し、Amazon InspectorによるEC2セキュリティ脆弱性評価を定期的に実行します。
[ec2-user@example-server ~]$ crontab -l
MAILTO=example@example.com
## Amazon Inspectorによるセキュリティ脆弱性評価を自動実行する(毎日20:10に脆弱性評価を自動実行する)
10 20 * * * /home/ec2-user/start_amazon_inspector.sh > /tmp/AmazonInspector.log 2>&1
[ec2-user@example-server ~]$
(5) 指定した時間になったら、crontabでバッチが実行されて、Amazon InspectorによるEC2セキュリティ脆弱性評価が自動的に開始される事を確認します。
[ec2-user@example-server ~]$ cat /tmp/AmazonInspector.log
Mon Nov 21 20:06:00 JST 2016
{
"assessmentRunArn": "arn:aws:inspector:ap-northeast-1:XXXXXXXXXXXX:target/0-XXXXXXXX/template/X-XXXXXXXX/run/0-XXXXXXXX"
}
Mon Nov 21 20:06:01 JST 2016
[ec2-user@example-server ~]$
AWS LambdaでEC2セキュリティ脆弱性評価を定期的に実行する
(6)「AWSマネジメントコンソール」で「Lambda」を表示します。
(7) Amazon InspectorによりEC2セキュリティ脆弱性評価を実行するLambdaファンクションを表示します。
「AWSマネジメントコンソール」->「Lambda」->「Functions」をクリックします。
Amazon InspectorによりEC2セキュリティ脆弱性評価を実行するLambdaファンクションを選択します。
(8) Lambdaファンクションの内容が表示されます。「Code」タブをクリックして、以下のようなコードになっている事を確認します。
'use strict';
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Inspector.html#startAssessmentRun-property
var AWS = require('aws-sdk')
, inspector = new AWS.Inspector({ apiVersion: '2016-02-16' })
;
exports.handler = (event, context) => {
console.log('Start Amazon Inspector AssessmentRun');
// Add timedate to description
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hour = date.getHours();
var minutes = date.getMinutes();
if ( day < 10 ) {
day = '0' + day;
}
// UTC to JST
hour += 9;
if ( hour < 10 ) {
hour = '0' + hour;
}
if ( minutes < 10 ) {
minutes = '0' + minutes;
}
var assessmentRunDate = '-' + year.toString() + month.toString() + day.toString() + '-' + hour.toString() + minutes.toString();
var params = {
assessmentTemplateArn: 'arn:aws:inspector:ap-northeast-1:XXXXXXXXXXXX:target/0-XXXXXXXX/template/X-XXXXXXXX',
assessmentRunName: 'example-server' + assessmentRunDate
};
inspector.startAssessmentRun(params, function(err, data) {
if (err) context.done(err, err.stack);
else context.done(null, data);
});
};
(9)「Triggers」タブをクリックします。
(10)「Triggers」タブの「Add trigger」をクリックします。
(11)「Add trigger」画面が表示されます。白抜き点線ボックスをクリックします。
(12)「CloudWatch Events - Schedule」をクリックします。
(13)「Add trigger」画面が表示されます。Lambdaファンクションを定期的に実行する為にトリガーを作成します。作成するトリガー設定を入力して「Submit」をクリックします。
設定項目 | 設定例 | 備考 |
---|---|---|
Rule name | example-lambda-amazon-inspector-assessment | |
Rule description | example-lambda-amazon-inspector-assessment | |
Schedule expression | cron(35 11 ? * MON-FRI *) | Lambdaファンクション実行時間はUTCで指定します。JST 20:35にLambdaファンクションを実行させたい場合、左記のように指定します。 |
「Enable trigger」にはチェックをつけて「Submit」をクリックします。これにより、Lambdaファンクションを定期的に実行する設定が登録されます。
(14) 指定した時間になったら、AWS Lambdaファンクションが実行されて、Amazon InspectorによるEC2セキュリティ脆弱性評価が自動的に開始される事を確認します。
AWS Lambdaやcrontabを利用する事で、Amazon InspectorによるEC2のセキュリティ脆弱性評価を定期的に実行する事が出来るので便利ですね。
以上になります。