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

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

Vikrant Telkar、Wassim Benhallam 和 Sajid Momin,Amazon Web Services

摘要

在 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 将事件发送到 Amazon EventBridge,然后 EventBridge 会启动 Amazon Simple Notification Service (Amazon SNS) 主题。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 Config workflow with Lambda, Amazon ECR, EventBridge, SNS, and email notification components.

下图显示了如下工作流:

  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 的基于资源的权限。                                

  • Amazon EventBridge - Amazon EventBridge 是一项无服务器事件总线服务,您可以使用它将应用程序与各种来源的数据连接起来。EventBridge 可以从应用程序、软件即服务(SaaS)应用程序和 Amazon Web Services 将实时数据流传输到各个目标,例如 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