

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

# 使用 AWS 和 AWS CloudFormation Config 监控亚马逊 ECR 存储库的通配符权限
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config"></a>

*Vikrant Telkar、Wassim Benhallam 和 Sajid Momin，Amazon Web Services*

## Summary
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-summary"></a>

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

IAM 在资源和操作属性中均支持“`*`”通配符，这使得自动选择多个匹配项变得更加容易。在您的测试环境中，您可以通过在[存储库策略语句](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html)的主体元素中使用 `ecr:*` [通配符权限](https://docs.aws.amazon.com/lambda/latest/operatorguide/wildcard-permissions-iam.html)来允许所有经过身份验证的 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 主题通过电子邮件通知您有关不合规的存储库策略语句。

## 先决条件和限制
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 已安装和配置 AWS 命令行界面（AWS CLI）。有关更新 Amazon CLI 的信息，请参阅 AWS CLI 文档中的[安装、更新和卸载 Amazon CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。
+ 在测试环境中安装和配置的带有附加策略语句的现有 Amazon ECR 存储库。有关更多信息，请参阅 Amazon ECR 文档中的[创建私有存储库](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)和[设置存储库策略语句](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html)。
+ AWS Config，已在您首选的 AWS 区域中配置。有关此内容的更多信息，请参阅 [AWS Config 文档中的 AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) 入门。
+ `aws-config-cloudformation.template` 文件（附加）已下载到本地计算机。

 

**限制**
+ 此模式的解决方案是区域性的，您的资源必须在同一区域中创建。 

## 架构
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-architecture"></a>

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

![\[AWS Config workflow with Lambda, Amazon ECR, EventBridge, SNS, and email notification components.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/images/49bbf14b-0a18-4d4a-86ab-162d37708e01.png)


下图显示了如下工作流：

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

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

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

1. AWS Config 向发送事件 EventBridge。

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

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

**自动化和扩缩**

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

## 工具
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS CloudFormation 可帮助您建模和设置 AWS 资源，快速一致地配置这些资源，并在资源的整个生命周期中对其进行管理。您可以使用模板来描述资源及其依赖关系，然后将它们作为堆栈一起启动和配置，而不必单独管理资源。您可以跨多个 Amazon Web Services account 和 AWS 区域管理和预置堆栈。
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) - AWS Config 提供 Amazon Web Services account 中 AWS 资源配置的详细视图。这些信息包括资源之间的关联方式以及资源以前的配置方式，让您了解资源的配置和关系如何随着的时间的推移而更改。
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)** **-** **Amazon Elastic Container Registry (Amazon ECR) 是一项安全、可扩展且可靠的 AWS 托管容器映像注册表服务。Amazon ECR 支持私有存储库，其具有使用 IAM 的基于资源的权限。                                
+ [Ama](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) zon EventBridge — Amazon EventBridge 是一项无服务器事件总线服务，可用于将应用程序与来自各种来源的数据连接起来。 EventBridge 将来自您的应用程序、软件即服务 (SaaS) 应用程序和 AWS 服务的实时数据流传输到目标，例如 AWS Lambda 函数、使用 API 目标的 HTTP 调用终端节点或其他账户中的事件总线。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) – AWS Lambda 是一项计算服务，支持无需预置或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码，并且能自动扩缩，从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费 - 代码未运行时不产生费用。
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) – Amazon Simple Notiﬁcation Service (Amazon SNS) 可协调和管理发布者和客户端之间消息的传送或发送，包括 Web 服务器和电子邮件地址。订阅用户接收所有发布至他们所订阅主题的消息，并且一个主题的所有订阅用户收到的消息都相同。 

**代码**

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

## 操作说明
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-epics"></a>

### 创建 AWS CloudFormation 堆栈
<a name="create-the-aws-cloudformation-stack"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS CloudFormation 堆栈。 | 在 AWS CLI 中运行以下命令来创建 AWS CloudFormation 堆栈：<pre>$ aws cloudformation create-stack --stack-name=AWSConfigECR \<br />    --template-body  file://aws-config-cloudformation.template \<br />    --parameters ParameterKey=<email>,ParameterValue=<myemail@example.com> \<br />    --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### 测试 AWS Config 自定义规则
<a name="test-the-aws-config-custom-rule"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试 AWS Config 自定义规则。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.html) | AWS DevOps | 

## 附件
<a name="attachments-01bbf5f8-27aa-4c64-9a03-7fcccc0955b8"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/attachments/attachment.zip)