

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

# 扫描映像以查找 Amazon ECR 中的操作系统和编程语言包漏洞
<a name="image-scanning-enhanced"></a>

Amazon ECR 增强扫描是与 Amazon Inspector 的集成，它为您的容器镜像提供漏洞扫描。将会扫描容器映像是否存在操作系统和编程语言包漏洞。您可以使用 Amazon ECR 和 Amazon Inspector 直接查看扫描结果。有关 Amazon Inspector 的更多信息，请参阅 *Amazon Inspector 用户指南*中的[使用 Amazon Inspector 扫描容器镜像](https://docs.aws.amazon.com/inspector/latest/user/enable-disable-scanning-ecr.html)。

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

## 增强扫描的注意事项
<a name="image-scanning-enhanced-considerations"></a>

启用 Amazon ECR 增强扫描时考虑以下因素。
+ 使用此功能不会收取 Amazon ECR 的额外费用，但是 Amazon Inspector 会收取扫描映像的费用。在支持 Amazon Inspector 的区域中提供了此功能。有关更多信息，请参阅:
  + Amazon Inspector 定价 - [Amazon Inspector 定价](https://aws.amazon.com/inspector/pricing/)。
  + Amazon Inspector 支持的区域 - [区域和端点](https://docs.aws.amazon.com//inspector/latest/user/inspector_regions.html)。
+ Amazon ECR 增强型扫描显示了如何在 Amazon EKS 和 Amazon ECS 上使用映像。您可以看到上次使用映像的时间，并确定有多少集群使用每个映像。此信息可帮助确定对活跃映像的漏洞修复的优先顺序。您可以快速确定哪些集群可能受到新发现的漏洞的影响。有关如何请求这些信息以及如何查看响应的更多信息，请参阅 [https://docs.aws.amazon.com//AmazonECR/latest/APIReference/API_DescribeImageScanFindings.html](https://docs.aws.amazon.com//AmazonECR/latest/APIReference/API_DescribeImageScanFindings.html)。
+ Amazon Inspector 支持扫描特定操作系统。获取完整列表，请参阅 *Amazon Inspector 用户指南*中的[支持的操作系统 - Amazon ECR 扫描](https://docs.aws.amazon.com/inspector/latest/user/supported.html#supported-os)。
+ Amazon Inspector 使用服务相关 IAM 角色，该角色提供了为存储库提供增强扫描所需的权限。为私有注册表开启增强扫描后，Amazon Inspector 会自动创建服务相关 IAM 角色。有关更多信息，请参阅 *Amazon Inspector 用户指南*中的[将服务相关角色用于 Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/user/using-service-linked-roles.html)。
+ 当您最初为私有注册表启用增强扫描功能时，Amazon Inspector 只能根据图像推送时间戳识别过去 14 天内推送到 Amazon ECR 的图像。更早映像的扫描状态将为 ` SCAN_ELIGIBILITY_EXPIRED`。如果您需要让 Amazon Inspector 扫描这些映像，则应将其重新推送到您的存储库。
+ 如果您的 Amazon ECR 私有注册表开启了增强扫描，则只能使用增强扫描功能来扫描符合扫描筛选条件的所有存储库。不符合任何筛选条件的任何存储库将使用 `Off` 扫描频率，并且不会被扫描。不支持使用增强扫描进行手动扫描。有关更多信息，请参阅 [用于选择在 Amazon ECR 中扫描哪些存储库的筛选条件](image-scanning-filters.md)。
+ 如果您为推送扫描和连续扫描分别指定了筛选条件，并且同一存储库符合多个筛选条件，则 Amazon ECR 会强制执行该存储库的连续扫描筛选条件，而不是推送扫描筛选条件。
+ 启用增强扫描后，当存储库的扫描频率发生变化 EventBridge 时，Amazon ECR 会向发送一个事件。 EventBridge 当初始扫描完成以及创建、更新或关闭图像扫描结果时，Amazon Inspector 会发出事件。

## 更改 Amazon Inspector 中映像增强扫描的持续时间
<a name="image-scanning-enhanced-duration"></a>

启用增强扫描后，Amazon ECR 会在配置的持续时间内持续扫描新推送的映像。默认情况下，Amazon Inspector 会监控您的存储库，直到映像被删除或增强型扫描被禁用为止。您可以根据您的环境需求，在 Amazon Inspector 控制台中配置推送日期持续时间（最长为生命周期）和重新扫描持续时间。当存储库的扫描持续时间已过时，扫描状态将显示为 `SCAN_ELIGIBILITY_EXPIRED`。有关在 Amazon Inspector 中为 Amazon ECR 配置重新扫描持续时间设置的更多信息，请参阅 Amazon Inspector 用户指南中的[配置 Amazon ECR 重新扫描持续时间](https://docs.aws.amazon.com/inspector/latest/user/enable-disable-scanning-ecr.html#scan-duration-setting)。

# 在 Amazon ECR 中进行增强扫描所需的 IAM 权限
<a name="image-scanning-enhanced-iam"></a>

Amazon ECR 增强型扫描需要一个与 Amazon Inspector 服务相关的 IAM 角色，并且启用和使用增强扫描的 IAM 委托人有权调用扫描 APIs 所需的亚马逊 Inspector。为私有注册表开启增强扫描后，Amazon Inspector 会自动创建 Amazon Inspector 服务相关 IAM 角色。有关更多信息，请参阅 *Amazon Inspector 用户指南*中的[将服务相关角色用于 Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/user/using-service-linked-roles.html)。

以下 IAM policy 授予启用和使用增强扫描所需的权限。它包括 Amazon Inspector 创建服务相关 IAM 角色所需的权限，以及开启和关闭增强扫描和检索扫描结果所需的 Amazon Inspector API 权限。

------
#### [ JSON ]

****  

```
{
    "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 ECR 中配置映像的增强扫描
<a name="image-scanning-enhanced-enabling"></a>

为您的私有注册表配置每个区域的增强扫描。

验证您是否拥有配置增强扫描的适当 IAM 权限。有关信息，请参阅[在 Amazon ECR 中进行增强扫描所需的 IAM 权限](image-scanning-enhanced-iam.md)。

------
#### [ AWS 管理控制台 ]

**要为私有注册表开启增强扫描**

1. 在[https://console.aws.amazon.com/ecr/存储库](https://console.aws.amazon.com/ecr/repositories)中打开 Amazon ECR 控制台。

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

1. 在导航窗格中，选择**私有注册表**，然后选择**设置**。

1. 在 **Scanning configuration**（扫描配置）页面中，为 **Scan type**（扫描类型）选择 **Enhanced scanning**（增强扫描）。

   默认情况下，当**增强扫描**处于选中状态时，所有存储库都被连续扫描。

1. 要选择连续扫描的特定存储库，请清除**连续扫描所有存储库**复选框，然后定义筛选条件：
**重要**  
没有通配符的筛选条件将匹配包含该筛选条件的所有存储库名称。带通配符 (`*`) 的筛选条件匹配存储库名称，通配符会替换存储库名称中的零个或多个字符。要查看筛选条件行为的示例，请参阅[筛选条件通配符](image-scanning-filters.md#image-scanning-filters-wildcards)。

   1. 输入基于存储库名称的筛选条件，然后选择**添加筛选条件**。

   1. 决定推送映像时要扫描哪些存储库：
      + 要在推送时扫描所有存储库，请选择**推送时扫描所有存储库**。
      + 要选择在推送时扫描的特定存储库，请输入基于存储库名称的筛选条件，然后选择**添加筛选条件**。

1. 选择**保存**。

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

------
#### [ AWS CLI ]

使用以下 AWS CLI 命令开启对私有注册表的增强扫描 AWS CLI。您可以使用 ` rules` 对象指定扫描筛选条件。
+ [ put-registry-scanning-configuration](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html) (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
  ```

------

# EventBridge 为了在 Amazon ECR 中进行增强扫描而发送的事件
<a name="image-scanning-enhanced-events"></a>

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

 **存储库扫描频率更改事件** 

为注册表开启增强扫描后，当开启了增强扫描的资源发生更改时，Amazon ECR 将发送以下事件。这包括正在创建新存储库、正在更改存储库的扫描频率，或者在开启了增强扫描功能的存储库中创建或删除映像。有关更多信息，请参阅 [在 Amazon ECR 中扫描映像是否存在软件漏洞](image-scanning.md)。

```
{
	"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` 级别的结果，则不会返回任何关键计数。有关更多信息，请参阅 [扫描映像以查找 Amazon ECR 中的操作系统和编程语言包漏洞](image-scanning-enhanced.md)。

事件模式：

```
{
  "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 会发送以下事件。有关更多信息，请参阅 [扫描映像以查找 Amazon ECR 中的操作系统和编程语言包漏洞](image-scanning-enhanced.md)。

事件模式：

```
{
  "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",
                        "lastInUseAt": "Dec 3, 2021, 6:02:13 PM",
                        "inUseCount": 1,
                        "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"
    }
}
```

# 检索 Amazon ECR 中增强扫描的调查发现
<a name="image-scanning-enhanced-describe-scan-findings"></a>

您可以检索上次完成的增强映像扫描的扫描调查发现，然后在 Amazon Inspector 中打开调查发现以查看更多详细信息。已发现的软件漏洞是根据常见漏洞和风险敞口 (CVEs) 数据库按严重程度列出的。

有关扫描镜像时的常见问题的排查详细信息，请参阅 [排查 Amazon ECR 中的映像扫描问题](image-scanning-troubleshooting.md)。

------
#### [ AWS 管理控制台 ]

通过 AWS 管理控制台使用以下步骤检索镜像扫描结果。

**要检索映像扫描调查发现**

1. 打开 Amazon ECR 控制台，网址为[https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/)。

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

1. 在导航窗格中，选择**存储库**。

1. 在**存储库**页面上，选择包含要扫描检索结果的镜像的存储库。

1. 在**映像**页面的**映像标签**列下，选择映像标签以检索扫描调查发现。

1. 要在 Amazon Inspector 控制台中查看更多详细信息，请在**名称**列中选择漏洞名称。

------
#### [ AWS CLI ]

使用以下 AWS CLI 命令使用检索图像扫描结果 AWS CLI。您可以使用 `imageTag` 或 ` imageDigest` 指定镜像，这两者都可以使用 [list-images](https://docs.aws.amazon.com/cli/latest/reference/ecr/list-images.html) CLI 命令获取。
+ [ describe-image-scan-findings](https://docs.aws.amazon.com/cli/latest/reference/ecr/describe-image-scan-findings.html) (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
  ```

------