使用 Amazon Config 评估 Kubernetes 资源的合规性和配置

作者: Simone Pomata |

如今,许多客户依靠 Amazon Config 来记录配置、跟踪配置历史记录和评估其亚马逊云科技资源的合规性,例如亚马逊云科技弹性计算云(Amazon EC2)实例、亚马逊云科技简单存储服务(Amazon S3)存储桶,甚至亚马逊云科技弹性 Kubernetes Service(Amazon EKS)集群。这使他们能够全面了解其亚马逊云科技基础设施配置状态和合规状况。

但是,在管理在 Amazon EKS 集群中运行的 Kubernetes 资源(例如 pod、部署和服务)的合规性时,组织通常需要实现单独的工具。这是因为 Kubernetes 资源存在于集群中,而不是作为直接的亚马逊云科技资源存在,因此它们处于标准的 Amazon Config 记录范围之外。

这篇文章中描述的开源解决方案通过将 Amazon Config 功能扩展到 Kubernetes 资源来弥合这一差距。这种集成使您能够:

  • 记录和跟踪 Kubernetes 资源在一段时间内的配置变化
  • 使用 Amazon Config 高级查询功能查询 Kubernetes 资源
  • 应用 Amazon Config 规则来评估 Kubernetes 资源的合规性
  • 维护亚马逊云科技和 Kubernetes 配置的单一真实来源
  • 利用现有 Amazon Config 控制面板和报告获取 Kubernetes 资源

解决方案演练

部署

该解决方案使用 Amazon CloudFormation 进行部署,它会在您的亚马逊云科技账户中预置所有必要的资源。有关部署说明,请参阅项目文档。

配置解决方案

在部署期间或部署之后,您可以使用多个 CloudFormation 参数自定义解决方案,包括:

  • 资源种类:指定要记录的 Kubernetes 资源类型(例如,Pod, Deployment, Service
  • 命名空间过滤器:包含或排除特定的 Kubernetes 命名空间
  • 标签选择器:根据 Kubernetes 标签筛选要记录的资源
  • 资源字段:控制记录中包含或排除哪些字段

这些参数允许您根据自己的特定需求量身定制解决方案,重点关注对您的组织最重要的资源和配置。有关参数的完整列表,请参阅项目文档。

查看录制的资源

部署后,您可以在 Amazon Config 控制台中查看您的 Kubernetes 资源:

  1. 导航到 Amazon Config 控制台
  2. 在左侧菜单中,选择资源
  3. 资源类型筛选 AWSCustom::EKS::KubernetesResource
  4. 浏览录制的 Kubernetes 资源列表,如下图所示

资源清单
图 1 — 显示记录的 Kubernetes 资源的 Amazon Config 控制台

从资源标识符列中选择资源以查看其配置详细信息,包括元数据、规格和亚马逊云科技配置特定信息。例如,下图显示了记录的 Kubernetes 部署的详细信息:

资源配置
图 2 — Amazon Config 中记录的 Kubernetes 部署的配置详情

在资源页面中,选择资源时间表以查看资源随时间推移而发生的变化。例如,下图显示了记录的 Kubernetes 部署的配置历史记录:

资源时间表
图 3 — 显示 Amazon Config 中 Kubernetes 部署的配置历史记录的资源时间表

查询资源

该解决方案实现的强大功能之一是能够使用 Amazon Config 高级查询检索您的 Kubernetes 资源。例如:

SELECT
  *
WHERE
  resourceType = 'AWSCustom::EKS::KubernetesResource'

此查询返回 Amazon Config 中记录的所有 Kubernetes 资源,如下图所示。

初始查询
图 4 — Amazon Config 高级查询 Kubernetes 资源的结果

您还可以创建更具体的查询来查找特定的资源。例如:

SELECT
  *
WHERE
  resourceType = 'AWSCustom::EKS::KubernetesResource'
  AND resourceId LIKE '<your-cluster-id>/kube-system/ConfigMap%'

此查询返回 kube-system 命名空间中特定 EKS 集群的所有 Kubernetes ConfigMap 资源。

评估合规性

通过将您的 Kubernetes 资源记录在 Amazon Config 中,您可以创建 Amazon Config 规则以持续评估其合规性。例如,你可能需要确保:

  • 部署遵循特定的标签惯例
  • 服务使用经批准的端口范围
  • 命名空间已应用网络策略

您可以使用 Amazon CloudFormation Guard 策略即代码语言或 Amazon Lambda 函数创建 Amazon Config 自定义规则。以下是确保部署至少有两个副本的 Guard 规则示例:

rule kubernetes_deployment_min_replicas when resourceType == "AWSCustom::EKS::KubernetesResource" {
 # Only evaluate this rule if the Kubernetes Resource is a Deployment
  when configuration.K8sResourceKind == "Deployment" {
    # Ensure the Deployment has at least 2 replicas
    configuration.K8sItem.spec.replicas >= 2
  }
}

这里有一条更高级的规则,可以确保所有 pod 都使用来自经批准的注册表的镜像:

let approved_registries = [/^registry\.mycorp\.com\/.*/, /^public\.ecr\.aws\/docker\/.*/]

rule kubernetes_approved_registries when resourceType == "AWSCustom::EKS::KubernetesResource" {
  # Only evaluate this rule if the Kubernetes Resource is a Pod
  when configuration.K8sResourceKind == "Pod" {
    # Check all containers use approved registry
    configuration.K8sItem.spec.containers[*] {
      # Ensure image is from approved registry
      image IN %approved_registries
    }
    
    # Also check init containers if present
    when configuration.K8sItem.spec.initContainers EXISTS {
      configuration.K8sItem.spec.initContainers[*] {
        image IN %approved_registries
      }
    }
    
    # Check ephemeral containers if present
    when configuration.K8sItem.spec.ephemeralContainers EXISTS {
      configuration.K8sItem.spec.ephemeralContainers[*] {
        image IN %approved_registries
      }
    }
  }
}

要在 Amazon Config 中创建这些规则,请执行以下操作:

  1. 在 Amazon Config 控制台的左侧导航窗格中,选择规则
  2. 选择"添加规则",选择"使用 Guard 创建自定义规则",然后选择"下一步"。
  3. 在"配置规则"页面中:
    1. 对于规则名称,键入一个有意义的名称(例如,kubernetes_approved_registries
    2. 对于规则内容,粘贴您的警卫规则内容
    3. 在"评估模式"部分中,在"更改范围"中选择"资源"
    4. 对于资源类型,输入并选择 AWSCustom::EKS::KubernetesResource
  4. 选择下一步并选择保存

创建规则后,Amazon Config 会持续根据该规则评估资源。规则页面显示范围内所有 Kubernetes 资源的合规性状态,可帮助您快速识别配置问题。例如,下图显示了两个兼容和两个不合规的 pod。

规则评估
图 5 — Kubernetes 容器的 Amazon Config 规则合规状态

现在,您可以返回查询编辑器并执行以下查询,以获取集群 default 命名空间中所有不合规的 pod:

SELECT
  configuration.targetResourceId,
  configuration.targetResourceType,
  configuration.complianceType,
  configuration.configRuleList
WHERE
  configuration.complianceType = 'NON_COMPLIANT'
  AND configuration.targetResourceType = 'AWSCustom::EKS::KubernetesResource'
  AND configuration.targetResourceId LIKE '<your-cluster-id>/default/Pod/%'

深入研究 — 解决方案架构

现在您已经了解了该解决方案可以做什么,接下来的部分将解释其在幕后的工作原理。该解决方案使用 Amazon Step Functions 来协调将 Kubernetes 资源注册为 Amazon Config 定制资源的流程。

初始解决方案部署将自定义资源类型 AWSCustom::EKS::KubernetesResource 注册到 CloudFormation 注册表。这包括一个定义 Kubernetes 资源结构和属性的架构,它使 Amazon Config 能够正确解释、验证和跟踪 Kubernetes 资源配置。部署还为工作流程操作预置了所有必要的亚马逊云科技资源(Lambda 函数、Step Function 状态机、S3 存储桶等)。下图显示了该解决方案的架构。

建筑
图 6 — 解决方案的架构图

然后,工作流程按以下方式运行:

  • 计划执行:
    1. 亚马逊云科技 EventBridge 规则按可配置的时间表(默认:每小时)触发步进函数状态机。
  • 资源发现和分析:
    1. DiscoverResources Lambda 函数列出您的亚马逊云科技账户中的 EKS 集群,连接到每个集群,并根据您的配置(资源种类、命名空间、标签等)对它们进行过滤,检索相关资源。
    2. DiscoverResources Lambda 函数查询 Amazon Config 以获取当前记录在 Amazon Config 中的 Kubernetes 资源列表。
    3. DiscoverResources Lambda 函数计算哪些资源已过时且需要从 Amazon Config 中删除,以及哪些资源是新的或已更改且需要注册的。它将两个列表保存到 S3。
  • 资源删除:
    1. DeleteResources Lambda 函数从 S3 读取要删除的资源列表。
    2. 它会从 Amazon Config 中删除这些过时的资源。
  • 资源注册:
    1. RegisterResources Lambda 函数从 S3 读取要注册的资源列表。
    2. 它在 Amazon Config 中将这些资源创建或更新为类型的自定义资源 AWSCustom::EKS::KubernetesResource,使其可用于审计和合规性评估。

这种架构可确保您的 Amazon Config 资源与 Kubernetes 资源的实际状态保持同步。

用例和优点

集中配置管理

通过在 Amazon Config 中记录 Kubernetes 资源,您可以集中查看整个基础设施,包括亚马逊云科技和 Kubernetes 资源。这种统一的方法简化了配置管理,为您的云环境提供了单一事实来源。

合规性监控

该解决方案支持根据组织的政策和行业标准持续监控您的 Kubernetes 资源的合规性。您可以创建自定义规则来强制执行特定要求,并在资源偏离合规性时接收通知。此外,您可以利用 Amazon Config 一致性包对相关规则和补救措施进行分组,从而更轻松地在 Kubernetes 环境中大规模应用和管理合规性。

安全审计

安全团队可以使用记录的配置数据来审计 Kubernetes 资源,以了解安全优秀实践。例如,他们可以识别以特权访问权限运行的 pod、使用 root 用户的容器、没有适当网络策略的部署或未经授权的镜像存储库源。

变更跟踪和故障排除

出现问题时,Amazon Config 中的配置时间表可帮助您了解发生了什么变化以及何时发生了变化。这些历史数据对于故障排除非常宝贵,可以帮助您快速确定问题的根本原因。

结论

这篇文章中的开源解决方案通过将 Kubernetes 资源引入 Amazon Config 强大的配置和合规性框架,弥合了亚马逊云科技和 Kubernetes 资源管理之间的差距。这种集成可实现整个环境的统一可见性、简化的合规性并增强安全性。

要了解有关 Amazon Config 的更多信息,请访问 Amazon Config 文档。要实现此解决方案,请查看开源项目存储库。



西蒙娜·波马塔

Simone Pomata

Simone 是亚马逊云科技的首席解决方案架构师。他在科技行业热情工作了 10 多年。在亚马逊云科技,他每天都在帮助客户成功构建新技术。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。