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

增强扫描

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

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

增强扫描的注意事项

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

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

    • 亚太地区(大阪)(ap-northeast-3)

    • 亚太地区(雅加达)(ap-southeast-3

    • 非洲(开普敦)(af-south-1)

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

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

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

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

  • 对存储库启用连续扫描后,如果过去 30 天内没有根据镜像推送时间戳更新镜像,则会暂停对该镜像的连续扫描。暂停扫描的镜像将显示扫描状态 SCAN_ELIGIBILITY_EXPIRED

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

所需的 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 事件

启用增强扫描后,当存储库的扫描频率发生变化时,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) 数据库按严重性列出发现的软件漏洞。

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

通过 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