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通知なし

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通知設定

  1. Inspectorのコンソールで評価テンプレート'の該当のテンプレートのSNSトピック`をクリックします

  2. 「イベントについて通知する新しいSNSトピックを選択します」をクリックして CloudFormationで作成したSNSトピックを選択します。

  3. トピックに追加されるので、追加したいイベントを選択します。

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の確認

  1. Preview Targetをクリックします
  2. Agent StatusUNKNOWNの場合、インストールされていない、もしくネットワークの接続性に問題がある可能性があります。
  3. Agent StatusHEALTHYの場合は、インストールされていますので特に作業は必要ありません。

Inspector Agentのインストール

  1. Install Agents with Run Command をクリックします
  2. 5~10分後に、再度Preview Targetをクリックして
  3. Agent StatusHEALTHYになってていれば、Agentのインストールは成功しています。

Inspectorの実行

ここまでくれば、Inspectorの実施は可能な状況となります。

  1. 画面左側の「評価テンプレート」をクリックして
  2. Amazon Inspector - 評価テンプレートから実行するテンプレートを選択します。
  3. 「実行」をクリックして、評価を実行します。

結果の確認

  1. Inspector の実行が完了しましたら。「結果」の内容を確認して、
    内容にそって、パッチを当てる等対応を行います。

不要な場合は削除

CloudFormationから作成していますので、不要になった際はスタックを削除するだけですが 実行結果も消えてしまうので、削除は慎重に
ここら辺は、CloudFormationはお手軽ですね(^^♪
また、ルールや実行間隔の更新なども管理できるので、オペレーションミスの防止
また構成管理にも役立つのではないでしょうか。

参考URL

Inspector ユーザーガイド
https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_introduction.html

InspectorでAmazon Linux 2の脆弱性診断に対応したのでやってみた

InspectorでAmazon Linux 2の脆弱性診断に対応したのでやってみた

Amazon Inspectorの実行状態をAmazon SNSでメール通知する

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の実施していくことが大事ではないかと思います。
どなたかのセキュリティ対策に役立てば幸いです。