本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用以下 AWS IAM Identity Center 命令将权限集作为代码进行管理 AWS CodePipeline
由 Andre Cavalcante (AWS) 和 Claison Amorim (AWS) 创建
摘要
AWS IAM Identity Center 帮助您集中管理对所有 AWS 账户 和应用程序的单点登录 (SSO) 访问权限。您可以在 IAM Identity Center 中创建和管理用户身份,也可以连接现有身份源,例如 Microsoft Active Directory 域或外部身份提供者 (IdP)。IAM Identity Center 提供了统一的管理体验,可使用权限集定义、自定义和分配对 AWS 环境的精细访问权限。权限集适用于您的 IAM Identity Center 身份存储或外部 IdP 中的联合用户和群组。
此模式可帮助您在多账户环境中以代码形式管理 IAM Identity Center 权限集,该环境在中 AWS Organizations作为组织进行管理。使用此模式,您可以实现以下目标:
创建、删除和更新权限集
创建、更新或删除对目标 AWS 账户、组织单位 (OUs) 或组织根目录的权限集分配。
为了以代码形式管理 IAM Identity Center 权限和分配,此解决方案部署了使用和的持续集成和持续交付 (CI/CD) 管道。 AWS CodeBuild AWS CodePipeline您可以在存储在远程存储库中的 JSON 模板中管理权限集和分配。当 Amazon EventBridge 规则检测到存储库的更改或检测到目标 OU 中账户的修改时,它会启动一个 AWS Lambda 函数。Lambda 函数启动 CI/CD 管道,更新 IAM Identity Center 中的权限集和分配。
先决条件和限制
先决条件
在中作为组织管理的多账户环境。 AWS Organizations有关更多信息,请参阅创建组织。
已启用并配置身份源的 IAM Identity Center。有关更多信息,请参阅 IAM Identity Center 文档中的快速入门。
注册为以下任务的委托管理员的成员账户 AWS 服务:
IAM 身份中心 — 有关说明,请参阅 IAM 身份中心文档中的注册成员账户。
AWS Organizations — 有关说明,请参阅委派管理员了解相关信息 AWS Organizations。此账户必须具有列出和描述账户的权限,以及 OUs。
注意
对于这两项服务,您必须使用与委派管理员相同的帐户。
在 IAM Identity Center 委派的管理员账户和组织的管理账户中部署 AWS CloudFormation 堆栈的权限。有关更多信息,请参阅 CloudFormation 文档中的控制访问权限。
IAM Identity Center 中的亚马逊简单存储服务 (Amazon S3) Service 存储桶委派了管理员账户。您将构件代码上传到此存储桶中。有关说明,请参阅 Amazon S3 文档中的创建存储桶。
组织管理账户的账户 ID。有关说明,请参阅查找您的 AWS 账户 身份证。
源代码主机中的存储库,例如 GitHub。
限制
架构
目标架构

图表显示了以下工作流:
某位用户进行了以下更改之一:
向远程存储库提交一项或多项更改,例如 GitHub
修改 OU 中的账户 AWS Organizations
如果用户向主分支提交了对远程存储库的更改,则管道将启动。
如果用户修改了 OU 中的账户,则该
MoveAccount
EventBridge 规则会检测到更改并在组织的管理账户中启动 Lambda 函数。启动的 Lambda 函数在中启动 CI/CD 管道。 CodePipeline
CodePipeline 启动
TemplateValidation
CodeBuild 项目。该TemplateValidation
CodeBuild 项目使用远程存储库中的 Python 脚本来验证权限集模板。 CodeBuild 验证以下内容:权限集名称是唯一的。
赋值语句 IDs (
Sid
) 是唯一的。CustomPolicy
参数中的策略定义和有效。(此验证使用 AWS Identity and Access Management Access Analyzer。)托管策略的 Amazon 资源名称 (ARNs) 有效。
Deploy
CodeBuild 项目中的PermissionSet
操作组用于 AWS SDK for Python (Boto3) 删除、创建或更新 IAM Identity Center 中的权限集。只有带有SSOPipeline:true
标签的权限集会受到影响。通过此管道管理的所有权限集都有此标签。Deploy
CodeBuild 项目中的Assignments
操作组使用 Terraform 在 IAM Identity Center 中删除、创建或更新分配。Terraform 后端状态文件存储在同一个账户的 Amazon S3 存储桶中。CodeBuild 更新 IAM 身份中心中的权限集和分配。
自动化和扩缩
由于多账户环境中的所有新账户都将移至中的特定组织单位 AWS Organizations,因此此解决方案会自动运行并向您在分配模板中指定的所有账户授予所需的权限集。无需进行其他自动化或扩展操作。
在大型环境中,向 IAM Identity Center 发出的 API 请求数量可能会导致此解决方案的运行速度变慢。Terraform 和 Boto3 会自动管理节流,以最大限度地减少任何性能下降。
工具
AWS 服务
AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
AWS CodeBuild是一项完全托管的生成服务,可帮助您编译源代码、运行单元测试和生成可随时部署的工件。
AWS CodePipeline帮助您快速建模和配置软件发布的不同阶段,并自动执行持续发布软件更改所需的步骤。
Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如, AWS Lambda 函数、使用 API 目的地的 HTTP 调用端点或其他 AWS 账户目的地的事件总线。
AWS IAM Identity Center帮助您集中管理对所有应用程序 AWS 账户 和云应用程序的单点登录 (SSO) 访问权限。
AWS Organizations是一项账户管理服务,可帮助您将多个账户整合 AWS 账户 到一个由您创建和集中管理的组织中。
AWS SDK for Python (Boto3)
是一个软件开发套件,可帮助您将 Python 应用程序、库或脚本与集成 AWS 服务。 Amazon Simple Storage Service (Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
代码存储库
此模式的代码可在 aws-iam-identity-center-pipelin
最佳实践
操作说明
Task | 描述 | 所需技能 |
---|---|---|
克隆存储库。 | 在 bash Shell 中输入以下命令:这将从中克隆 aws-iam-identity-center-pipelin
| DevOps 工程师 |
定义权限集。 |
| DevOps 工程师 |
定义分配。 |
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
在 IAM Identity Center 委托管理员账户中部署资源。 |
| DevOps 工程师 |
在 AWS Organizations 管理账户中部署资源。 |
| DevOps 工程师 |
完成远程存储库的设置。 | 将 AWS CodeConnections 连接状态从更改 | DevOps 工程师 |
将文件上传到远程存储库。 | 将您从 | DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
更新权限集和分配。 | 当 如果要修改已部署的权限集和分配,请更新 JSON 文件,然后将其提交到远程存储库。 使用 CI/CD 管道管理先前部署的权限集和关联时,请注意以下事项:
| DevOps 工程师 |
故障排除
相关资源
权限集(IAM Identity Center 文档)