

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 以程式碼形式管理 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*

## 總結
<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 提供統一的管理體驗，透過使用[許可集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)來定義、自訂和指派精細 AWS 的環境存取。許可集適用於來自 IAM Identity Center 身分存放區或外部 IdP 的聯合身分使用者和群組。

此模式可協助您在以組織身分管理的多帳戶環境中，將 IAM Identity Center 許可集管理為程式碼 AWS Organizations。透過此模式，您可以達成下列目標：
+ 建立、刪除和更新許可集
+ 建立、更新或刪除對目標 AWS 帳戶、組織單位 (OUs) 或組織根目錄的許可集指派。

若要以程式碼形式管理 IAM Identity Center 許可和指派，此解決方案會部署使用 AWS CodeBuild 和 的持續整合和持續交付 (CI/CD) 管道 AWS CodePipeline。您可以在存放在遠端儲存庫的 JSON 範本中管理許可集和指派。當 Amazon EventBridge 規則偵測到儲存庫的變更，或偵測到目標 OU 中帳戶的修改時，就會啟動 AWS Lambda 函數。Lambda 函數會啟動 CI/CD 管道，以更新 IAM Identity Center 中的許可集和指派。

## 先決條件和限制
<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 帳戶 ID](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)。
+ 此模式無法用來管理組織管理帳戶的許可集。

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

**目標架構**

![使用 CI/CD 管道來管理 IAM Identity Center 中的許可集。](http://docs.aws.amazon.com/zh_tw/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 函數會在 CodePipeline 中啟動 CI/CD 管道。

1. CodePipeline 會啟動 `TemplateValidation` CodeBuild 專案。`TemplateValidation` CodeBuild 專案使用遠端儲存庫中的 Python 指令碼來驗證許可集範本。CodeBuild 驗證下列項目：
   + 許可集名稱是唯一的。
   + 指派陳述式 IDs(`Sid`) 是唯一的。
   + `CustomPolicy` 參數中的政策定義和有效。（此驗證使用 AWS Identity and Access Management Access Analyzer。)
   + 受管政策的 Amazon Resource Name (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 Identity Center 中的許可集和指派。

**自動化和擴展**

由於多帳戶環境中的所有新帳戶都會移至 中的特定組織單位 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-pipeline](https://github.com/aws-samples/aws-iam-identity-center-pipeline) 儲存庫中使用。儲存庫中的範本資料夾包含許可集和指派的範例範本。它還包含用於在目標帳戶中部署 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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 複製儲存庫。 | 在 bash shell 中，輸入下列命令。這會從 GitHub 複製 [aws-iam-identity-center-pipeline](https://github.com/aws-samples/aws-iam-identity-center-pipeline) 儲存庫。<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_tw/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_tw/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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在 IAM Identity Center 委派管理員帳戶中部署資源。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/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_tw/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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 更新許可集和指派。 | 當 `MoveAccount` Amazon EventBridge 規則偵測到組織中帳戶的修改時，CI/CD 管道會自動啟動和更新許可集。例如，如果您將 帳戶新增至指派 JSON 檔案中指定的 OU，則 CI/CD 管道會將許可集套用至新帳戶。<br />如果您想要修改已部署的許可集和指派，請更新 JSON 檔案，然後將其遞交至遠端儲存庫。<br />使用 CI/CD 管道管理先前部署的許可集和關聯時，請注意下列事項：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/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_tw/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 文件）