Amazon Inspector v2のレポート作成(S3へのエクスポート)を試してみる

2022.10.17

Amazon Inspectorは EC2インスタンス、ECRリポジトリの脆弱性スキャンサービスです。

Inspector で発見された各種脆弱性の情報は「 検出結果(Findings) 」として保存されます。

この検出結果を S3へレポート出力 できるようになったみたいです。

Added procedures, policy examples, and tips for exporting findings reports from Amazon Inspector to an Amazon Simple Storage Service (Amazon S3) bucket.

October 14, 2022

Document history for the Amazon Inspector User Guide - Amazon Inspector

さっそくこの機能を試してみました。

内容まとめ

  • 本機能の公式ドキュメントは ココ
  • 検出結果をS3バケットにエクスポートする
    • S3バケット出力には「KMSのカスタマー管理キー(対象暗号化)」が必要
  • 対応するAPI(CLI)は inspector2:CreateFindingsReport
  • 形式はCSVもしくはJSONから選択
  • デフォルトではActiveステータスの全検出結果を出力する
    • フィルタを使って、他ステータス( Suppressed など)や 特定項目 (リソース単位や脆弱性単位など)に、エクスポート範囲をカスタマイズできる
  • マルチアカウント利用の場合、委任管理者のアカウント上で「全てのメンバーアカウントの検出結果」をレポート可能

以降で公式ドキュメント記載のステップどおりに、レポート作成を試してみました。

事前準備

権限周り

レポート出力には inspector2:CreateFindingsReport を使います。 AWS CLIにも対応するコマンド inspector2 create-findings-report がありました。

※その他、前提条件となる権限周り説明は割愛します。公式ドキュメント をご覧ください。

S3バケットの準備

レポート格納用のS3バケットを作成します。

S3バケットはInspectorを使っている(検出結果がある)リージョンと同じにする必要があります。

バケットポリシーには 「Inspector2からのオブジェクトアップロードを許可する」ステートメントを追加します。 公式ドキュメントにあるポリシー例を自身の環境に合わせて、バケットポリシーを適用します。 今回は東京リージョン(ap-northeast-1)上で確かめるので、以下のようなバケットポリシーとしました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allow Amazon Inspector to add objects to the bucket",
      "Effect": "Allow",
      "Principal": {
        "Service": "inspector2.amazonaws.com"
      },
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::${自身のバケット名}/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "${AWSアカウントID}"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:inspector2:ap-northeast-1:${AWSアカウントID}:report/*"
        }
      }
    }
  ]
}

KMSキーの準備

S3バケットにレポート出力する際に「KMS カスタマー管理キー(対称)の指定」が必須です。

マネコンにて KMS カスタマー管理キー(対称)を作成します。 キーポリシーに以下のようなステートメントを追記しました。

{
  "Sid": "Allow Amazon Inspector to use the key",
  "Effect": "Allow",
  "Principal": {
    "Service": "inspector2.amazonaws.com"
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "aws:SourceAccount": "${AWSアカウントID}"
    },
    "ArnLike": {
      "aws:SourceArn": "arn:aws:inspector2:ap-northeast-1:${AWSアカウントID}:report/*"
    }
  }
}

レポート出力してみる

S3バケットへレポート出力してみます。 [Inspector > 検出結果] ページから [検出結果をエクスポート] を選択します。

img

今回はフィルターは特に設定せずに、CSV出力してみます。 「S3 URI」 や 「KMSキー」に事前準備で設定したリソースを指定します。

img

正常にレポートが作成できれば、Inspectorマネコン上部に通知が出てきます。

img

S3バケットにCSVが格納されていること確認できました。

img

出力を確認

CSVを見てみます。 中身はこんな感じ。

img

列名の一覧を載せます。合計47項目あります。多いですね。

  • AWS Account Id
  • Severity
  • Fix Available
  • Finding Type
  • Title
  • Description
  • Finding ARN
  • First Seen
  • Last Seen
  • Last Updated
  • Resource ID
  • Container Image Tags
  • Region
  • Platform
  • Resource Tags
  • Affected Packages
  • Package Installed Version
  • Fixed in Version
  • Package Remediation
  • File Path
  • Network Paths
  • Age (Days)
  • Remediation
  • Inspector Score
  • Inspector Score Vector
  • Status
  • Vulnerability Id
  • Vendor
  • Vendor Severity
  • Vendor Advisory
  • Vendor Advisory Published
  • NVD CVSS3 Score
  • NVD CVSS3 Vector
  • NVD CVSS2 Score
  • NVD CVSS2 Vector
  • Vendor CVSS3 Score
  • Vendor CVSS3 Vector
  • Vendor CVSS2 Score
  • Vendor CVSS2 Vector
  • Resource Type
  • Ami
  • Resource Public Ipv4
  • Resource Private Ipv4
  • Resource Ipv6
  • Resource Vpc
  • Port Range
  • Reference Urls

量が多いのでいくつか、よく見そうな項目にピックアップして整理してみました。

img

特定脆弱性( "Title" or "Vulnerability ID" ) やリソース ( "Resource ID or Resource Tags" )、 重大度( "Severity or Inspector Score" )など、手元でフィルタリングできるのは嬉しいですね。

おわりに

Inspector v2のレポート作成を試してみました。 委任管理者のアカウントから全メンバーアカウントの情報をレポートできるのは嬉しいです。 API・CLI対応なのでレポート作成の自動化も捗りそうです。

以上、参考になれば幸いです。

参考