Amazon ECS 的网络安全最佳实践 - Amazon Elastic Container Service

Amazon ECS 的网络安全最佳实践

网络安全是一个包含多个子主题的广泛主题。其中包括传输中加密、网络分段和隔离、防火墙、流量路由和可观测性。

传输中加密

加密网络流量可防止未经授权的用户在通过网络传输数据时拦截和读取数据。使用 Amazon ECS,可以通过以下任何方式实施网络加密。

任务联网

以下建议考虑了 Amazon ECS 的工作原理。Amazon ECS 不使用叠加网络。相反,任务配置为在不同的网络模式下运行。例如,配置为使用 bridge 模式的任务会从每台主机上运行的 Docker 网络获取不可路由的 IP 地址。配置为使用 awsvpc 网络模式的任务会从主机的子网获取 IP 地址。配置了 host 联网功能的任务使用主机的网络接口。awsvpc 是首选的网络模式。这是因为它是您可以用来为任务分配安全组的唯一模式。它也是唯一可用于在 Amazon ECS 上的 AWS Fargate 任务的模式。

任务的安全组

建议您配置任务以使用 awsvpc 网络模式。将任务配置为使用此模式后,Amazon ECS 代理会自动预调配弹性网络接口(ENI)并将其附加到该任务。预调配 ENI 后,任务将注册到 AWS 安全组中。安全组充当 VPC 的虚拟防火墙,您可以使用该防火墙控制入站和出站流量。

AWS PrivateLink 是一种网络技术,使您能够为包括 Amazon ECS 在内的不同 AWS 服务创建私有端点。在没有连接到 Amazon VPC 的互联网网关(IGW),也没有通往互联网的备用路由的沙盒环境中,需要端点。使用 AWS PrivateLink 可确保对 Amazon ECS 服务的调用保持在 Amazon VPC 内且不会产生互联网流量。有关如何为 Amazon ECS 和其他相关服务创建 AWS PrivateLink 端点的说明,请参阅 Amazon ECS 接口 Amazon VPC 端点

重要

AWS Fargate 任务不需要使用 Amazon ECS 的 AWS PrivateLink 端点。

Amazon ECR 和 Amazon ECS 都支持端点策略。这些策略使您能够完善对服务 API 的访问权限。例如,您可以为 Amazon ECR 创建端点策略,该策略仅允许将映像推送到特定 AWS 账户的注册表。这样的策略可以用来防止数据通过容器映像泄露,同时仍然允许用户推送到授权的 Amazon ECR 注册表。有关更多信息,请参阅使用 VPC 端点策略

以下策略仅允许您账户中的所有 AWS 主体对您的 Amazon ECR 存储库执行所有操作:

{ "Statement": [ { "Sid": "LimitECRAccess", "Principal": "*", "Action": "*", "Effect": "Allow", "Resource": "arn:aws:ecr:region:account_id:repository/*" }, ] }

您可以通过设置使用新 PrincipalOrgID 属性的条件来进一步增强这一点。这样可以防止不属于您的 AWS Organizations 的 IAM 主体推送和拉取映像。有关更多信息,请参阅 aws:PrincipalOrgID

建议对 com.amazonaws.region.ecr.dkrcom.amazonaws.region.ecr.api 端点应用相同的策略。

容器代理设置

Amazon ECS 容器代理配置文件包含多个与网络安全相关的环境变量。ECS_AWSVPC_BLOCK_IMDSECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST 用于阻止任务访问 Amazon EC2 元数据。HTTP_PROXY 用于将代理配置为通过 HTTP 代理进行路由以连接到互联网。有关将代理和 Docker 运行时系统配置为通过代理进行路由的说明,请参阅 HTTP 代理配置

重要

当您使用 AWS Fargate 时,这些设置不可用。

网络安全建议

建议您在设置 Amazon VPC、负载均衡器和网络时执行以下操作。

在适用的情况下将网络加密与 Amazon ECS 结合使用

您应该在适用的情况下使用网络加密。某些合规计划(例如 PCI DSS)要求您对传输中的数据进行加密,前提是这些数据包含持卡人数据。如果您的工作负载有类似的要求,请配置网络加密。

当用户连接到不安全的网站时,现代浏览器会发出警告。如果您的服务前面有面向公众的负载均衡器,请使用 TLS/SSL 加密从客户端浏览器到负载均衡器的流量,并在必要时重新加密到后端。

使用 awsvpc 网络模式和安全组控制任务与 Amazon ECS 中的其他资源之间的流量

当您需要控制任务之间和任务与其他网络资源之间的流量时,您应该使用 awsvpc 网络模式和安全组。如果您的服务位于 ALB 之后,则使用安全组仅允许来自其他网络资源的入站流量,这些资源使用与您的 ALB 相同的安全组。如果您的应用程序位于 NLB 之后,请将任务的安全组配置为仅允许来自 Amazon VPC CIDR 范围的入站流量以及分配给 NLB 的静态 IP 地址。

还应使用安全组来控制任务与 Amazon VPC 内其他资源(例如 Amazon RDS 数据库)之间的流量。

当需要严格隔离网络流量时,在单独的 Amazon VPC 中创建 Amazon ECS 集群

当需要严格隔离网络流量时,您需要在单独的 Amazon VPC 中创建集群。避免在集群上使用不必遵守严格安全要求的工作负载运行具有严格安全要求的工作负载。当必须进行严格的网络隔离时,请在单独的 Amazon VPC 中创建集群,并有选择地使用 Amazon VPC 端点向其他 Amazon VPC 公开服务。有关更多信息,请参阅 Amazon VPC 端点

您应在必要时配置 AWS PrivateLink 端点。如果您的安全策略防止您将互联网网关(IGW)连接到 Amazon VPC,请为 Amazon ECS 以及 Amazon ECR、AWS Secrets Manager 和 Amazon CloudWatch 等其他服务配置 AWS PrivateLink 端点。

使用 Amazon VPC 流日志分析 Amazon ECS 中的长时间运行任务的进出流量

您应该使用 Amazon VPC 流日志分析长时间运行的任务的进出流量。使用 awsvpc 网络模式的任务会获得自己的 ENI。为此,您可以使用 Amazon VPC 流日志监控进出单个任务的流量。Amazon VPC 流日志(v3)的最新更新使用流量元数据丰富了日志,包括 vpc ID、子网 ID 和实例 ID。此元数据可用于帮助缩小调查范围。有关更多信息,请参阅 Amazon VPC 流日志

注意

由于容器的临时性质,流日志可能并不总是分析不同容器或容器与其他网络资源之间的流量模式的有效方法。