拡張スキャン - Amazon ECR

拡張スキャン

Amazon ECR 拡張スキャンは、コンテナイメージの脆弱性スキャンを提供する Amazon Inspector との統合です。コンテナイメージは、オペレーティングシステムとプログラミング言語パッケージの両方の脆弱性についてスキャンされます。スキャンの結果は、Amazon ECR と Amazon Inspector の両方で直接表示できます。Amazon Inspector の詳細については、Amazon Inspector ユーザーガイドScanning container images with Amazon Inspector を参照してください。

拡張スキャンでは、自動連続スキャン用に構成するリポジトリと、プッシュ時にスキャンするように構成するリポジトリを選択できます。これは、スキャンフィルターを設定することによって行われます。

拡張スキャンの考慮事項

Amazon ECR 拡張スキャンを有効にするときは、次の事項を考慮する必要があります。

  • 次のリージョンでは、拡張スキャンはサポートされていません。

    • アジアパシフィック (大阪) (ap-northeast-3)

    • アジアパシフィック (ジャカルタ) (ap-southeast-3)

    • アフリカ (ケープタウン) (af-south-1)

  • Amazon Inspector では特定のオペレーティングシステムのスキャンがサポートされます。完全なリストについては、Amazon Inspector ユーザーガイドの「サポートされているオペレーティングシステム - Amazon ECR スキャン」を参照してください。

  • Amazon Inspector は、サービスにリンクされた IAM ロールを使用します。このロールは、リポジトリに対する拡張スキャンを行うのに必要なアクセス許可を提供します。プライベートレジストリで拡張スキャンが有効になっている場合、サービスにリンクされた IAM ロールは Amazon Inspector によって自動的に作成されます。詳細については、Amazon Inspector ユーザーガイドAmazon Inspector でのサービスにリンクされたロールの使用を参照してください。

  • プライベートレジストリで拡張スキャンが有効になっている場合、スキャンフィルターに一致するすべてのリポジトリは、拡張スキャンのみを使用してスキャンされます。フィルターと一致しないリポジトリのスキャン頻度は Off であり、スキャンされません。拡張スキャンを使用した手動スキャンはサポートされていません。詳細については、「フィルターの使用」を参照してください。

  • 複数のフィルターが同じリポジトリに一致するプッシュ時スキャンと連続スキャンに別々のフィルターを指定すると、Amazon ECR はそのリポジトリのスキャンオンプッシュフィルターに対して連続スキャンフィルターを適用します。

  • 拡張スキャンが有効になっている場合、リポジトリのスキャン頻度が変更されると、Amazon ECR は EventBridge にイベントを送信します。Amazon Inspector は、初期スキャンが完了したとき、およびイメージスキャン結果が作成、更新、または閉じられたときに、EventBridge にイベントを発行します。

必要な IAM 許可

Amazon ECR 拡張スキャンには、Amazon Inspector サービスにリンクされた IAM ロールが必要です。また、拡張スキャンを有効化および使用する IAM プリンシパルには、スキャンで必要な Amazon Inspector API を呼び出すアクセス許可が必要です。プライベートレジストリで拡張スキャンが有効になっている場合、Amazon Inspector サービスにリンクされた IAM ロールは Amazon Inspector によって自動的に作成されます。詳細については、Amazon Inspector ユーザーガイドAmazon Inspector でのサービスにリンクされたロールの使用 を参照してください。

次の IAM ポリシーは、拡張スキャンの有効化と使用に必要なアクセス許可を付与します。これには、Amazon Inspector がサービスにリンクされた IAM ロールを作成するために必要なアクセス許可、および拡張スキャンの有効化と無効化、およびスキャン結果の取得に必要な Amazon Inspector API のアクセス許可が含まれます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "inspector2:Enable", "inspector2:Disable", "inspector2:ListFindings", "inspector2:ListAccountPermissions", "inspector2:ListCoverage" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringEquals": { "iam:AWSServiceName": [ "inspector2.amazonaws.com" ] } } } ] }

拡張スキャンの有効化

プライベートレジストリの拡張スキャンを有効にするには (AWS Management Console)

スキャン設定は、プライベートレジストリレベルでリージョンごとに定義されます。

  1. Amazon ECR コンソール (https://console.aws.amazon.com/ecr/repositories) を開きます。

  2. ナビゲーションバーから、スキャン設定を設定するリージョンを選択します。

  3. ナビゲーションペインで、[Private registry] (プライベートレジストリ)、[Scanning] (スキャン) の順に選択します。

  4. [Scanning configuration] (スキャン設定) ページの [Scan type] (スキャンタイプ) で、[Enhanced scanning] (拡張スキャン) を選択します。

  5. (オプション) デフォルトでは、[Enhanced scanning] (拡張スキャン) が選択されている場合、すべてのリポジトリが [Continuous scanning] (継続スキャン) に設定されています。デフォルトのスキャンの設定を変更するには、[Continuously scan all repositories] (すべてのリポジトリを継続的にスキャンする) ボックスを選択解除します。その後、すべてのリポジトリをプッシュ時にスキャンするように設定するか、プッシュ時に継続スキャン用に個別のスキャンフィルターを指定できます。スキャンフィルターが設定されている場合、[Preview repository matches] (リポジトリの一致をプレビューする) を選択して、レジストリ内のどのリポジトリが定義済みフィルターと一致しているかを確認します。

    重要

    ワイルドカードを含まないフィルターは、そのフィルターを含むすべてのリポジトリ名と一致します。ワイルドカード (*) を含むフィルターは、リポジトリ名のゼロ文字以上の文字がワイルドカードで置き換えられるリポジトリ名と一致します。

  6. [Save] を選択します。

  7. 拡張スキャンを有効にするリージョンごとに、これらの手順を繰り返します。

以下の AWS CLI コマンドを使用して、AWS CLI を使用するプライベートレジストリの拡張スキャンを有効にします。スキャンフィルターは、rules オブジェクトを使用して指定します。

  • put-registry-scanning-configuration (AWS CLI)

    次の例では、プライベートレジストリの拡張スキャンを有効にします。デフォルトでは、rules が指定されていない場合、Amazon ECR はすべてのリポジトリのスキャン設定を継続スキャンに設定します。

    aws ecr put-registry-scanning-configuration \ --scan-type ENHANCED \ --region us-east-2

    次の例では、プライベートレジストリの拡張スキャンを有効にして、スキャンフィルターを指定します。この例のスキャンフィルターは、名前に prod が含まれるすべてのリポジトリの継続スキャンを有効にします。

    aws ecr put-registry-scanning-configuration \ --scan-type ENHANCED \ --rules '[{"repositoryFilters" : [{"filter":"prod","filterType" : "WILDCARD"}],"scanFrequency" : "CONTINUOUS_SCAN"}]' \ --region us-east-2

    次の例では、プライベートレジストリの拡張スキャンを有効にして、複数のスキャンフィルターを指定します。この例のスキャンフィルターは、名前に prod が含まれるすべてのリポジトリの継続スキャンを有効にして、他のすべてのリポジトリに対してはプッシュ時のみスキャンを有効にします。

    aws ecr put-registry-scanning-configuration \ --scan-type ENHANCED \ --rules '[{"repositoryFilters" : [{"filter":"prod","filterType" : "WILDCARD"}],"scanFrequency" : "CONTINUOUS_SCAN"},{"repositoryFilters" : [{"filter":"*","filterType" : "WILDCARD"}],"scanFrequency" : "SCAN_ON_PUSH"}]' \ --region us-west-2

拡張スキャンの期間を変更する

Amazon Inspector では、プライベートリポジトリを継続的に監視する期間を設定できます。デフォルトでは、Amazon ECR プライベートレジストリで拡張スキャンが有効になっている場合、Amazon Inspector サービスは、イメージが削除されるか、拡張スキャンが無効になるまで、リポジトリを継続的に監視します。Amazon Inspector がイメージをスキャンする期間は、Amazon Inspector の設定を使用して変更できます。利用可能なスキャン期間は、[Lifetime (デフォルト)] (有効期間)、[180 day] (180 日間)、および [30 day] (30 日間) です。リポジトリのスキャン期間が経過すると、スキャンの脆弱性を一覧表示するときに SCAN_ELIGIBILITY_EXPIRED のスキャンステータスが表示されます。詳細については、Amazon Inspector ユーザーガイドの「Changing the Amazon ECR automated re-scan duration」(Amazon ECR の自動化された再スキャン期間の変更) を参照してください。

拡張スキャン時間の設定を変更するには

  1. Amazon Inspector コンソール (https://console.aws.amazon.com/inspector/v2/home) にサインインします。

  2. 左側のナビゲーションで [設定] を展開して [全般] を選択します。

  3. [設定] ページの [ECR re-scan duration] (ECR 再スキャン期間) [保存] を選択します。

EventBridge イベント

拡張スキャンが有効になっている場合、リポジトリのスキャン頻度が変更されると、Amazon ECR は EventBridge にイベントを送信します。Amazon Inspector は、初期スキャンが完了したとき、およびイメージスキャン結果が作成、更新、または閉じられたときに、EventBridge にイベントを発行します。

リポジトリのスキャン頻度の変更に関するイベント

レジストリで拡張スキャンが有効になっている場合、拡張スキャンが有効になっているリソースで変更があった場合、Amazon ECR から次のイベントが送信されます。これには、新しいリポジトリの作成、リポジトリのスキャン頻度の変更、または拡張スキャンが有効になっているリポジトリでのイメージの作成または削除が含まれます。詳細については、「イメージスキャン」を参照してください。

{ "version": "0", "id": "0c18352a-a4d4-6853-ef53-0abEXAMPLE", "detail-type": "ECR Scan Resource Change", "source": "aws.ecr", "account": "123456789012", "time": "2021-10-14T20:53:46Z", "region": "us-east-1", "resources": [], "detail": { "action-type": "SCAN_FREQUENCY_CHANGE", "repositories": [{ "repository-name": "repository-1", "repository-arn": "arn:aws:ecr:us-east-1:123456789012:repository/repository-1", "scan-frequency": "SCAN_ON_PUSH", "previous-scan-frequency": "MANUAL" }, { "repository-name": "repository-2", "repository-arn": "arn:aws:ecr:us-east-1:123456789012:repository/repository-2", "scan-frequency": "CONTINUOUS_SCAN", "previous-scan-frequency": "SCAN_ON_PUSH" }, { "repository-name": "repository-3", "repository-arn": "arn:aws:ecr:us-east-1:123456789012:repository/repository-3", "scan-frequency": "CONTINUOUS_SCAN", "previous-scan-frequency": "SCAN_ON_PUSH" } ], "resource-type": "REPOSITORY", "scan-type": "ENHANCED" } }

初期イメージスキャンのイベント (拡張スキャン)

レジストリで拡張スキャンが有効な場合、初期イメージスキャンが完了すると、Amazon Inspector によって以下のイベントが送信されます。finding-severity-counts パラメータは、重要度レベルが存在する場合にのみ、その値を返します。たとえば、イメージに CRITICAL レベルの結果が含まれていない場合、重要度のカウントは返されません。詳細については、「拡張スキャン」を参照してください。

イベントパターン:

{ "source": ["aws.inspector2"], "detail-type": ["Inspector2 Scan"] }

出力例:

{ "version": "0", "id": "739c0d3c-4f02-85c7-5a88-94a9EXAMPLE", "detail-type": "Inspector2 Scan", "source": "aws.inspector2", "account": "123456789012", "time": "2021-12-03T18:03:16Z", "region": "us-east-2", "resources": [ "arn:aws:ecr:us-east-2:123456789012:repository/amazon/amazon-ecs-sample" ], "detail": { "scan-status": "INITIAL_SCAN_COMPLETE", "repository-name": "arn:aws:ecr:us-east-2:123456789012:repository/amazon/amazon-ecs-sample", "finding-severity-counts": { "CRITICAL": 7, "HIGH": 61, "MEDIUM": 62, "TOTAL": 158 }, "image-digest": "sha256:36c7b282abd0186e01419f2e58743e1bf635808231049bbc9d77e5EXAMPLE", "image-tags": [ "latest" ] } }

イメージスキャン結果の更新のイベント (拡張スキャン)

レジストリで拡張スキャンを有効にすると、イメージスキャン結果が作成、更新、または閉じられると、Amazon Inspector によって以下のイベントが送信されます。詳細については、「拡張スキャン」を参照してください。

イベントパターン:

{ "source": ["aws.inspector2"], "detail-type": ["Inspector2 Finding"] }

出力例:

{ "version": "0", "id": "42dbea55-45ad-b2b4-87a8-afaEXAMPLE", "detail-type": "Inspector2 Finding", "source": "aws.inspector2", "account": "123456789012", "time": "2021-12-03T18:02:30Z", "region": "us-east-2", "resources": [ "arn:aws:ecr:us-east-2:123456789012:repository/amazon/amazon-ecs-sample/sha256:36c7b282abd0186e01419f2e58743e1bf635808231049bbc9d77eEXAMPLE" ], "detail": { "awsAccountId": "123456789012", "description": "In libssh2 v1.9.0 and earlier versions, the SSH_MSG_DISCONNECT logic in packet.c has an integer overflow in a bounds check, enabling an attacker to specify an arbitrary (out-of-bounds) offset for a subsequent memory read. A crafted SSH server may be able to disclose sensitive information or cause a denial of service condition on the client system when a user connects to the server.", "findingArn": "arn:aws:inspector2:us-east-2:123456789012:finding/be674aaddd0f75ac632055EXAMPLE", "firstObservedAt": "Dec 3, 2021, 6:02:30 PM", "inspectorScore": 6.5, "inspectorScoreDetails": { "adjustedCvss": { "adjustments": [], "cvssSource": "REDHAT_CVE", "score": 6.5, "scoreSource": "REDHAT_CVE", "scoringVector": "CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N", "version": "3.0" } }, "lastObservedAt": "Dec 3, 2021, 6:02:30 PM", "packageVulnerabilityDetails": { "cvss": [ { "baseScore": 6.5, "scoringVector": "CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N", "source": "REDHAT_CVE", "version": "3.0" }, { "baseScore": 5.8, "scoringVector": "AV:N/AC:M/Au:N/C:P/I:N/A:P", "source": "NVD", "version": "2.0" }, { "baseScore": 8.1, "scoringVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:H", "source": "NVD", "version": "3.1" } ], "referenceUrls": [ "https://access.redhat.com/errata/RHSA-2020:3915" ], "source": "REDHAT_CVE", "sourceUrl": "https://access.redhat.com/security/cve/CVE-2019-17498", "vendorCreatedAt": "Oct 16, 2019, 12:00:00 AM", "vendorSeverity": "Moderate", "vulnerabilityId": "CVE-2019-17498", "vulnerablePackages": [ { "arch": "X86_64", "epoch": 0, "name": "libssh2", "packageManager": "OS", "release": "12.amzn2.2", "sourceLayerHash": "sha256:72d97abdfae3b3c933ff41e39779cc72853d7bd9dc1e4800c5294dEXAMPLE", "version": "1.4.3" } ] }, "remediation": { "recommendation": { "text": "Update all packages in the vulnerable packages section to their latest versions." } }, "resources": [ { "details": { "awsEcrContainerImage": { "architecture": "amd64", "imageHash": "sha256:36c7b282abd0186e01419f2e58743e1bf635808231049bbc9d77e5EXAMPLE", "imageTags": [ "latest" ], "platform": "AMAZON_LINUX_2", "pushedAt": "Dec 3, 2021, 6:02:13 PM", "registry": "123456789012", "repositoryName": "amazon/amazon-ecs-sample" } }, "id": "arn:aws:ecr:us-east-2:123456789012:repository/amazon/amazon-ecs-sample/sha256:36c7b282abd0186e01419f2e58743e1bf635808231049bbc9d77EXAMPLE", "partition": "N/A", "region": "N/A", "type": "AWS_ECR_CONTAINER_IMAGE" } ], "severity": "MEDIUM", "status": "ACTIVE", "title": "CVE-2019-17498 - libssh2", "type": "PACKAGE_VULNERABILITY", "updatedAt": "Dec 3, 2021, 6:02:30 PM" } }

イメージスキャン結果の取得

最後に完了したイメージスキャンのスキャン結果を取得できます。結果には、検出されたソフトウェアの脆弱性が、共通の脆弱性およびエクスポージャー (CVE) データベースに基づく重大度別に一覧表示されます。

イメージをスキャンする際の一般的な問題のトラブルシューティングの詳細については、「イメージスキャニングの問題のトラブルシューティング」を参照してください。

AWS Management Console を使用してイメージスキャンの結果を取得する手順は、次のとおりです。

  1. Amazon ECR コンソール (https://console.aws.amazon.com/ecr/repositories) を開きます。

  2. ナビゲーションバーから、リポジトリがあるリージョンを選択します。

  3. ナビゲーションペインで、[Repositories] を選択します。

  4. リポジトリページで、スキャン結果を取得するイメージを含むリポジトリを選択します。

  5. [イメージ] ページの [Vulnerabilities] (脆弱性) 列で、スキャン結果を取得するイメージの [See findings] (結果の表示) を選択します。

  6. [Findings] (結果) を表示する場合、[Name] (名前) 列の脆弱性名は、詳細を表示できる Amazon Inspector コンソールへのリンクです。

以下の AWS CLI コマンドを使用して、AWS CLI でイメージスキャンの結果を取得します。imageTag または imageDigest を使用してイメージを指定できます。どちらのイメージも list-images CLI コマンドを使用して取得できます。

  • describe-image-scan-findings (AWS CLI)

    次の例では、イメージタグを使用しています。

    aws ecr describe-image-scan-findings \ --repository-name name \ --image-id imageTag=tag_name \ --region us-east-2

    次の例では、イメージダイジェストを使用しています。

    aws ecr describe-image-scan-findings \ --repository-name name \ --image-id imageDigest=sha256_hash \ --region us-east-2