使用 AWS 和 AWS CloudFormation Config 监控亚马逊 ECR 存储库的通配符权限 - AWS Prescriptive Guidance

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

使用 AWS 和 AWS CloudFormation Config 监控亚马逊 ECR 存储库的通配符权限

由 Vikrant Telkar (AWS)、Sajid Momin (AWS) 和 Wassim Benhallam (AWS) 创建

环境:生产

技术: DevOps; 容器和微服务

AWS 服务:AWS CloudFormation;AWS Config;亚马逊 ECR;亚马逊 SNS;AWS Lambda

Summary

在 Amazon Web Services (AWS) Cloud 上,Amazon Elastic Container Registry (Amazon ECR) 是一项托管容器映像注册表服务,支持使用 AWS Identity and Access Management(AWS IAM)且具有基于资源权限的私有存储库。

IAM 在资源和操作属性中均支持“*”通配符,这使得自动选择多个匹配项变得更加容易。在您的测试环境中,您可以通过在存储库策略语句的主体元素中使用 ecr:* 通配符权限来允许所有经过身份验证的 AWS 用户访问 Amazon ECR 存储库。在无法访问生产数据的开发账户中进行开发和测试时,ecr:* 通配符权限非常有用。

但是,您必须确保在生产环境中不使用 ecr:* 通配符权限,因为它可能会导致严重的安全漏洞。此模式的方法可帮助您识别在存储库策略语句中包含 ecr:* 通配符权限的 Amazon ECR 存储库。  该模式提供了在 AWS Config 中创建自定义规则的步骤和 AWS CloudFormation 模板。然后,AWS Lambda 函数会监控您的 Amazon ECR 存储库策略语句中是否有 ecr:* 个通配符权限。如果发现不合规的存储库策略声明,Lambda 会通知 AWS Config 向亚马逊发送事件,然后启动 EventBridge EventBridge 亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 主题。SNS 主题通过电子邮件通知您有关不合规的存储库策略语句。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account。

  • 已安装和配置 AWS 命令行界面(AWS CLI)。有关更新 Amazon CLI 的信息,请参阅 AWS CLI 文档中的安装、更新和卸载 Amazon CLI

  • 在测试环境中安装和配置的带有附加策略语句的现有 Amazon ECR 存储库。有关更多信息,请参阅 Amazon ECR 文档中的创建私有存储库设置存储库策略语句

  • AWS Config,已在您首选的 AWS 区域中配置。有关此内容的更多信息,请参阅 AWS Config 文档中的 AWS Config 入门。

  • aws-config-cloudformation.template 文件(附加)已下载到本地计算机。

 

限制

  • 此模式的解决方案是区域性的,您的资源必须在同一区域中创建。 

架构

下图显示了 AWS Config 如何评估 Amazon ECR 存储库策略语句。 

AWS Cloud architecture diagram showing interaction between services for event processing and notification.

图表显示了以下工作流:

  1. AWS Config 启动自定义规则。 

  2. 自定义规则调用 Lambda 函数来评估 Amazon ECR 存储库策略语句的合规性。然后,Lambda 函数会识别不合规的存储库策略语句。

  3. Lambda 函数将不合规状态发送到 AWS Config。

  4. AWS Config 向发送事件 EventBridge。

  5. EventBridge 向 SNS 主题发布不合规通知。

  6. Amazon SNS 会向您或授权用户发送电子邮件提醒。

自动化和扩缩

此模式的解决方案可以监控任意数量的 Amazon ECR 存储库策略语句,但您要评估的所有资源必须在同一区域中创建。

工具

  • AWS CloudFormation — AWS CloudFormation 可帮助您建模和设置 AWS 资源,快速一致地配置这些资源,并在资源的整个生命周期中对其进行管理。您可以使用模板来描述资源及其依赖关系,然后将它们作为堆栈一起启动和配置,而不必单独管理资源。您可以跨多个 Amazon Web Services account 和 AWS 区域管理和预置堆栈。

  • AWS Config - AWS Config 提供 Amazon Web Services account 中 AWS 资源配置的详细视图。这些信息包括资源之间的关联方式以及资源以前的配置方式,让您了解资源的配置和关系如何随着的时间的推移而更改。

  • Amazon ECR - Amazon Elastic Container Registry (Amazon ECR) 是一项安全、可扩展且可靠的 AWS 托管容器映像注册表服务。Amazon ECR 支持私有存储库,其具有使用 IAM 的基于资源的权限。                                

  • Ama zon EventBridge — Amazon EventBridge 是一项无服务器事件总线服务,可用于将应用程序与来自各种来源的数据连接起来。 EventBridge 将来自您的应用程序、软件即服务 (SaaS) 应用程序和 AWS 服务的实时数据流传输到目标,例如 AWS Lambda 函数、使用 API 目标的 HTTP 调用终端节点或其他账户中的事件总线。

  • AWS Lambda – AWS Lambda 是一项计算服务,支持无需预置或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费 - 代码未运行时不产生费用。

  • Amazon SNS – Amazon Simple Notification Service (Amazon SNS) 可协调和管理发布者和客户端之间消息的传送或发送,包括 Web 服务器和电子邮件地址。订阅用户接收所有发布至他们所订阅主题的消息,并且一个主题的所有订阅用户收到的消息都相同。 

代码

此模式的代码可在 aws-config-cloudformation.template 文件(附件)中获取。

操作说明

任务描述所需技能
创建 AWS CloudFormation 堆栈。

在 AWS CLI 中运行以下命令来创建 AWS CloudFormation 堆栈:

$ aws cloudformation create-stack --stack-name=AWSConfigECR \ --template-body file://aws-config-cloudformation.template \ --parameters ParameterKey=<email>,ParameterValue=<myemail@example.com> \ --capabilities CAPABILITY_NAMED_IAM
AWS DevOps
任务描述所需技能
测试 AWS Config 自定义规则。
  1. 登录 AWS 管理控制台,打开 AWS Config 控制台,然后选择资源

  2. 资源清单页上,可以按资源类别、资源类型和合规性状态进行筛选。

  3. 包含 ecr:* 的 Amazon ECR 存储库是 NON-COMPLIANT?,不包含 ecr:* 的 Amazon ECR 存储库是 COMPLIANT

  4. 如果 Amazon ECR 存储库包含不合规的策略语句,则订阅 SNS 主题的电子邮件地址将收到通知。

AWS DevOps

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip