

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

# 修复 Amazon ECS 服务的暴露
<a name="exposure-ecs-service"></a>

Amazon Security Hub 可以生成亚马逊弹性容器服务 (Amazon ECS) 服务 (Amazon ECS) 服务的曝光结果。

暴露调查发现中涉及的 Amazon ECS 服务及其识别信息列在调查发现详细信息的**资源**部分中。您可以在 Security Hub 控制台上检索这些资源详细信息，也可以通过 Security Hub CSPM AP [GetFindingsV2](https://docs.amazonaws.cn/securityhub/1.0/APIReference/API_GetFindingsV2.html)I 的操作以编程方式检索这些资源详细信息。

在确定暴露调查发现中涉及的资源后，如果不需要该资源，您可以将其删除。删除不必要的资源可以减少您的曝光概况和 Amazon 成本。如果资源至关重要，请按照这些建议的修复步骤进行操作以帮助降低风险。修复主题根据特征的类型进行划分。

单个暴露调查发现包含在多个修复主题中发现的问题。相反，您只需解决一个修复主题即可解决暴露调查发现并降低其严重性级别。您的风险修复方法取决于您的组织要求和工作负载。

**注意**  
 本主题中提供的补救指南可能需要在其他 Amazon 资源中进行更多咨询。

**Contents**
+ [Amazon ECS 服务的错误配置特征](#ecs-service-misconfiguration)
  + [Amazon ECS 服务使用允许容器访问根文件系统的任务定义](#root-access-to-filesystem)
  + [Amazon ECS 服务使用配置为共享主机的进程命名空间的任务定义](#exposed-namespace)
  + [Amazon ECS 服务使用在环境变量中配置了明文凭证的任务定义](#cleartext-credentials-present)
  + [Amazon ECS 服务具有开放的安全组](#open-security-group)
  + [Amazon ECS 服务有公有 IP 地址](#public-ip-assigned)
  + [Amazon ECS 服务使用已配置且启用了主机联网模式的任务定义](#host-networking-mode-enabled)
  + [与 Amazon ECS 服务关联的 IAM 角色具有管理访问策略](#administrative-access-policy)
  + [与 ECS 服务关联的 IAM 角色具有服务管理员策略](#service-admin-policy)
+ [Amazon ECS 服务的漏洞特征](#vulnerability)
  + [Amazon ECS 服务的一个容器存在可通过网络利用的软件漏洞，被利用的可能性很高](#high-priority-vulnerability)
  + [Amazon ECS 服务的一个容器存在软件漏洞](#low-priority-vulnerability)
  + [Amazon ECS 服务有一个装有 End-Of-Life操作系统的容器](#end-of-life-operating-system-detected)
  + [Amazon ECS 服务有一个装有恶意软件包的容器](#malicious-package)

## Amazon ECS 服务的错误配置特征
<a name="ecs-service-misconfiguration"></a>

以下是 Amazon ECS 服务的错误配置特征和建议的修复步骤。

### Amazon ECS 服务使用允许容器访问根文件系统的任务定义
<a name="root-access-to-filesystem"></a>

有权访问主机根文件系统的 Amazon ECS 容器可能会读取、修改或执行主机系统上的关键文件。这种配置增加了遭入侵容器可能被用于访问或修改其预期范围之外的资源的风险，从而可能暴露主机文件系统上的敏感数据。根据标准安全原则， Amazon 建议您授予最低权限，这意味着您仅授予执行任务所需的权限。

**查看和修改具有主机文件系统访问权限的容器**  
在暴露调查发现中，识别任务定义 ARN。在 Amazon ECS 控制台中打开任务定义。在定义主机路径映射的任务定义中查找卷部分。查看任务定义，确定容器功能是否需要主机文件系统访问权限。如果不需要访问主机文件系统，请创建一个新的任务定义修订版，并移除任何使用主机路径的卷定义。如果需要访问主机文件系统，请考虑将容器配置为使用只读文件系统，以防止未经授权的修改。

### Amazon ECS 服务使用配置为共享主机的进程命名空间的任务定义
<a name="exposed-namespace"></a>

使用公开的命名空间运行的 Amazon ECS 容器可能会访问主机系统资源和其他容器命名空间。这种配置可能会允许遭入侵的容器逃离其隔离边界，从而可能导致访问其预期范围外的进程、网络接口或其他资源。进程 ID（PID）命名空间提供了进程之间的分离。它可以防止系统进程可见，并 PIDs 允许重复使用，包括 PID 1。如果主机的 PID 命名空间与容器共享，则容器可以看到主机系统上的所有进程。这降低了主机和容器之间进程级分离的好处。这些因素可能导致未经授权访问主机本身的进程，包括操纵和终止这些进程的能力。遵循标准的安全原则， Amazon 建议为容器保持适当的命名空间隔离。

**使用公开的命名空间更新任务定义**  
打开暴露的**资源**选项卡，识别具有公开的命名空间的任务定义。在 Amazon ECS 控制台中打开任务定义。查找值为 host 的 PidMode 设置，该设置将与主机共享进程 ID 命名空间。从任务定义中移除 PidMode: host 设置，以确保容器以正确的命名空间隔离运行。

### Amazon ECS 服务使用在环境变量中配置了明文凭证的任务定义
<a name="cleartext-credentials-present"></a>

环境变量中包含明文凭证的 Amazon ECS 容器会暴露敏感的身份验证信息，如果攻击者获得任务定义、容器环境或容器日志的访问权限，这些信息可能会被泄露。这会造成严重的安全风险，因为泄露的凭据可能被用来访问其他 Amazon 服务或资源。

**替换明文凭证**  
在暴露调查发现中，识别具有明文凭证的任务定义。在 Amazon ECS 控制台中打开任务定义。在容器定义中查找包含敏感值（例如 Amazon 访问密钥、数据库密码或 API 令牌）的环境变量。

 考虑采用以下替代方法来传递凭证：
+ 与其使用 Amazon 访问密钥，不如使用 IAM 任务执行角色和任务角色向容器授予权限。
+ 将凭证作为机密存储在中， Amazon Secrets Manager 并在任务定义中引用它们。

**更新任务定义**  
创建一个新的可安全地处理凭证的任务定义修订版。然后对 Amazon ECS 服务进行更新，以使用新的任务定义修订版。

### Amazon ECS 服务具有开放的安全组
<a name="open-security-group"></a>

安全组充当 Amazon ECS 任务的虚拟防火墙以控制入站和出站流量。允许从任何 IP 地址进行不受限制访问的开放式安全组可能会使您的容器面临未经授权的访问，从而增加暴露于自动扫描工具和针对性攻击的风险。根据标准安全原则， Amazon 建议将安全组的访问权限限制为特定 IP 地址和端口。

**查看安全组规则并评测当前配置**  
打开 Amazon ECS 安全组的资源。评估哪些端口已开放且可从广泛的范围 IP 地址（例如 `(0.0.0.0/0 or ::/0)`）访问。

**修改安全组规则**  
修改您的安全组规则，将访问限制于特定的受信任 IP 地址或范围。更新安全组规则时，请考虑通过为每个所需的源 IP 地址范围创建规则或限制对特定端口的访问来区分不同网段的访问要求。

**修改安全组规则**  
 请考虑以下替代访问方法选项：
+ 会话管理器提供对 Amazon EC2 实例的 Secure Shell 访问，无需入站端口、管理 SSH 密钥或维护堡垒主机。
+ NACLs 在子网级别提供额外的安全层。与安全组不同， NACLs 它们是无状态的，需要明确定义入站和出站规则。

### Amazon ECS 服务有公有 IP 地址
<a name="public-ip-assigned"></a>

具有分配给其任务的公有 IP 地址的 Amazon ECS 服务可以直接从互联网访问。虽然这对于需要公开提供的服务来说可能是必要的，但这会增加攻击面和未经授权访问的可能性。

**识别具有公有 IP 地址的服务**  
在暴露调查发现中，识别为其任务分配了公有 IP 地址的 Amazon ECS 服务。在服务配置中查找值为 `ENABLED` 的 `assignPublicIp` 设置。

**更新任务定义**  
创建可禁用公有 IP 地址的任务定义新修订版。然后对 Amazon ECS 服务进行更新，以使用新的任务定义修订版。

**实施私有网络访问模式**  
对于运行 Web 应用程序的实例，请考虑使用负载均衡器 (LB)。 LBs 可以配置为允许您的实例在私有子网中运行，而 LB 在公有子网中运行并处理互联网流量。

### Amazon ECS 服务使用已配置且启用了主机联网模式的任务定义
<a name="host-networking-mode-enabled"></a>

以主机联网模式运行的 Amazon ECS 容器与主机共享网络命名空间，从而可以直接访问主机的网络接口、端口和路由表。此配置绕过了容器提供的网络隔离，可能会将容器上运行的服务直接暴露给外部网络，并允许容器修改主机网络设置。遵循标准安全原则， Amazon 建议为容器保持适当的网络隔离。

**禁用主机联网模式**  
在暴露调查发现中，识别具有主机联网模式的任务定义。在 Amazon ECS 控制台中打开任务定义。在任务定义中查找值为 host 的 NetworkMode 设置。

 请考虑使用以下选项来禁用主机联网模式：
+  `awsvpc` 网络模式通过为每个任务提供自己的弹性网络接口来提供最强的网络隔离级别。
+  `bridge` 网络模式提供隔离，同时允许端口映射将特定的容器端口暴露给主机。

**更新任务定义**  
创建一个新的具有更新的网络模式配置的任务定义修订版。然后对 Amazon ECS 服务进行更新，以使用新的任务定义修订版。

### 与 Amazon ECS 服务关联的 IAM 角色具有管理访问策略
<a name="administrative-access-policy"></a>

具有附加到 Amazon ECS 任务的管理访问策略的 IAM 角色提供了超出容器操作通常所需的广泛权限。这种配置会增加被入侵的容器被用来访问或修改整个 Amazon 环境中的资源的风险。遵循标准的安全原则， Amazon 建议通过仅授予任务运行所需的权限来实现最低权限访问权限。

**查看和识别管理策略**  
在**资源 ID** 中，识别 IAM 角色名称。前往 IAM 控制面板，然后选择已识别的角色。查看附加到 IAM 角色的权限策略。如果该策略是 Amazon 托管策略，请查找`AdministratorAccess`。否则，在策略文档中，查找同时包含 `"Effect": "Allow", "Action": "*", and "Resource": "*"` 语句的语句。

**实施最低权限访问**  
将管理策略替换为仅授予实例运行所需的特定权限的策略。要识别不必要的权限，您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。或者，您可以创建一个新的 IAM 角色，以避免影响使用现有角色的其他应用程序。在这种情况下，请创建一个新的 IAM 角色，然后将新的 IAM 角色与实例关联起来。

**安全配置注意事项**  
如果实例需要服务级别的管理权限，请考虑实施以下额外安全控制措施来降低风险：
+  MFA 通过要求其他形式的身份验证来增加额外安全保障。即使凭证遭到泄露，这也有助于防止未经授权的访问。
+  通过设置条件元素，您可以基于源 IP 或 MFA 期限等因素限制何时以及如何使用管理权限。

**更新任务定义**  
创建一个新的引用新增或更新的 IAM 角色的任务定义修订版。然后对 Amazon ECS 服务进行更新，以使用新的任务定义修订版。

### 与 ECS 服务关联的 IAM 角色具有服务管理员策略
<a name="service-admin-policy"></a>

 服务管理策略为 Amazon ECS 任务和服务提供了在特定 Amazon 服务中执行所有操作的权限。这些策略通常包括 Amazon ECS 任务功能所需的权限。为一个 IAM 角色提供用于 Amazon ECS 任务的服务管理策略（而不是所需的最低权限集）可能会在容器遭到入侵时扩大攻击范围。遵循标准的安全原则， Amazon 建议您授予最低权限，这意味着仅授予执行任务所需的权限。

**查看和识别管理策略**  
 在**资源 ID** 中，标识 Amazon ECS 任务角色和执行角色名称。前往 [IAM 控制面板](https://console.amazonaws.cn/iam/home/#roles)并选择已识别的角色。查看附属于这些 IAM 角色的权限策略。查找授予服务完全访问权限的政策声明（例如`"s3": "*", "ecr": "*"`）。有关编辑 IAM 策略的说明，请参阅 [IAM *用户指南中的编辑 IAM* 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-edit.html#edit-policy-details)。

**实施最低权限访问**  
 将服务管理策略替换为仅授予 Amazon ECS 任务运行所需的特定权限的策略。要识别不必要的权限，您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。或者，您可以创建一个新的 IAM 角色，以避免影响使用现有角色的其他应用程序。在这种情况下，请创建一个新的 IAM 角色，然后将新的 IAM 角色与实例关联起来。

**安全配置注意事项**  
 如果 Amazon ECS 任务需要服务级别的管理权限，请考虑实施以下额外的安全控制：
+  **IAM 条件** — 设置条件元素，根据 VPC 终端节点或特定的 Amazon ECS 集群等因素限制何时以及如何使用管理权限。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM 策略中的条件进一步限制访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#use-policy-conditions)。
+  **权限边界**-确定角色可以拥有的最大权限，为具有管理权限的角色提供防护。有关更多信息，请参阅 *IAM 用户指南*中的[使用权限边界委派账户内的权限管理](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#bp-permissions-boundaries)。

**更新任务定义**  
 创建一个新的引用新增或更新的 IAM 角色的任务定义修订版。然后对 Amazon ECS 服务进行更新，以使用新的任务定义修订版。

## Amazon ECS 服务的漏洞特征
<a name="vulnerability"></a>

以下是 Amazon ECS 的漏洞特征和建议的修复步骤。

### Amazon ECS 服务的一个容器存在可通过网络利用的软件漏洞，被利用的可能性很高
<a name="high-priority-vulnerability"></a>

1. **了解暴露**

   Package 漏洞发现可识别您的 Amazon 环境中暴露于常见漏洞和漏洞的软件包（CVEs）。攻击者可以利用这些未修补的漏洞来破坏数据的保密性、完整性或可用性，或访问其他系统。ECR 容器映像可能具有程序包漏洞调查发现。

1. **修复暴露**

   1. **更新软件包版本**

      查看 ECR 容器映像的程序包漏洞调查发现。按照 Amazon Inspector 的建议更新软件包版本。有关更多信息，请参阅《Amazon Inspector 用户指南》**中的[查看 Amazon Inspector 调查发现的详细信息](https://docs.amazonaws.cn/inspector/latest/user/findings-understanding-details.html)。Amazon Inspector 控制台中的调查发现详细信息的**修复**部分会指明您可以运行哪些命令来更新软件包。

   1. **更新基本容器映像**

      定期重建和更新基础容器映像，使您的容器保持最新状态。重建映像时，请不要包括不必要的组件以减少攻击面。有关重建容器映像的说明，请参阅 [Rebuild your images often](https://docs.docker.com/build/building/best-practices/#rebuild-your-images-often)。

### Amazon ECS 服务的一个容器存在软件漏洞
<a name="low-priority-vulnerability"></a>

安装在 Amazon ECS 容器上的软件包可能会暴露在常见漏洞和漏洞中（CVEs）。与高优先级漏洞相比，低优先级漏洞表示严重性或可利用性较低的安全隐患。虽然这些漏洞不会造成直接风险，但攻击者仍可以利用这些未修补的漏洞来破坏数据的保密性、完整性或可用性，或访问其他系统。

**更新受影响的容器映像**  
查看特征的**漏洞**选项卡中的**参考**部分。供应商文档可能包括具体的修复指导。

请按照以下一般准则进行适当的修复：
+  更新您的容器映像以使用受影响软件包的修补版本。
+  将应用程序中受影响的依赖项更新为其最新的安全版本。

更新容器映像后，请将其推送到您的容器注册表，并更新 Amazon ECS 任务定义以使用新映像。

**未来注意事项**  
为进一步增强容器映像的安全状态，请考虑遵循 Amazon ECS 任务和容器安全最佳实践。可以将 Amazon Inspector 配置为 CVEs 自动扫描您的容器。Amazon Inspector 还可以与 Security Hub 集成以实现自动修复。请考虑使用 Systems Manager Maintenance Windows 实施定期修补计划，以尽量减少对容器的中断。

### Amazon ECS 服务有一个装有 End-Of-Life操作系统的容器
<a name="end-of-life-operating-system-detected"></a>

 Amazon ECS 容器所依赖的 end-of-life操作系统不再由原始开发者支持或维护。这会使容器面临安全漏洞和潜在攻击。当操作系统上线时 end-of-life，供应商通常会停止发布新的安全公告。现有的安全公告也可以从供应商 Feed 中删除。因此，Amazon Inspector可能会停止生成已知的调查结果 CVEs，从而在安全覆盖方面造成进一步的漏洞。

 请参阅《*亚马逊检查员用户指南*》中的[已停产操作系统](https://docs.amazonaws.cn/inspector/latest/user/supported.html#formerly-supported-os)，了解有关亚马逊检查员可以检测到的已使用寿命终止的操作系统的信息。

**更新到支持的操作系统版本**  
 我们建议更新到支持的操作系统版本。在风险调查结果中，打开资源以访问受影响的资源。在更新容器映像中的操作系统版本之前，请查看 *Amazon Inspector 用户指南*中[支持的操作系统](https://docs.amazonaws.cn/inspector/latest/user/supported.html#supported-os)中的可用版本，了解当前支持的操作系统版本列表。更新容器映像后，请将其推送到您的容器注册表，并更新 Amazon ECS 任务定义以使用新映像。

### Amazon ECS 服务有一个装有恶意软件包的容器
<a name="malicious-package"></a>

 恶意软件包是包含有害代码的软件组件，旨在危害系统和数据的机密性、完整性和可用性。恶意软件包会对您的 Amazon ECS 容器映像构成严重威胁，因为攻击者可以在不利用漏洞的情况下自动执行恶意代码。按照安全最佳实践， Amazon 建议移除恶意软件包，以保护您的容器免受潜在攻击。

**移除恶意软件包**  
 在特征的 “**漏洞**” 选项卡的 “**参考**” 部分中查看恶意软件包的详细信息，以了解威胁。从您的容器镜像中移除已识别的恶意软件包，然后对其进行重建。有关更多信息，请参阅 *Amazon Amazon ECS API 参考*中的 [ContainerDependency](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_ContainerDependency.html)。更新容器映像后，请将其推送到您的容器注册表，并更新 Amazon ECS 任务定义以使用新映像。有关更多信息，请参阅 [Amazon ECS *开发人员指南中的使用控制台更新Amazon Amazon ECS* 任务定义](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/update-task-definition-console-v2.html)。