本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用以下 AWS IAM Identity Center 命令将权限集作为代码进行管理 AWS CodePipeline
Andre Cavalcante 和 Claison Amorim,Amazon Web Services
Summary
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 身份中心中的权限集和分配。
先决条件和限制
先决条件
在 AWS Organizations中作为组织管理的多账户环境。有关更多信息,请参阅创建组织。
已启用并配置身份源的 IAM Identity Center。有关更多信息,请参阅 IAM Identity Center 文档中的快速入门。
注册为以下任务的委托管理员的成员账户 AWS 服务:
IAM Identity Center – 有关说明,请参阅 IAM Identity Center 文档中的注册成员账户。
AWS Organizations — 有关说明,请参阅委派管理员了解相关信息 AWS Organizations。此账户必须具有列出和描述账户的权限,以及 OUs。
注意
您必须使用与委派管理员相同的账户来管理这两项服务。
在 IAM Identity Center 委派的管理员账户和组织的管理账户中部署 AWS CloudFormation 堆栈的权限。有关更多信息,请参阅 CloudFormation 文档中的控制访问权限。
IAM Identity Center 委派管理员账户中的 Amazon Simple Storage Service(Amazon S3)存储桶。您将构件代码上传到此存储桶中。有关说明,请参阅 Amazon S3 文档中的创建存储桶。
组织管理账户的账户 ID。有关说明,请参阅查找您的 AWS 账户 身份证。
源代码主机中的存储库,例如 GitHub。
限制
架构
目标架构

下图显示了如下工作流:
某位用户进行了以下更改之一:
向远程存储库提交一项或多项更改,例如 GitHub
修改 OU 中的账户 AWS Organizations
如果用户向主分支提交了对远程存储库的更改,管道将启动。
如果用户修改了 OU 中的账户,则该
MoveAccountEventBridge 规则会检测到更改并在组织的管理账户中启动 Lambda 函数。启动的 Lambda 函数启动 CI/CD 管道。 CodePipeline
CodePipeline 启动
TemplateValidationCodeBuild 项目。该TemplateValidationCodeBuild 项目使用远程存储库中的 Python 脚本来验证权限集模板。 CodeBuild 验证以下内容:权限集名称是唯一的。
赋值语句 IDs (
Sid) 是唯一的。CustomPolicy参数中的策略定义和有效。(此验证使用 AWS Identity and Access Management Access Analyzer。)托管策略的 Amazon 资源名称 (ARNs) 有效。
DeployCodeBuild 项目中的PermissionSet操作组用于 适用于 Python (Boto3) 的 AWS SDK 删除、创建或更新 IAM Identity Center 中的权限集。只有带有SSOPipeline:true标签的权限集会受到影响。通过此管道管理的所有权限集都有此标签。DeployCodeBuild 项目中的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 账户 到一个由您创建和集中管理的组织中。
适用于 Python (Boto3) 的 AWS SDK
是一个软件开发套件,可帮助您将 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 文档)