Amazon Inspector を CloudFormationで一撃設定してみる。(SNS設定手動)
梶原(ambasad)です。 先日、Amazon Inspectorを実施する機会があったのですが、 折角なので、大好きなCloudFormationで設定してみました。
実際にInscpectorを動かす部分はコンソールまたはCLIからの実行, もしくはスケジュールでの起動を待つことになります。
また、Agentの導入が後付けになってしまいますが、 Inspectorのコンソールが更新されており、 Inspector AgentがInspectorの画面から手軽に導入できるようになっていましたので そちらからのAgent導入方法もご案内します。
後日追記 SNSの通知のClodFormationでの設定は下記ブログのエントリーで記載しています https://dev.classmethod.jp/cloud/aws/cfn-api-custom/
今回設定する内容
対象
- 指定したタグが設定されたインスタンス 今回は"Inspector:true"がタグ付けされたインスタンス
ルール
- 共通脆弱性識別子
- CIS オペレーティングシステムのセキュリティ設定ベンチマーク
評価の実行の時間
- 3600秒(1時間)
SNS通知
- E-Mail通知
Insupectorの実施間隔
- 7日間
参考情報 指定可能なルールパッケージ名
なお、「共通脆弱性識別子」、「CIS オペレーティングシステムのセキュリティ設定ベンチマーク 」 以外にも下記ルールが設定できますので、CloudFormationのコメント部分を変更してみてください。
※東京リージョン
ルールパッケージ名 | ARN | 備考 |
---|---|---|
共通脆弱性識別子 | arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-gHP9oWNT | - |
CIS オペレーティングシステムのセキュリティ設定ベンチマーク | arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu | - |
セキュリティのベストプラクティス | arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq | - |
実行時の動作の分析 | arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-knGBhqEu | - |
各リージョンで指定可能なAmazon Inspector のルールパッケージの 一覧は下記URLに記載があります https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_rules-arns.html
CloudFormaionの実行
コンソールからまたは、CloudFormationを実行します。
タグキーと値ここではInspector:trueをデフォルトでいれてますので
対象の環境に応じてタグキーと値を変更してください。
また、「AWS CloudFormation によってカスタム名のついた IAM リソースが作成される場合があることを承認します。」
のチェックをいれて実行します
E-Mail通知ありの場合 SNS通知を行うE-Mailアドレスをパラメータとして入力します。
実行しやすいようにS3上にテンプレートをアップロードしています。 E-Mail通知なし: https://s3-ap-northeast-1.amazonaws.com/pub-devio-blog-qrgebosd/template/cfn-inspector.yml E-Mail通知あり: https://s3-ap-northeast-1.amazonaws.com/pub-devio-blog-qrgebosd/template/cfn-inspector-sns.yml
また、以下URLをクリックすることにより、必要なパラメータ等が入力されたら状態でCloudFormationのスタック作成画面になります E-Mail通知なし
CloudFormationファイル 抜粋
以下、CloudFormationファイルの内容になります。
AWS::Inspector::ResourceGroup
で対象を指定
AWS::Inspector::AssessmentTemplate
の部分で、ルールや、実行時間を指定します。
詳しい値の詳細は、マニュアルをご参照ください。
Parameters: ResourceGroupTagKey: Type: String Default: "Inspector" Description: Input Tag Key ResourceGroupTagValue: Type: String Default: "true" Description: Input Tag Value Resources: MyInspectoryResourceGroup: Type: AWS::Inspector::ResourceGroup Properties: ResourceGroupTags: - Key: !Ref ResourceGroupTagKey Value: !Ref ResourceGroupTagValue MyInspectorTarget: Type: AWS::Inspector::AssessmentTarget Properties: ResourceGroupArn: !Ref MyInspectoryResourceGroup MyInspectorTemplate: Type: AWS::Inspector::AssessmentTemplate Properties: AssessmentTargetArn: !Ref MyInspectorTarget DurationInSeconds: 3600 RulesPackageArns: # Common Vulnerabilities and Exposures - arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-gHP9oWNT # CIS Operating System Security Configuration Benchmarks - arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu # Security Best Practices # - arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq # Runtime Behavior Analysis # - arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-knGBhqEu
CloudFormationの設定がおわりましたら、SNSの通知を実施します。 E-MAILなしの方はSNS通知設定はスキップしてください。
AWS コンソールでのSNS通知設定
- Inspectorのコンソールで
評価テンプレート'の該当のテンプレートの
SNSトピック`をクリックします -
「イベントについて通知する新しいSNSトピックを選択します」をクリックして CloudFormationで作成したSNSトピックを選択します。
-
トピックに追加されるので、追加したいイベントを選択します。
AWS CLI でのSNS通知設定
同じことをCLIで実施してみます。
$ templatesArn=$(aws cloudformation describe-stacks \ --stack-name cfn-inspector-sns \ --query 'Stacks[].Outputs[?OutputKey==`MyInspectorTemplateArn`].[OutputValue]' \ --output text)
※StackName cfn-inspector-sns
は作成した際のスタック名に変更してください。
または
$ templatesArn=$( aws inspector list-assessment-templates \ --query assessmentTemplateArns[0] \ --output text)
※補足 Topicが1件以上ある場合はassessmentTemplateArns[0] の値を調整してください。
# 値が入っているか確認 echo $templatesArn arn:aws:inspector:ap-northeast-1:123456789012:target/xxxxx/template/xxxxx
topicArn=$(aws cloudformation describe-stacks \ --stack-name cfn-inspector-sns \ --query 'Stacks[].Outputs[?OutputKey==`MySNSTopicPolicyArn`].[OutputValue]' \ --output text)
または
topicArn=$(aws sns list-topics \ --query Topics[0].TopicArn \ --output text)
※補足 Topicが1件以上ある場合はTopics[0]の値を調整してください。
# 値が入っているか確認 echo $topicArn arn:aws:sns:ap-northeast-1:123456789012:cfn-inspector-sns-InspectorSnsTopic-xxxxxxx
通知設定
コンソールでの通知設定と同様なCLIは以下になります。
# 実行開始に通知 aws inspector subscribe-to-event \ --event ASSESSMENT_RUN_STARTED \ --resource-arn $templatesArn \ --topic $topicArn # 実行完了時に通知 aws inspector subscribe-to-event \ --event ASSESSMENT_RUN_COMPLETED \ --resource-arn $templatesArn \ --topic $topicArn
Inspector Agentのインストール
前提条件
対象となるインスタンスにAmazonEC2RoleforSSM
が含まれているRoleが割り当てられている必要があります
Inspector Agentの確認
Preview Target
をクリックしますAgent Status
がUNKNOWN
の場合、インストールされていない、もしくネットワークの接続性に問題がある可能性があります。Agent Status
がHEALTHY
の場合は、インストールされていますので特に作業は必要ありません。
Inspector Agentのインストール
Install Agents with Run Command
をクリックします- 5~10分後に、再度
Preview Target
をクリックして Agent Status
がHEALTHY
になってていれば、Agentのインストールは成功しています。
Inspectorの実行
ここまでくれば、Inspectorの実施は可能な状況となります。
- 画面左側の
「評価テンプレート」
をクリックして Amazon Inspector - 評価テンプレート
から実行するテンプレートを選択します。「実行」
をクリックして、評価を実行します。
結果の確認
- Inspector の実行が完了しましたら。「結果」の内容を確認して、 内容にそって、パッチを当てる等対応を行います。
不要な場合は削除
CloudFormationから作成していますので、不要になった際はスタックを削除するだけですが 実行結果も消えてしまうので、削除は慎重に ここら辺は、CloudFormationはお手軽ですね(^^♪ また、ルールや実行間隔の更新なども管理できるので、オペレーションミスの防止 また構成管理にも役立つのではないでしょうか。
参考URL
Inspector ユーザーガイド https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_introduction.html
InspectorでAmazon Linux 2の脆弱性診断に対応したのでやってみた
Amazon Inspectorの実行状態をAmazon SNSでメール通知する
Developers.IO Amazon Inspectorカテゴリ https://dev.classmethod.jp/referencecat/aws-inspector/
Amazon Inspector 料金 https://aws.amazon.com/jp/inspector/pricing/
まとめ
現時点では一部手動で対応する必要があるものの Inspectorの導入はかなり手軽にできる状況でした。 実際の運用では、Inspector実施するのみでなく、 Inspectorを実施した後に、脆弱性の対応を行う。 また、定期的にInspectorの実施していくことが大事ではないかと思います。 どなたかのセキュリティ対策に役立てば幸いです。