

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

# 使用 CodePipeline IAM Access Analyzer 和 AWS CloudFormation 宏自动验证和部署 IAM 策略和角色
<a name="automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros"></a>

*Helton Ribeiro 和 Guilherme Simoes，Amazon Web Services*

## Summary
<a name="automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros-summary"></a>

此模式描述了创建部署管道的步骤并提供了代码，允许您的开发团队在您的 Amazon Web Services (AWS) Account 中创建 AWS Identity and Access Management (IAM) 策略和角色。此方法可帮助您的组织减少运营团队开销并加快部署进程。其亦有助于开发人员创建与您现有治理和安全控制兼容的 IAM 角色和策略。

此模式的方法使用 [AWS Identity and Access Management Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html) 来验证您要附加到 IAM 角色的 IAM 策略，并使用 AWS CloudFormation 来部署 IAM 角色。但是，您的开发团队不会直接编辑 AWS CloudFormation 模板文件，而是创建 JSON 格式的 IAM 策略和角色。在开始部署之前，AWS CloudFormation 宏会将这些 JSON 格式的策略文件转换为 AWS CloudFormation IAM 资源类型。

部署管道 (`RolesPipeline`) 分为源、验证和部署阶段。在源代码阶段，您的开发团队会将包含 IAM 角色和策略定义的 JSON 文件推送到 AWS CodeCommit 存储库。 CodeBuild 然后，AWS 运行脚本来验证这些文件，并将它们复制到亚马逊简单存储服务 (Amazon S3) 存储桶。由于您的开发团队无法直接访问存储在单独的 S3 存储桶中的 AWS CloudFormation 模板文件，因此他们必须遵循 JSON 文件的创建和验证流程。

最后，在部署阶段，AWS CodeDeploy 使用 AWS CloudFormation 堆栈来更新或删除账户中的 IAM 策略和角色。

**重要**  
此模式的工作流程是概念验证 (POC)，我们建议您仅在测试环境中使用该工作流程。如果想在生产环境中使用此模式方法，请参阅 IAM 文档中的 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)，并对您的 IAM 角色和 Amazon Web Service 进行必要的更改。

## 先决条件和限制
<a name="automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。
+ 用于 `RolesPipeline` 管道的新或现有 S3 存储桶。确保正在使用的访问凭证有权将对象上传至此存储桶。
+ 已安装和配置 AWS 命令行界面（AWS CLI）。有关这方面的更多信息，请参阅 AWS CLI 文档中的[安装、更新和卸载 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。 
+ AWS Serverless Application Model (AWS SAM)CLI,已安装并配置。有关这方面的更多信息，请参阅 AWS SAM 文档中的[安装 AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)。 
+ Python 3，已安装于本地计算机。有关这方面的更多信息，请参阅 [Python 文档](https://www.python.org/)。
+ Git 客户端，已安装并配置。
+  GitHub `IAM roles pipeline`存储库，克隆到您的本地计算机。 
+ 现有 JSON 格式的 IAM policy 与角色。有关这方面的更多信息，请参阅 Github `IAM roles pipeline` 存储库中的[ReadMe](https://github.com/aws-samples/iam-roles-pipeline/blob/main/README.md)文件。
+ 您的开发团队不得拥有编辑此解决方案的 AWS CodePipeline CodeBuild、和 CodeDeploy 资源的权限。

**限制**
+ 此模式的工作流程是概念验证 (POC)，我们建议您仅在测试环境中使用该工作流程。如果想在生产环境中使用此模式方法，请参阅 IAM 文档中的 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)，并对您的 IAM 角色和 Amazon Web Service 进行必要的更改。

## 架构
<a name="automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros-architecture"></a>

下图向您展示了如何使用 CodePipeline IAM Access Analyzer 和 AW CloudFormation S 宏自动验证 IAM 角色和策略并将其部署到账户。

![\[在 AWS 账户中验证和部署 IAM 策略和角色的步骤。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/df1add4d-f211-43e3-8976-5314da75f627/images/832bebaf-27a0-4949-9c30-99fc4c9982b8.png)


下图显示了如下工作流：

1. 开发人员编写包含 IAM policy 与角色定义的 JSON 文件。开发人员将代码推送到 CodeCommit 存储库 CodePipeline ，然后启动`RolesPipeline`管道。

1. CodeBuild 使用 IAM 访问分析器验证 JSON 文件。如果存在任何与安全或错误相关的调查发现，则部署进程将停止。

1. 如果无与安全或错误相关的调查发现，则将 JSON 文件发送至 `RolesBucket` S3 存储桶。

1. 然后，作为 AWS Lambda 函数实现的 AWS CloudFormation 宏从`RolesBucket`存储桶中读取 JSON 文件并将其转换为 AWS CloudFormation IAM 资源类型。

1. 预定义的 AWS CloudFormation 堆栈会安装、更新或删除账户中的 IAM 策略和角色。 

**自动化和扩展**

IA GitHub [M 角色管道](https://github.com/aws-samples/iam-roles-pipeline)存储库中提供了自动部署此模式的 AWS CloudFormation 模板。

## 工具
<a name="automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros-tools"></a>
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)帮助您标识企业和账户中与外部实体共享的资源，例如 S3 存储桶或 IAM 角色。这可以帮助您识别对资源和数据的意外访问。
+ [AWS Serverless Application Model（AWS SAM）](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)是一个开源框架，帮助您在 Amazon Web Services Cloud 中构建无服务器应用程序。

**代码**

此模式的源代码和模板可在 GitHub [IAM 角色管道](https://github.com/aws-samples/iam-roles-pipeline)存储库中找到。

## 操作说明
<a name="automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros-epics"></a>

### 克隆存储库
<a name="clone-the-repository"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
|  克隆示例存储库。 | 将 GitHub [IAM 角色管道](https://github.com/aws-samples/iam-roles-pipeline)存储库克隆到您的本地计算机。 | 应用程序开发人员，常规 AWS | 

### 部署 RolesPipeline 管道
<a name="deploy-the-rolespipeline-pipeline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署管道。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.html) | 应用程序开发人员，常规 AWS | 
| 克隆管道存储库。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.html) | 应用程序开发人员，常规 AWS | 

### 测试 RolesPipeline 管道
<a name="test-the-rolespipeline-pipeline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用有效的 IAM 策略和角色测试 RolesPipeline 管道。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.html) | 应用程序开发人员，常规 AWS | 
| 使用无效的 IAM 策略和角色测试 RolesPipeline 管道。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.html) | 应用程序开发人员，常规 AWS | 

### 清除资源
<a name="clean-up-your-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备清理。 | 清空 S3 存储桶，然后运行 `destroy` 命令。 | 应用程序开发人员，常规 AWS | 
| 删除 RolesStack 堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.html) | 应用程序开发人员，常规 AWS | 
| 删除 RolesPipeline 堆栈。 | 要删除 `RolesPipeline` AWS CloudFormation 堆栈，请按照 Github `IAM roles pipeline` 存储库中[ReadMe](https://github.com/aws-samples/iam-roles-pipeline/blob/main/README.md)文件的说明进行操作。 | 应用程序开发人员，常规 AWS | 

## 相关资源
<a name="automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros-resources"></a>
+ [IAM Access Analyzer - 策略验证](https://aws.amazon.com/blogs/aws/iam-access-analyzer-update-policy-validation/)（AWS 新闻博客）
+ [使用 AW CloudFormation S 宏对模板执行自定义处理](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html)（AWS CloudFormation 文档）
+ [使用 Python 构建 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)（AWS Lambda 文档）