本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions 使用IAM访问分析器动态生成IAM策略
由 Thomas Scott (AWS)、Adil El Kanabi ()、Koen van Blijderveen (AWS) 和 Rafal Pawlaszek (AWS) 创作 AWS
代码存储库:自动IAM访问分析器角色策略生成器 | 环境:PoC 或试点 | 技术:安全性、身份、合规性;无服务器 |
AWS服务:AWSIAM访问分析器;AWSLambda;AWSStep Functions;Identity and Access M AWS anagement |
Summary
最低权限是授予执行任务所需最低权限的安全最佳实践。在已经处于活动状态的 Amazon Web Services (AWS) 账户中实现最低权限访问可能具有挑战性,因为您不想通过更改用户权限来无意中阻止他们履行工作职责。在实施 AWS Identity and Access Management (IAM) 政策变更之前,您需要了解账户用户正在执行的操作和资源。
此模式旨在帮助您应用最低权限的访问原则,且不会阻碍或降低团队工作效率。它描述了如何使用 A IAM ccess Analyzer 以及 AWS Step Functions 如何根据账户中当前正在执行的操作为您的角色动态生成 up-to-date IAM策略。新策略旨在允许当前活动,但会删除任何不必要的提升权限。您可通过定义允许和拒绝规则来自定义生成的策略,此解决方案集成了您的自定义规则。
此模式包括使用 AWS Cloud Development Kit (AWS CDK) 或针对 Terraform () CDKTF 实现解决方案 HashiCorp CDK的选项。然后,您可以使用持续集成和持续交付 (CI/CD) 管道将新策略与角色关联。如果您采用多账户架构,则可以在任何想要为角色生成更新的IAM策略的账户中部署此解决方案,从而提高整个 AWS Cloud 环境的安全性。
先决条件和限制
先决条件
启用了 AWS CloudTrail 跟踪 AWS 账户 的活动状态。
IAM以下各项的权限:
创建并部署 Step Functions 工作流程。有关更多信息,请参阅 AWS Step Functions(Step Functions 文档)的操作、资源和条件键。
创建 AWS Lambda 函数。有关更多信息,请参阅 执行角色和用户权限(Lambda 文档)。
创建IAM角色。有关更多信息,请参阅创建角色以向IAM用户委派权限(IAM文档)。
npm 已安装。有关更多信息,请参阅下载和安装 Node.js 和 npm
(npm 文档)。 如果您使用 AWS CDK (选项 1)部署此解决方案:
AWS CDK 工具包,已安装和配置。有关更多信息,请参阅安装 AWS CDK(AWS CDK 文档)。
如果您使用CDKTF(选项 2)部署此解决方案:
CDKTF,已安装并配置。有关更多信息,请参阅为 Terra CDK form 安装
(CDKTF文档)。 Terraform,已安装并配置。有关更多信息,请参阅入门
(Terraform 文档)。
AWS Command Line Interface (AWS CLI) 已在本地安装并为您配置 AWS 账户。有关更多信息,请参阅安装或更新最新版本的 AWS CLI(AWS CLI 文档)。
限制
这种模式不会将新IAM策略应用于角色。在本解决方案的最后,新IAM策略存储在存储 AWS CodeCommit 库中。您可以使用 CI/CD 管道将策略应用至您账户中的角色。
架构
目标架构
![Step Functions 工作流程生成新策略并将其存储在中 CodeCommit。](images/pattern-img/cb9ee0c9-3fe0-43d9-9dd2-1aedb705c78f/images/eb13a5db-f803-40b1-9a8c-4ef13d584cd4.png)
定期安排的亚马逊 EventBridge 事件规则会启动 Step Functions 工作流程。在设置此解决方案的过程中,您可以定义此再生计划。
在 Step Functions 工作流程中,Lambda 函数会生成日期范围,以便在分析日志中的账户活动时使用。 CloudTrail
下一个工作流程步骤调用IAM访问分析器API以开始生成策略。
Acc IAM ess Analyzer 使用您在设置期间指定的角色的 Amazon 资源名称 (ARN) 来分析 CloudTrail 日志中是否存在指定日期速率内的活动。根据活动,A IAM ccess Analyzer 会生成一个IAM策略,该策略仅允许该角色在指定日期范围内使用的操作和服务。完成此步骤后,此步骤将生成任务 ID。
下一个工作流程步骤每 30 秒检查一次任务 ID。当检测到作业 ID 时,此步骤将使用作业 ID 调用IAM访问分析器API并检索新IAM策略。IAMAccess Analyzer 以JSON文件形式返回策略。
下一个工作流程步骤将 < IAM 角色名称>/policy.json 文件放入亚马逊简单存储服务 (Amazon S3) Simple Service 存储桶中。在设置此解决方案的过程中,您可以定义此 S3 存储桶。
Amazon S3 事件通知启动 Lambda 函数。
Lambda 函数从 S3 存储桶检索策略,集成您在 all ow.json 和 deny.json 文件中定义的自定义规则,然后将更新的策略推送到。 CodeCommit在设置此解决方案的过程中,您可以定义 CodeCommit 存储库、分支和文件夹路径。
工具
AWS 服务
AWS Cloud Development Kit (AWS CDK)是一个软件开发框架,可帮助您在代码中定义和配置 AWS Cloud 基础架构。
AWS CDK Toolkit 是一个命令行云开发套件,可帮助您与 AWS Cloud Development Kit (AWS CDK) 应用程序进行交互。
AWS CloudTrail帮助您审计您的治理、合规和运营风险 AWS 账户。
AWS CodeCommit是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。
AWS Command Line Interface (AWS CLI) 是一个开源工具,可帮助您 AWS 服务 通过命令行外壳中的命令进行交互。
AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。此模式使用 A IAMccess An alyzer(一项功能)来分析您的 CloudTrail 日志,以识别IAM实体(用户或角色)已使用的操作和服务,然后生成基于该活动的IAM策略。IAM
AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
Amazon Simple Storage Service (Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
AWS Step Functions是一项无服务器编排服务,可帮助您组合 AWS Lambda 功能和其他功能 AWS 服务 来构建关键业务应用程序。在这种模式中,您可以使用 Step Functions 中的AWS SDK服务集成从工作流程中调用服务API操作。
其他工具
CDKfor Terraform (CDKTF)
可帮助你使用常见的编程语言(例如 Python 和 Typescript)来定义基础设施即代码 (IaC)。 Lerna
是一个构建系统,用于管理和发布来自同一存储库的多个 JavaScript 或多个 TypeScript 软件包。 Node.js
是一个事件驱动的 JavaScript 运行时环境,专为构建可扩展的网络应用程序而设计。 npm
是在 Node.js 环境中运行的软件注册表,用于共享或借用软件包以及管理私有软件包的部署。
代码存储库
此模式的代码可在 GitHub 自动IAM访问分析器角色策略生成
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
克隆存储库。 | 以下命令克隆自动IAM访问分析器角色策略生成器
| 应用程序开发人员 |
安装 Lerna。 | 使用以下命令安装 Lerna。
| 应用程序开发人员 |
设置依赖项。 | 使用以下命令安装存储库依赖项。
| 应用程序开发人员 |
构建代码。 | 使用以下命令测试、构建和准备 Lambda 函数的压缩包。
| 应用程序开发人员 |
构建构造。 | 以下命令为 AWS CDK 和CDKTF构建基础架构合成应用程序。
| |
配置任何自定义权限。 | 在已克隆存储库的 repo 文件夹中,编辑 allow.json 和 deny.json 文件,以定义该角色的任何自定义权限。如果 allow.json 和 deny.json 文件包含相同权限,则应用拒绝权限。 | AWS管理员、应用程序开发者 |
任务 | 描述 | 所需技能 |
---|---|---|
部署 AWS CDK 堆栈。 | 以下命令通过 AWS CloudFormation部署基础架构。定义以下参数:
注意:方括号表示可选参数。 | 应用程序开发人员 |
(可选)等待新策略生效。 | 如果跟踪中不包含该角色的合理数量的历史活动,请等待,直到您确信有足够的记录活动让 A IAM ccess Analyzer 生成准确的策略。如果该角色在账户中长期处于活动状态,则可能无需等待。 | AWS管理员 |
手动查看已生成策略。 | 在您的 CodeCommit 存储库中,查看生成的 < ROLE _ ARN >.json 文件,以确认允许和拒绝权限适合该角色。 | AWS管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
合成 Terraform 模板。 | 使用以下命令合成 Terraform 模板。
| 应用程序开发人员 |
部署 Terraform 模板。 | 以下命令导航到包含CDKTF定义基础设施的目录。
以下命令在目标 AWS 账户系统中部署基础架构。定义以下参数:
注意:方括号表示可选参数。 | 应用程序开发人员 |
(可选)等待新策略生效。 | 如果跟踪中不包含该角色的合理数量的历史活动,请等待,直到您确信有足够的记录活动让 A IAM ccess Analyzer 生成准确的策略。如果该角色在账户中长期处于活动状态,则可能无需等待。 | AWS管理员 |
手动查看已生成策略。 | 在您的 CodeCommit 存储库中,查看生成的 < ROLE _ ARN >.json 文件,以确认允许和拒绝权限适合该角色。 | AWS管理员 |
相关资源
AWS resources
其他资源