使用 CodePipeline A IAM ccess Analyzer 和AWS CloudFormation 宏自动验证和部署AWS账户中的IAM策略和角色 - AWS Prescriptive Guidance

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

使用 CodePipeline A IAM ccess Analyzer 和AWS CloudFormation 宏自动验证和部署AWS账户中的IAM策略和角色

由 Helton Ribeiro (AWS) 和 Guilherme Simoes () 创作 AWS

代码存储库:IAM角色管道

环境:PoC 或试点

技术:安全、身份、合规; DevOps

AWS服务:AWS CloudFormation;;; AWS CodeBuild AWS CodeCommit AWS CodePipeline; AWS Lambda; AWS SAM

Summary

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

此模式的方法使用 Ident AWSity and Access Management Access Analyzer 来验证要附加AWS CloudFormation 到IAM角色并用于部署IAM角色的IAM策略。但是,您的开发团队不会直接编辑AWS CloudFormation 模板文件,而是创建JSON格式化的IAM策略和角色。在开始部署之前,AWS CloudFormation 宏会将这些JSON格式的策略文件转换为AWS CloudFormation IAM资源类型。

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

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

重要:此模式的工作流程是概念验证 (POC),我们建议您仅在测试环境中使用它。如果您想在生产环境中使用此模式的方法,请参阅IAM文档IAM中的安全最佳实践,并对您的IAM角色和AWS服务进行必要的更改。

先决条件和限制

先决条件

  • 一个活动的 AWS 账户。

  • 用于 RolesPipeline 管道的新或现有 S3 存储桶。确保正在使用的访问凭证有权将对象上传至此存储桶。

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

  • AWS已安装并配置无服务器应用程序模型 (AWSSAM) CLI。有关这方面的更多信息,请参阅AWSSAM文档AWSSAMCLI中的安装。 

  • Python 3,已安装于本地计算机。有关这方面的更多信息,请参阅 Python 文档

  • Git 客户端,已安装并配置。

  • GitHub IAM roles pipeline存储库,克隆到您的本地计算机。 

  • 现有JSON格式的IAM策略和角色。有关这方面的更多信息,请参阅 Github IAM roles pipeline 存储库中的ReadMe文件。

  • 您的开发团队不得拥有编辑此解决方案的AWS CodePipeline CodeBuild、和 CodeDeploy 资源的权限。

限制

  • 此模式的工作流程是概念验证 (POC),我们建议您仅在测试环境中使用它。如果您想在生产环境中使用此模式的方法,请参阅IAM文档IAM中的安全最佳实践,并对您的IAM角色和AWS服务进行必要的更改。

架构

下图显示了如何使用 A IAM cces AWS CloudFormation s Analyzer 和宏自动验证IAM角色和策略并将其部署到账户。 CodePipeline

验证和部署AWS账户中的IAM策略和角色的步骤。

图表显示了以下工作流:

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

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

  3. 如果没有发现与安全或错误相关的结果,则会将JSON文件发送到 RolesBucket S3 存储桶。

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

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

自动化和扩缩

AWS CloudFormation GitHub IAM角色管道存储库中提供了自动部署此模式的模板。

工具

代码

此模式的源代码和模板可在 GitHub IAM角色管道存储库中找到。

操作说明

任务描述所需技能

克隆示例存储库。

将 GitHub IAM角色管道存储库克隆到本地计算机。

应用程序开发者,一般 AWS
任务描述所需技能

部署管道。

  1. 导航到包含已克隆存储库的目录。

  2. 运行 make deploy bucket=<bucket_name>命令。重要提示:必须使用现有 S3 存储桶的存储桶名称替换 <bucket_name>

  3. 运行 aws codepipeline get-pipeline –name RolesPipeline 命令,以检查您的部署是否成功。

应用程序开发者,一般 AWS

克隆管道存储库。

  1. RolesPipelineAWS CloudFormation 堆栈创建roles-pipeline-repo CodeCommit 存储库。

  2. 登录AWS管理控制台,打开AWS CodeCommit 控制台,然后复制 CodeCommit 存储库URL以将其克隆到本地计算机。有关这方面的更多信息,请参阅AWS CodeCommit 文档中的 Connect 到AWS CodeCommit 存储库

应用程序开发者,一般 AWS
任务描述所需技能

使用有效的IAM策略和角色测试 RolesPipeline 管道。

  1. 为您的IAM策略和角色创建JSON文件。您可以使用 GitHub IAM roles pipeline存储库中role-example目录中的示例。

  2. 使用所需的配置定义您的IAM策略和角色。重要:请务必遵循 GitHub IAM roles pipeline存储库ReadMe文件中描述的格式。

  3. 将修改内容推送到roles-pipeline-repo CodeCommit 存储库中。

  4. 验证 RolesPipeline 管道的实施。

  5. 确保在账户中正确部署IAM策略和角色。

  6. 验证是否存在与IAM策略或角色关联的权限边界。有关这方面的更多信息,请参阅IAM文档中的IAM实体的权限边界

应用程序开发者,一般 AWS

使用无效的IAM策略和角色测试 RolesPipeline 管道。

  1. 修改roles-pipeline-repo CodeCommit 存储库并添加无效的IAM角色或策略。例如,您可以使用不存在的操作或无效的IAM策略版本。

  2. 验证管道的实施。IAM如果检测到无效的IAM策略或角色,Access Analyzer 将在验证阶段停止管道。

应用程序开发者,一般 AWS
任务描述所需技能

准备清理。

清空 S3 存储桶,然后运行 destroy 命令。

应用程序开发者,一般 AWS

删除 RolesStack 堆栈。

  1. RolesPipeline管道会创建一个用于部署IAM策略和角色的RolesStackAWS CloudFormation 堆栈。您必须先删除堆栈,然后才能删除 RolesPipeline 管道。

  2. 登录AWS管理控制台,打开AWS CloudFormation 控制台,然后选择RolesStack堆栈并选择删除

应用程序开发者,一般 AWS

删除 RolesPipeline 堆栈。

要删除RolesPipelineAWS CloudFormation 堆栈,请按照 Github IAM roles pipeline 存储库中ReadMe文件的说明进行操作。

应用程序开发者,一般 AWS

相关资源