暇 ひまネタNEWS(^o^) | スキマ時間にちょっとしたネタを提供スキマ時間に、話題のまとめを一気読み 全サイト自動巡回中
HIMA NETA ORIGINAL READER
本文だけモード DevelopersIO IT・ガジェット 約10分で読めます

[アップデート] Amazon Inspector を有効化せずに AMI をオンデマンドスキャンしてみた

読みやすさ この端末に設定を保存します
書体
文字
背景

広告・ランキング・関連記事を除き、配信元の安全な文字装飾だけを残しています。

はじめに

Amazon Inspector で、AMI を手軽にスキャンできるオンデマンドスキャンが使えるようになりました。

https://docs.aws.amazon.com/inspector/latest/user/machine-image-on-demand.html

これまで Inspector で AMI の脆弱性を調べるには、AMI からインスタンスを起動し、そのインスタンスをスキャンする必要がありました。

オンデマンドスキャンでは AMI のスナップショットを直接読み取るので、インスタンスを起動せずに直接スキャンできます。また、Inspector が無効のアカウントでもスキャン可能とのことです。

結果の受け取り方については、ドキュメントによって書かれていることが異なります。Inspector のドキュメントには「結果は Amazon EventBridge だけに届く」と書かれていますが、EC2 のドキュメントには「結果が EC2 に送られ、EC2 の API で取得できる」と書かれています。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-scanning.html

そこで、この記事では Inspector を無効にしたアカウントで AMI をスキャンし、結果の届き方を確かめてみようと思います。

検証環境

Inspector を無効にしたアカウントで検証します。また、オンデマンドスキャンの対象にできるのは自分のアカウントが所有する AMI のみなので、Amazon Linux 2023 の公開 AMI を 2 つ自分のアカウントにコピーしておきます。

用途 コピー元の AMI 名 コピー後の AMI ID
脆弱性が多い AMI al2023-ami-2023.0.20230315.0-kernel-6.1-x86_64 ami-07d2ba94d48bca823
脆弱性が少ない AMI al2023-ami-2023.12.20261028.0-kernel-6.1-x86_64 ami-08b070da26a7579d0

EventBridge に届くイベントは、デフォルトのイベントバスのルールで受け取り、CloudWatch Logs に保存しました。

スキャンを実行する

start-on-demand-scan に AMI ID を渡すとスキャンが始まり、scanId が返ります。

aws inspector2 start-on-demand-scan \
  --resource-id ami-07d2ba94d48bca823 \
  --resource-type AMI
{
    "scanId": "842d9c96f14e40559b8fc450ba747577"
}

実行する IAM プリンシパルには、inspector2:StartOnDemandScan に加えて iam:CreateServiceLinkedRole の権限が必要です。初回のスキャンで、スナップショットを読むためのサービスにリンクされたロール AWSServiceRoleForAmazonInspector2Ami が作られました。

スキャンの状態は、get-on-demand-scan-status に AMI ID と scanId を渡して確かめます。

aws inspector2 get-on-demand-scan-status \
  --resource-id ami-07d2ba94d48bca823 \
  --resource-type AMI \
  --scan-id 842d9c96f14e40559b8fc450ba747577
{
    "scanId": "842d9c96f14e40559b8fc450ba747577",
    "resourceId": "ami-07d2ba94d48bca823",
    "resourceType": "AMI",
    "scanStatus": "SUCCESSFUL",
    "startedAt": "2026-10-29T09:52:31.968000+00:00",
    "completedAt": "2026-10-29T09:58:36.442000+00:00"
}

2 つの AMI とも、約 6 分で SUCCESSFUL になりました!インスタンスを 1 台も起動せずにスキャンが終わって手軽ですね。

EC2 で結果を確認する

EventBridge を使わずに結果を見られるかを確かめるため、EC2 の describe-images と get-image-findings を実行しました。

describe-images でサマリを見る

describe-images の ScanResults には、検出結果の最も高い重大度などのサマリが入ります。

aws ec2 describe-images \
  --image-ids ami-07d2ba94d48bca823 ami-08b070da26a7579d0 \
  --query "Images[].ScanResults"
[
    {
        "HighestFindingSeverityLabel": "critical",
        "FindingScanDate": "2026-10-29T09:52:31.968000+00:00",
        "LowFixAvailableSince": "2026-10-29T09:58:30.471000+00:00",
        "MediumFixAvailableSince": "2026-10-29T09:58:30.471000+00:00",
        "HighFixAvailableSince": "2026-10-29T09:58:30.471000+00:00",
        "CriticalFixAvailableSince": "2026-10-29T09:58:30.542000+00:00"
    },
    {
        "FindingScanDate": "2026-10-29T09:52:22.201000+00:00"
    }
]

古い AMI では最も高い重大度が critical となり、重大度ごとに修正が出ていることを示す *FixAvailableSince も入りました。検出結果が 0 件だった新しい AMI では、スキャンした日時の FindingScanDate だけが返っています。

get-image-findings で検出結果を見る

aws ec2 get-image-findings --image-id ami-07d2ba94d48bca823

古い AMI の検出結果は 4,186 件、新しい AMI は 0 件でした。

例として、critical の 1 件は以下の内容でした。

{
    "FixAvailable": true,
    "Score": 9.9,
    "FirstObservedAt": "2026-10-29T09:58:30.542000+00:00",
    "UpdatedAt": "2026-10-29T09:58:30.542000+00:00",
    "Title": "CVE-2026-89049 - amazon-ssm-agent",
    "Paths": [
        "/var/lib/rpm/rpmdb.sqlite"
    ],
    "SeverityLabel": "critical",
    "SnapshotId": "snap-0db91065890272669"
}

各検出結果には、脆弱性が見つかった EBS スナップショットの ID とファイルパスが付きます。なお、CVE の説明や修正済みのバージョンは、get-image-findings には含まれません。

Inspector のドキュメントには「結果は EventBridge だけに届く」とありましたが、EC2 の API でもきちんと取れました。

EC2 コンソールの表示を確認する

ドキュメントには、EC2 コンソールの AMI の「Security」タブで結果を確認できると書かれています。しかし、執筆時点では AMI の詳細画面にそのタブはありませんでした。コンソールへの反映はまだなのかもしれません。

EventBridge でイベントを受け取る

デフォルトのイベントバスには、次の 2 種類のイベントが届きました。

detail-type 届くタイミング
Inspector2 OnDemand Finding 検出結果 1 件ごと
Inspector2 OnDemand Scan Complete スキャンが終わったとき

スキャン完了のイベント

スキャン完了のイベントには、以下の例のように重大度ごとの件数が findingSeverityCounts に入ります。

{
  "version": "0",
  "id": "ed10a415-0d57-5c57-14ed-23d77d0fadb1",
  "detail-type": "Inspector2 OnDemand Scan Complete",
  "source": "aws.inspector2",
  "account": "123456789012",
  "time": "2026-10-29T09:58:24Z",
  "region": "ap-northeast-1",
  "resources": [
    "ami-08b070da26a7579d0"
  ],
  "detail": {
    "scanId": "b63e50341444477cb48b75d21796aa6f",
    "awsAccountId": "123456789012",
    "resourceId": "ami-08b070da26a7579d0",
    "resourceType": "MACHINE_IMAGE",
    "scanStatus": "SUCCESSFUL",
    "startedAt": "2026-10-29T09:52:22.201Z",
    "completedAt": "2026-10-29T09:58:24.165Z",
    "findingSeverityCounts": {
      "CRITICAL": 0,
      "HIGH": 0,
      "MEDIUM": 0,
      "LOW": 0,
      "INFORMATIONAL": 0,
      "UNTRIAGED": 0,
      "TOTAL": 0
    },
    "version": "1.0"
  }
}

検出結果のイベント

検出結果のイベントには、get-image-findings にはない CVE の説明、CVSS のスコア、修正済みのバージョン、参考 URL などが入ります。同じスキャンの完了イベントとは、detail.scanId で結び付けられます。

古い AMI では 4,000 件を超える検出結果のイベントがまとめて発行されたせいで、完了イベントの方が先に届きました。完了イベントをきっかけに処理する場合は、findingSeverityCounts.TOTAL と受け取った件数を比べるか、get-image-findings で取り直す方が確実です。

おわりに

Amazon Inspector の AMI のオンデマンドスキャンを、Inspector を無効にしたアカウントで試しました。

結果を手軽に取得するなら EC2 の get-image-findings、自動化するなら EventBridge と使い分けられます。

ただし EventBridge では、数千件のイベントがまとめて発行され、完了イベントが検出結果より先に届くこともありました。件数に注意して、量を確かめてから処理するようにしてみてください。

元のページを確認する

必要な場合のみ、広告などを含む配信元ページをフレームで表示できます。