使用 Step Functions 使用IAM访问分析器动态生成IAM策略 - AWS Prescriptive Guidance

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

使用 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以下各项的权限:

  • 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。
  1. 定期安排的亚马逊 EventBridge 事件规则会启动 Step Functions 工作流程。在设置此解决方案的过程中,您可以定义此再生计划。

  2. 在 Step Functions 工作流程中,Lambda 函数会生成日期范围,以便在分析日志中的账户活动时使用。 CloudTrail

  3. 下一个工作流程步骤调用IAM访问分析器API以开始生成策略。

  4. Acc IAM ess Analyzer 使用您在设置期间指定的角色的 Amazon 资源名称 (ARN) 来分析 CloudTrail 日志中是否存在指定日期速率内的活动。根据活动,A IAM ccess Analyzer 会生成一个IAM策略,该策略仅允许该角色在指定日期范围内使用的操作和服务。完成此步骤后,此步骤将生成任务 ID。

  5. 下一个工作流程步骤每 30 秒检查一次任务 ID。当检测到作业 ID 时,此步骤将使用作业 ID 调用IAM访问分析器API并检索新IAM策略。IAMAccess Analyzer 以JSON文件形式返回策略。

  6. 下一个工作流程步骤将 < IAM 角色名称>/policy.json 文件放入亚马逊简单存储服务 (Amazon S3) Simple Service 存储桶中。在设置此解决方案的过程中,您可以定义此 S3 存储桶。

  7. Amazon S3 事件通知启动 Lambda 函数。

  8. 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访问分析器角色策略生成器 (GitHub) 存储库。

git clone https://github.com/aws-samples/automated-iam-access-analyzer.git
应用程序开发人员

安装 Lerna。

使用以下命令安装 Lerna。

npm i -g lerna
应用程序开发人员

设置依赖项。

使用以下命令安装存储库依赖项。

cd automated-iam-access-analyzer/ npm install && npm run bootstrap
应用程序开发人员

构建代码。

使用以下命令测试、构建和准备 Lambda 函数的压缩包。

npm run test:code npm run build:code npm run pack:code
应用程序开发人员

构建构造。

以下命令为 AWS CDK 和CDKTF构建基础架构合成应用程序。

npm run build:infra

配置任何自定义权限。

在已克隆存储库的 repo 文件夹中,编辑 allow.jsondeny.json 文件,以定义该角色的任何自定义权限。如果 allow.jsondeny.json 文件包含相同权限,则应用拒绝权限。

AWS管理员、应用程序开发者
任务描述所需技能

部署 AWS CDK 堆栈。

以下命令通过 AWS CloudFormation部署基础架构。定义以下参数:

  • <NAME_OF_ROLE>— 您要为其创建新策略的IAM角色。ARN

  • <TRAIL_ARN>— 存储角色活动的 CloudTrail 跟踪。ARN

  • <CRON_EXPRESSION_TO_RUN_SOLUTION> – 定义策略重新生成计划的 Cron 表达式。Step Functions 工作流程按该计划运行。

  • <TRAIL_LOOKBACK> – 评估角色权限时的回顾跟踪期(以天为单位)。

cd infra/cdk cdk deploy —-parameters roleArn=<NAME_OF_ROLE> \ —-parameters trailArn=<TRAIL_ARN> \ --parameters schedule=<CRON_EXPRESSION_TO_RUN_SOLUTION> \ [ --parameters trailLookBack=<TRAIL_LOOKBACK> ]

注意:方括号表示可选参数。

应用程序开发人员

(可选)等待新策略生效。

如果跟踪中不包含该角色的合理数量的历史活动,请等待,直到您确信有足够的记录活动让 A IAM ccess Analyzer 生成准确的策略。如果该角色在账户中长期处于活动状态,则可能无需等待。

AWS管理员

手动查看已生成策略。

在您的 CodeCommit 存储库中,查看生成的 < ROLE _ ARN >.json 文件,以确认允许和拒绝权限适合该角色。

AWS管理员
任务描述所需技能

合成 Terraform 模板。

使用以下命令合成 Terraform 模板。

lerna exec cdktf synth --scope @aiaa/tfm
应用程序开发人员

部署 Terraform 模板。

以下命令导航到包含CDKTF定义基础设施的目录。

cd infra/cdktf

以下命令在目标 AWS 账户系统中部署基础架构。定义以下参数:

  • <account_ID> – 目标账户的 ID。

  • <region>-目标 AWS 区域。

  • <selected_role_ARN>— 您要为其创建新策略的IAM角色。ARN

  • <trail_ARN>— 存储角色活动的 CloudTrail 跟踪。ARN

  • <schedule_expression> – 定义策略重新生成计划的 Cron 表达式。Step Functions 工作流程按该计划运行。

  • <trail_look_back> – 评估角色权限时的回顾跟踪期(以天为单位)。

TF_VAR_accountId=<account_ID> \ TF_VAR_region=<region> \ TF_VAR_roleArns=<selected_role_ARN> \ TF_VAR_trailArn=<trail_ARN> \ TF_VAR_schedule=<schedule_expression> \ [ TF_VAR_trailLookBack=<trail_look_back> ] \ cdktf deploy

注意:方括号表示可选参数。

应用程序开发人员

(可选)等待新策略生效。

如果跟踪中不包含该角色的合理数量的历史活动,请等待,直到您确信有足够的记录活动让 A IAM ccess Analyzer 生成准确的策略。如果该角色在账户中长期处于活动状态,则可能无需等待。

AWS管理员

手动查看已生成策略。

在您的 CodeCommit 存储库中,查看生成的 < ROLE _ ARN >.json 文件,以确认允许和拒绝权限适合该角色。

AWS管理员

相关资源

AWS resources

其他资源