增强扫描 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

增强扫描

Amazon ECR 增强扫描是与 Amazon Inspector 的集成,它为您的容器镜像提供漏洞扫描。将会扫描容器映像是否存在操作系统和编程语言包漏洞。您可以使用 Amazon ECR 和 Amazon Inspector 直接查看扫描结果。有关 Amazon Inspector 的更多信息,请参阅 Amazon Inspector 用户指南中的使用 Amazon Inspector 扫描容器镜像

借助增强扫描功能,您可以选择配置哪些存储库进行自动连续扫描,配置哪些存储库在推送时扫描。此操作通过设置扫描筛选条件完成。

增强扫描的注意事项

启用 Amazon ECR 增强扫描时应考虑以下因素。

  • 使用此功能不会收取 Amazon ECR 的额外费用,但是 Amazon Inspector 会收取扫描映像的费用。有关更多信息,请参阅 Amazon Inspector 定价

  • 以下区域不支持增强扫描:

    • 中东(阿联酋)(me-central-1)

    • 亚太地区(海得拉巴)(ap-south-2

    • 以色列(特拉维夫)(il-central-1

    • 亚太地区(墨尔本)(ap-southeast-4)

    • 欧洲(西班牙)(eu-south-2

  • Amazon Inspector 支持扫描特定操作系统。获取完整列表,请参阅 Amazon Inspector 用户指南中的支持的操作系统 - Amazon ECR 扫描

  • Amazon Inspector 使用服务相关 IAM 角色,该角色提供了为存储库提供增强扫描所需的权限。为私有注册表开启增强扫描后,Amazon Inspector 会自动创建服务相关 IAM 角色。有关更多信息,请参阅 Amazon Inspector 用户指南中的将服务相关角色用于 Amazon Inspector

  • 当您最初为私有注册表开启增强扫描功能时,Amazon Inspector 只能根据图片推送时间戳或过去 90 天内提取的图像识别过去 30 天内推送到 Amazon ECR 的图像。更早映像的扫描状态将为 SCAN_ELIGIBILITY_EXPIRED。如果您需要让 Amazon Inspector 扫描这些映像,则应将其重新推送到您的存储库。

  • 开启增强扫描后推送到 Amazon ECR 的所有映像都会在配置的持续时间内持续扫描。默认情况下,持续时间为生命周期。此设置可通过 Amazon Inspector 控制台来配置。有关更多信息,请参阅 更改增强扫描持续时间

  • 如果您的 Amazon ECR 私有注册表开启了增强扫描,则只能使用增强扫描功能来扫描符合扫描筛选条件的所有存储库。不符合任何筛选条件的任何存储库将使用 Off 扫描频率,并且不会被扫描。不支持使用增强扫描进行手动扫描。有关更多信息,请参阅 使用筛选条件

  • 如果您为推送扫描和连续扫描分别指定了筛选条件,并且同一存储库符合多个筛选条件,则 Amazon ECR 会强制执行该存储库的连续扫描筛选条件,而不是推送扫描筛选条件。

  • 启用增强扫描后,当存储库的扫描频率发生变化 EventBridge 时,Amazon ECR 会向发送一个事件。 EventBridge 当初始扫描完成以及创建、更新或关闭图像扫描结果时,Amazon Inspector 会发出事件。

所需的 IAM 权限

Amazon ECR 增强扫描需要 Amazon Inspector 服务相关 IAM 角色,且要求启用和使用增强扫描的 IAM 主体有权调用扫描所需的 Amazon Inspector API。为私有注册表开启增强扫描后,Amazon Inspector 会自动创建 Amazon Inspector 服务相关 IAM 角色。有关更多信息,请参阅 Amazon Inspector 用户指南中的将服务相关角色用于 Amazon Inspector

以下 IAM policy 授予启用和使用增强扫描所需的权限。它包括 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" ] } } } ] }

使用增强扫描

为私有注册表开启增强扫描(Amazon Web Services Management Console)

扫描配置在每个区域的私有注册表级别定义。

  1. https://console.aws.amazon.com/ecr/repositories 打开 Amazon ECR 控制台。

  2. 从导航栏中,选择要为其设置扫描配置的区域。

  3. 在导航窗格中,选择 Private registry(私有注册表)、Scanning(扫描)。

  4. Scanning configuration(扫描配置)页面中,为 Scan type(扫描类型)选择 Enhanced scanning(增强扫描)。

  5. (可选)默认情况下,Enhanced scanning(增强扫描)处于选中状态时,所有存储库都设置为连续扫描。您可以通过取消选中 Continuously scan all repositories(连续扫描所有存储库)复选框来更改默认扫描配置。然后,您可以将所有存储库配置为在推送时扫描,也可以为连续扫描和推送时扫描指定单独的扫描筛选条件。设置扫描筛选条件后,您可以选择 Preview repository matches(预览存储库匹配)以验证注册表中的哪些存储库与定义的筛选条件匹配。

    重要

    没有通配符的筛选条件将匹配包含该筛选条件的所有存储库名称。带通配符 (*) 的筛选条件匹配存储库名称,通配符会替换存储库名称中的零个或多个字符。

  6. 选择保存

  7. 在您要开启增强扫描的每个区域中重复这些步骤。

使用以下 Amazon CLI 命令开启对私有注册表的增强扫描 Amazon CLI。您可以使用 rules 对象指定扫描筛选条件。

  • put-registry-scanning-configuration (Amazon 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 扫描图像的持续时间。可用扫描持续时间为生命周期(默认)180 天30 天。当存储库的扫描持续时间已过时,在列出扫描漏洞时,将会显示 SCAN_ELIGIBILITY_EXPIRED 的扫描状态。有关更多信息,请参阅 Amazon Inspector 用户指南中的更改 Amazon ECR 自动重新扫描持续时间

更改增强扫描持续时间设置
  1. 打开 Amazon Inspector 控制台,网址为 https://console.aws.amazon.com/inspector/v2/home

  2. 在左侧导航中,展开 Settings(设置),然后选择 General(通用)。

  3. Settings(设置)页面上的 ECR re-scan duration(ECR 重新扫描持续时间)下,选择一个设置,然后选择 Save(保存)。

EventBridge 事件

启用增强扫描后,当存储库的扫描频率发生变化 EventBridge 时,Amazon ECR 会向发送一个事件。 EventBridge 当初始扫描完成以及创建、更新或关闭图像扫描结果时,Amazon Inspector 会发出事件。

存储库扫描频率更改事件

为注册表开启增强扫描后,当开启了增强扫描的资源发生更改时,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) 数据库按严重性列出发现的软件漏洞。

有关扫描镜像时的常见问题的排查详细信息,请参阅 排查镜像扫描问题

通过 Amazon Web Services Management Console使用以下步骤检索镜像扫描结果。

  1. https://console.aws.amazon.com/ecr/repositories 打开 Amazon ECR 控制台。

  2. 从导航栏中,选择您的存储库所在的区域。

  3. 在导航窗格中,选择存储库

  4. 存储库页面上,选择包含要扫描检索结果的镜像的存储库。

  5. Images(镜像)页面的 Vulnerabilities(漏洞)下,为要检索其扫描结果的镜像选择 See findings(查看详细信息)。

  6. 查看 Findings(结果)时,Name(名称)列中的漏洞名称是指向 Amazon Inspector 控制台的链接,在该控制台中,您可以查看更多详细信息。

使用以下 Amazon CLI 命令使用检索图像扫描结果 Amazon CLI。您可以使用 imageTagimageDigest 指定镜像,这两者都可以使用 list-images CLI 命令获取。

  • describe-image-scan-findings (Amazon 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