

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

# 使用以下 AWS IAM Identity Center 命令将权限集作为代码进行管理 AWS CodePipeline
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline"></a>

*Andre Cavalcante 和 Claison Amorim，Amazon Web Services*

## Summary
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-summary"></a>

AWS IAM Identity Center 帮助您集中管理对所有 AWS 账户 和应用程序的单点登录 (SSO) 访问权限。您可以在 IAM Identity Center 中创建和管理用户身份，也可以连接现有身份源，例如 Microsoft Active Directory 域或外部身份提供者 (IdP)。IAM Identity Center 提供了统一的管理体验，可使用[权限集定义、自定义和分配对 AWS 环境的精细访问权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。权限集适用于您的 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 身份中心中的权限集和分配。

## 先决条件和限制
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-prereqs"></a>

**先决条件**
+ 在 AWS Organizations中作为组织管理的多账户环境。有关更多信息，请参阅[创建组织](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html)。
+ 已启用并配置身份源的 IAM Identity Center。有关更多信息，请参阅 IAM Identity Center 文档中的[快速入门](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)。
+ 注册为以下任务的委托管理员的成员账户 AWS 服务：
  + IAM Identity Center – 有关说明，请参阅 IAM Identity Center 文档中的[注册成员账户](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html#delegated-admin-how-to-register)。
  + AWS Organizations — 有关说明，请参阅[委派管理员了解相关信息 AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_delegate_policies.html)。此账户必须具有列出和描述账户的权限，以及 OUs。
**注意**  
您必须使用与委派管理员相同的账户来管理这两项服务。
+ 在 IAM Identity Center 委派的管理员账户和组织的管理账户中部署 AWS CloudFormation 堆栈的权限。有关更多信息，请参阅 CloudFormation 文档中的[控制访问权限](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)。
+ IAM Identity Center 委派管理员账户中的 Amazon Simple Storage Service（Amazon S3）存储桶。您将构件代码上传到此存储桶中。有关说明，请参阅 Amazon S3 文档中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。
+ 组织管理账户的账户 ID。有关说明，请参阅[查找您的 AWS 账户 身份证](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindAccountId)。
+ 源代码主机中的存储库，例如 GitHub。

**限制**
+ 此模式不能用于管理或分配单账户环境或未在 AWS Organizations中作为组织管理的账户的权限集。
+ 权限集名称 IDs、分配和 IAM Identity Center 主体类型，部署后 IDs 无法修改。
+ 此模式可帮助您创建和管理[自定义权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetcustom.html)。您不能使用此模式来管理或分配[预定义权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetpredefined.html)。
+ 此模式不能用于管理组织管理账户的权限集。

## 架构
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-architecture"></a>

**目标架构**

![\[使用 CI/CD 管道管理 IAM 身份中心中的权限集。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/419aaa80-1b97-402d-9c74-c1b8c1ddd1cb/images/1f143bc4-c2c6-4ab6-8615-742fec617f18.png)


下图显示了如下工作流：

1. 某位用户进行了以下更改之一：
   + 向远程存储库提交一项或多项更改，例如 GitHub
   + 修改 OU 中的账户 AWS Organizations

1. 如果用户向主分支提交了对远程存储库的更改，管道将启动。

   如果用户修改了 OU 中的账户，则该`MoveAccount` EventBridge 规则会检测到更改并在组织的管理账户中启动 Lambda 函数。

1. 启动的 Lambda 函数启动 CI/CD 管道。 CodePipeline

1. CodePipeline 启动`TemplateValidation` CodeBuild 项目。该`TemplateValidation` CodeBuild 项目使用远程存储库中的 Python 脚本来验证权限集模板。 CodeBuild 验证以下内容：
   + 权限集名称是唯一的。
   + 赋值语句 IDs (`Sid`) 是唯一的。
   + `CustomPolicy` 参数中的策略定义和有效。（此验证使用 AWS Identity and Access Management Access Analyzer。）
   + 托管策略的 Amazon 资源名称 (ARNs) 有效。

1. `Deploy` CodeBuild 项目中的`PermissionSet`操作组用于 适用于 Python (Boto3) 的 AWS SDK 删除、创建或更新 IAM Identity Center 中的权限集。只有带有 `SSOPipeline:true` 标签的权限集会受到影响。通过此管道管理的所有权限集都有此标签。

1. `Deploy` CodeBuild 项目中的`Assignments`操作组使用 Terraform 在 IAM Identity Center 中删除、创建或更新分配。Terraform 后端状态文件存储在同一账户的 Amazon S3 存储桶中。

1. CodeBuild 更新 IAM 身份中心中的权限集和分配。

**自动化和扩展**

由于多账户环境中的所有新账户都将移至中的特定组织单位 AWS Organizations，因此此解决方案会自动运行并向您在分配模板中指定的所有账户授予所需的权限集。无需进行其他自动化或扩展操作。

在大型环境中，向 IAM Identity Center 发出的 API 请求数量可能会导致此解决方案的运行速度变慢。Terraform 和 Boto3 会自动管理节流，以最大限度地减少任何性能下降。

## 工具
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 是一项完全托管式构建服务，可编译源代码、运行单元测试和生成部署就绪的构件。 
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 可帮助您快速对软件发布过程的不同阶段进行建模和配置，并自动执行持续发布软件变更所需步骤。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 是一项无服务器事件总线服务，可帮助您将应用程序与来自各种来源的实时数据连接起来。例如， AWS Lambda 函数、使用 API 目的地的 HTTP 调用端点或其他 AWS 账户目的地的事件总线。
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)帮助您集中管理对所有应用程序 AWS 账户 和云应用程序的单点登录 (SSO) 访问权限。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)是一项账户管理服务，可帮助您将多个账户整合 AWS 账户 到一个由您创建和集中管理的组织中。
+ [适用于 Python (Boto3) 的 AWS SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)是一个软件开发套件，可帮助您将 Python 应用程序、库或脚本与集成 AWS 服务。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**代码存储库 **

此模式的代码可在 [aws-iam-identity-center-pipelin](https://github.com/aws-samples/aws-iam-identity-center-pipeline) e 存储库中找到。存储库中的 templates 文件夹包含权限集和分配的示例模板。它还包括用于在目标账户中部署 CI/CD 管道和 AWS 资源的 AWS CloudFormation 模板。

## 最佳实践
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-best-practices"></a>
+ 在开始修改权限集和分配模板之前，我们建议您为您的组织规划权限集。考虑权限应是什么、权限集应适用于哪些账户或 OUs 权限集，以及哪些 IAM Identity Center 委托人（用户或群组）应受到权限集的影响。权限集名称 IDs、关联和 IAM Identity Center 委托人类型，部署后 IDs 无法修改。
+ 遵循最低权限原则，并授予执行任务所需最低权限。有关更多信息，请参阅 AWS Identity and Access Management (IAM) 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html)。

## 操作说明
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-epics"></a>

### 规划权限集和分配
<a name="plan-permission-sets-and-assignments"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆存储库。 | 在一个 bash Shell 中，输入如下命令。这将从中克隆 [aws-iam-identity-center-pipelin](https://github.com/aws-samples/aws-iam-identity-center-pipeline) e 存储库。 GitHub<pre>git clone https://github.com/aws-samples/aws-iam-identity-center-pipeline.git</pre> | DevOps 工程师 | 
| 定义权限集。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.html) | DevOps 工程师 | 
| 定义分配。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.html) | DevOps 工程师 | 

### 部署权限集和分配
<a name="deploy-the-permission-sets-and-assignments"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 IAM Identity Center 委托管理员账户中部署资源。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.html) | DevOps 工程师 | 
| 在 AWS Organizations 管理账户中部署资源。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.html) | DevOps 工程师 | 
| 完成远程存储库设置。 | 将 AWS CodeConnections 连接状态从更改`PENDING`为`AVAILABLE`。此连接是在您部署 CloudFormation 堆栈时创建的。有关说明，请参阅 CodeConnections 文档[中的更新待处理连接](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html)。 | DevOps 工程师 | 
| 将文件上传至远程存储库。 | 将您从 `aws-samples` 存储库下载并在先前步骤中编辑的所有文件上传至远程存储库。对 `main` 分支的更改会启动管道，该管道会创建或更新权限集和分配。 | DevOps 工程师 | 

### 更新权限集和分配
<a name="updating-the-permission-sets-and-assignments"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 更新权限集和分配。 | 当 `MoveAccount` Amazon EventBridge 规则检测到组织中账户的修改时， CI/CD 管道会自动启动并更新权限集。例如，如果您向任务的 JSON 文件中指定的 OU 添加账户，则 CI/CD 管道会将权限集应用于新账户。如果您想要修改已部署的权限集和分配，请更新 JSON 文件，然后将其提交至远程存储库。使用 CI/CD 管道管理先前部署的权限集和关联时，请注意以下几点：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.html) | DevOps 工程师 | 

## 问题排查
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 访问被拒绝错误 | 确认您拥有部署 CloudFormation 模板和模板中定义的资源所需的权限。有关更多信息，请参阅 CloudFormation 文档中的[控制访问权限](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)。 | 
| 验证阶段的管道错误 | 如果权限集或分配模板中存在任何错误，则会出现此错误。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.html) | 

## 相关资源
<a name="manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline-resources"></a>
+ [权限集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)（IAM Identity Center 文档）