AWS を使用して AWS IAM Identity Center アクセス許可セットをコードとして管理する CodePipeline - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS を使用して AWS IAM Identity Center アクセス許可セットをコードとして管理する CodePipeline

作成者:Andre Cavalcante (AWS) と Claison Amorim (AWS)

コードリポジトリ: aws-iam-identity-centerパイプライン

環境:本稼働

テクノロジー: セキュリティ、アイデンティティ、コンプライアンス DevOps

AWS サービス: AWS CodeBuild、AWS CodeCommit、AWS CodePipeline、AWS IAM Identity Center

[概要]

AWS IAM アイデンティティセンター(AWSシングルサインオンの後継者)は、AWS アカウントとアプリケーションへのシングルサインオン(SSO)アクセスを全て一元管理します。IAM アイデンティティセンターでユーザー ID の作成および管理を行い、またはMicrosoft Active Directory ドメインや外部 ID プロバイダー (IdP) など既存の ID ソースに接続することもできます。IAM アイデンティティセンターでは、「アクセス権限セット」で AWS 環境へのきめ細かなアクセスを定義し、カスタマイズと割り当てにより、統合された管理環境を提供します。アクセス権限セットは、AWS IAM アイデンティティセンターのアイデンティティストアまたは外部 IdP からフェデレーションユーザーとグループに適用します。

このパターンは、AWS Organizations で組織として管理されているマルチアカウント環境で IAM アイデンティティセンターへのアクセス権限セットをコードとして管理することに役立ちます。このパターンでは、以下のことを実現できます。

  • アクセス権限セットの作成、削除と更新

  • 対象の AWS アカウント、組織単位 (OU) または組織ルートへのアクセス権限セットの割り当てを作成、更新または削除します。

IAM Identity Center のアクセス許可と割り当てをコードとして管理するために、このソリューションは AWS 、AWS CodeCommit、および AWS を使用する継続的インテグレーション CodeBuildと継続的デリバリー (CI/CD) パイプラインをデプロイします CodePipeline。アクセス許可セットと割り当ては、 CodeCommit リポジトリに保存する JSON テンプレートで管理します。Amazon EventBridge ルールは、リポジトリへの変更またはターゲット OU 内のアカウントへの変更を検出すると、AWS Lambda 関数を開始します。Lambda 関数は、IAM アイデンティティセンターの権限セットと割り当てを更新する CI/CD パイプラインを開始します。

前提条件と制限

前提条件

  • AWS Organizations で組織として管理されるマルチアカウント環境。詳細については、「組織の作成」を参照してください。

  • IAM ID センターであり、ID ソースで有効化と設定が行われます。詳細については、IAM アイデンティティセンタードキュメントの「開始方法」を参照してください。

  • IAM アイデンティティセンターの委任された管理者として登録されているメンバーアカウント。手順については、「IAM アイデンティティセンタードキュメント」の「メンバーアカウントの登録」を参照してください。

  • IAM Identity Center の委任された管理者アカウントと組織の管理アカウントに AWS CloudFormation スタックをデプロイするアクセス許可。詳細については、 CloudFormation ドキュメントの「アクセスの制御」を参照してください。

  • アイデンティティセンターの Amazon Simple Storage Service (Amazon S3) バケットは、アーティファクトコードのアップロードを管理者に委任しました。手順については、「バケットの作成」を参照してください。

  • 組織の管理アカウントのアカウント ID。手順については、「AWS アカウント ID の検索」を参照してください。

制約事項

  • このパターンは、単一アカウント環境や AWS Organizations で組織として管理されていないアカウントのアクセス権限セットの管理や割り当てには使用できません。

  • アクセス権限セット名、割り当て ID、IAM アイデンティティセンタープリンシパルのタイプと ID は、デプロイ後に変更することはできません。

  • このパターンは、「カスタムアクセス権限」の作成と管理に役立ちます。このパターンを使用して「定義済みの権限」を管理しまたは割り当てることはできません。

  • このパターンは、組織の管理アカウントのアクセス権限セットの管理には使用できません。

アーキテクチャ

テクノロジースタック

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Amazon EventBridge

  • AWS Identity Center

  • AWS Lambda

  • AWS Organizations

ターゲットアーキテクチャ

CI/CD パイプラインと AWS CodeCommit リポジトリを使用して、AWS IAM Identity Center のアクセス許可セットを管理します。

この図表は、次のワークフローを示しています:

  1. ユーザーは、次の変更の全部または一部を実行します。

    1. CodeCommit リポジトリに 1 つ以上の変更をコミットします。

    2. AWS Organizations の組織単位 (OU) のアカウントを変更

  2. ユーザーが CodeCommit リポジトリに変更をコミットした場合、CodeChange EventBridge ルールは変更を検出し、IAM Identity Center の委任された管理者アカウントで Lambda 関数を開始します。このルールは、リポジトリ内の特定のファイル (README.md ファイルなど) の変更には反応しません。

    ユーザーが組織単位のアカウントを変更した場合、MoveAccount EventBridge ルールは変更を検出し、組織の管理アカウントで Lambda 関数を開始します。

  3. 開始された Lambda 関数は、 で CI/CD パイプラインを開始します CodePipeline。

  4. CodePipeline はCodebuildTemplateValidation CodeBuild プロジェクトを開始します。

  5. CodebuildTemplateValidation CodeBuild プロジェクトは、 CodeCommit リポジトリ内の Python スクリプトを使用して、アクセス許可セット templates. CodeBuild validates を次のように検証します。

    • アクセス権限セット名は一意です。

    • 割り当てステートメント ID (Sid) は一意です。

    • CustomPolicy パラメータ内のポリシー定義は有効です。(この認証では、AWS Identity and Access Management Access Analyzer が使用されます。)

    • 管理ポリシーの Amazon リソースネーム (ARN) は有効です。

  6. このCodebuildPermissionSet CodeBuild プロジェクトでは、AWS SDK for Python (Boto3) を使用して、IAM Identity Center のアクセス許可セットを削除、作成、または更新します。この SSOPipeline:true タグが付いたアクセス権限セットのみが影響を受けます。このパイプラインを通じて管理されるすべてのアクセス権限セットにはこのタグが付きます。

  7. CodebuildAssignments CodeBuild プロジェクトは Terraform を使用して、IAM Identity Center の割り当てを削除、作成、または更新します。Terraform バックエンドステートファイルは、同じアカウントの S3 バケットに保存されます。

  8. CodeBuild は、組織の管理アカウントで lookup IAM ロールを引き受けます。権限の付与または取り消しに必要なリソースを一覧表示するために、組織と 「identitystore」API を呼び出します。

  9. CodeBuild は、IAM Identity Center のアクセス許可セットと割り当てを更新します。

自動化とスケール

マルチアカウント環境におけるすべての新しいアカウントは AWS Organizations の特定の組織単位に移動されるため、このソリューションは自動的に実行され、割り当てテンプレートで指定したすべてのアカウントに必要なアクセス権限セットが付与されます。追加の自動化やスケーリングアクションは必要ありません。

大規模な環境では、IAM Identity Center に対する API リクエスト数が多いと、このソリューションの実行が遅くなることがあります。Terraform と Boto3 は、パフォーマンスの低下を最小限に抑えるために自動的にスロットリングを管理します。

ツール

AWS サービス

  • AWS CloudFormation は、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。

  • AWS CodeBuild は、ソースコードをコンパイルし、ユニットテストを実行し、すぐにデプロイできるアーティファクトを生成するのに役立つフルマネージド型のビルドサービスです。 

  • AWS CodeCommit は、独自のソース管理システムを管理することなく、Git リポジトリをプライベートに保存および管理できるバージョン管理サービスです。

  • AWS CodePipeline を使用すると、ソフトウェアリリースのさまざまな段階を迅速にモデル化して設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化できます。

  • Amazon EventBridge は、アプリケーションをさまざまなソースからのリアルタイムデータに接続するのに役立つサーバーレスイベントバスサービスです。たとえば、AWS Lambda 関数、API デスティネーションを使用する HTTP 呼び出しエンドポイントまたは他の AWS アカウントのイベントバスなどです。

  • AWS IAM アイデンティティセンター」は、AWS アカウントとクラウドアプリケーションへのシングルサインオン(SSO)アクセスを全て一元管理します。

  • AWS Organizations」は、複数の AWS アカウントを 1 つの組織に統合し、作成と一元管理するためのアカウント管理サービスです。

  • AWS SDK for Python (Boto3)」は、Python アプリケーション、ライブラリまたはスクリプトを AWS サービスと統合することに役立つソフトウェア開発キットです。

  • Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

コードリポジトリ

このパターンのコードは、 aws-iam-identity-centerパイプラインリポジトリにあります。リポジトリの templates フォルダには、アクセス権限セットと割り当ての両方のサンプルテンプレートが含まれています。また、CI/CD パイプラインと AWS リソースをターゲットアカウントにデプロイするための AWS CloudFormation テンプレートも含まれています。

ベストプラクティス

  • アクセス権限セットと割り当てテンプレートの変更を開始する前に、組織のアクセス権限セットを計画することをお勧めします。アクセス権限はどうあるべきか、そのアクセス権限セットをどのアカウントまたは OU に適用すべきか、そしてどの IAM Identity Center プリンシパル (ユーザーまたはグループ) がアクセス権限セットの影響を受けるべきかを検討してください。アクセス許可セット名、割り当て ID、IAM アイデンティティセンタープリンシパルのタイプと ID は、デプロイ後に変更することはできません。

  • 最小限権限原則に従い、タスクの実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。

エピック

タスク説明必要なスキル

リポジトリをクローン作成します。

bash シェルで、次のコマンドを入力します。これにより、 から aws-iam-identity-centerパイプラインリポジトリがクローンされます GitHub。

git clone https://github.com/aws-samples/aws-iam-identity-center-pipeline.git
DevOps エンジニア

アクセス権限セットを定義します。

  1. 複製されたリポジトリで templates/permissionsets フォルダに移動し、使用可能なテンプレートのいずれかを開きます。

  2. Name パラメータに、アクセス権限セットの名前を入力します。この値は一意でなければならず、デプロイ後に変更することはできません。

  3. Description パラメータには、アクセス権限セットをユースケースなど簡単に説明します。

  4. SessionDuration パラメータで、ユーザーが AWS アカウントにサインインできる期間を指定します。PT4H の 4 時間など「ISO-8601 継続時間形式」(ウィキペディア) を使用します。値が定義されていない場合、IAM アイデンティティセンターはデフォルトで 1 時間です。

  5. アクセス権限セットのポリシーをカスタマイズします。以下のパラメータはすべてオプションで、導入後に変更できます。アクセス権限セット内のポリシーを定義するには、少なくとも 1 つのパラメータを使用する必要があります。

    • ManagedPolicies パラメータに、割り当てる任意の「AWS マネージドポリシー」の ARN を入力します。

    • CustomerManagedPolicies パラメータに、割り当てる任意の「カスタマー管理ポリシー」名を入力します。ARN は使用しません。

    • PermissionBoundary パラメータで、以下の操作を行って「アクセス許可の境界」を割り当てます。

      • AWS マネージドポリシーを「アクセス許可の境界」として使用する場合は、PolicyTypeAWS を入力し、Policy にポリシーの ARN を入力します。

      • カスタマー管理ポリシーを「アクセス許可の境界」として使用する場合は、PolicyTypeCustomer を入力し、Policy にポリシー名を入力します。ARN は使用しません。

    • CustomPolicy パラメータでは、割り当てる JSON 形式のカスタムポリシーを定義します。JSON ポリシー構造の詳細については、「JSON ポリシーの概要」を参照してください。

  6. アクセス権限セットテンプレートを保存して閉じます。アクセス権限セット名と同じ名前でファイルを保存することをお勧めします。

  7. このプロセスを繰り返して組織に必要な数のアクセス権限セットを作成し、不要なサンプルテンプレートをすべて削除します。

DevOps エンジニア

割り当てを定義します。

  1. 複製されたリポジトリで templates/assignments フォルダに移動し、iam-identitycenter-assigments.json を開きます。このファイルには、アクセス権限セットを AWS アカウントまたは OU に割り当てる方法が記載されています。

  2. SID パラメータには、割り当ての ID を入力します。この値は一意でなければならず、デプロイ後に変更することはできません。

  3. Target パラメータでは、アクセス権限セットを適用するアカウントまたは組織を定義します。有効な値は、アカウント ID、OU ID、OU 名または root です。root は、管理アカウントを除く組織内のすべてのメンバーアカウントにアクセス権限セットを割り当てます。値を二重引用符で囲んで入力し、複数の値をコンマで区切ります。ID の検索方法については、「アカウントの詳細の表示」または「OU の詳細の表示」を参照してください。

  4. PrincipalType パラメータには、アクセス権限セットの影響を受ける IAM Identity Center プリンシパルのタイプを入力します。有効な値は USER または GROUP です。この値は、デプロイ後に変更することはできません。

  5. PrincipalID パラメータには、アクセス権限セットの影響を受ける IAM アイデンティティセンターのアイデンティティストアにおけるユーザーまたはグループの名前を入力します。この値は、デプロイ後に変更することはできません。

  6. PermissionSetName パラメータに、割り当てるアクセス権限セットの名前を入力します。

  7. ステップ 2 ~ 6 を繰り返して、このファイルに必要な数のアサインメントを作成します。通常、アクセス権限セットごとに 1 つの割り当てがあります。必要のないサンプル課題はすべて削除してください。

  8. iam-identitycenter-assigments.json ファイルを保存して閉じます。

DevOps エンジニア
タスク説明必要なスキル

ファイルを S3 バケットにアップロードします。

  1. クローンしたリポジトリを.zip ファイルに圧縮します。

  2. IAM アイデンティティセンターの委任管理者アカウントにサインインします。

  3. https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開きます。

  4. 左側のナビゲーションペインで、[バケット] を選択します。

  5. このソリューションをデプロイするために使用するバケットを選択します。

  6. .zip ファイルをターゲット S3 バケットにアップロードします。手順については、「オブジェクトのアップロード」を参照してください。

DevOps エンジニア

IAM アイデンティティセンターの委任管理者アカウントにリソースをデプロイします。

  1. IAM Identity Center の委任された管理者アカウントで、https://console.aws.amazon.com/cloudformation/ で CloudFormation コンソールを開きます。

  2. iam-identitycenter-pipeline.yaml テンプレートをデプロイします。スタックにはわかりやすい名前を付け、指示に従い、パラメータを更新します。手順については、 CloudFormation ドキュメントの「スタックの作成」を参照してください。

DevOps エンジニア

AWS Organizations 管理アカウントにリソースをデプロイします。

  1. 組織の管理アカウントにサインインします。

  2. https://console.aws.amazon.com/cloudformation/ で CloudFormation コンソールを開きます。

  3. ナビゲーションバーで、現在表示されている AWS リージョンの名前を選択します。次に、us-east-1 リージョンを選択します。このリージョンは、MoveAccount EventBridge ルールが組織の変更に関連する AWS CloudTrail イベントを検出できるようにするために必要です。

  4. iam-identitycenter-organization テンプレートをデプロイします。スタックにはわかりやすい名前を付け、指示に従い、パラメータを更新します。手順については、 CloudFormation ドキュメントの「スタックの作成」を参照してください。

DevOps エンジニア
タスク説明必要なスキル

アクセス権限セットと割り当てを更新します。

MoveAccount Amazon EventBridge ルールが組織内のアカウントへの変更を検出すると、CI/CD パイプラインは自動的に起動し、アクセス許可セットを更新します。たとえば、割り当ての JSON ファイルで指定された OU にアカウントを追加すると、CI/CD パイプラインはそのアクセス権限セットを新しいアカウントに適用します。

デプロイされたアクセス許可セットと割り当てを変更する場合は、JSON ファイルを更新し、IAM Identity Center の委任された管理者アカウントの CodeCommit リポジトリにコミットします。手順については、 CodeCommit ドキュメントの「コミットの作成」を参照してください。

CI/CD パイプラインで以前にデプロイされたアクセス権限セットとアソシエーションを管理する場合は、次の点に注意してください。

  • アクセス権限セット名を変更すると、CI/CD パイプラインは元のアクセス権限セットを削除し、新しいアクセス権限セットを作成します。

  • このパイプラインは、SSOPipeline:true タグが付いたアクセス権限セットのみを管理します。

  • リポジトリ内の同じフォルダに複数のアクセス権限セットと割り当てテンプレートを保存することができます。

  • テンプレートを削除すると、パイプラインはアサインまたはアクセス権限セットを削除します。

  • 割り当て JSON ブロック全体を削除すると、パイプラインは IAM アイデンティティセンターからその割り当てを削除します。

  • AWS アカウントに割り当てられたアクセス権限セットは削除できません。まず、アクセス権限セットの割り当てを解除する必要があります。

DevOps エンジニア

トラブルシューティング

問題ソリューション

アクセス拒否エラー

CloudFormation テンプレートとその中に定義されているリソースをデプロイするために必要なアクセス許可があることを確認します。詳細については、 CloudFormation ドキュメントの「アクセスの制御」を参照してください。

検証段階におけるパイプラインエラー

このエラーは、アクセス権限セットまたは割り当てテンプレートにエラーがある場合に表示されます。

  1. で CodeBuild、ビルドの詳細を表示します

  2. ビルドログで、ビルドが失敗した原因に関する詳細情報が記載されている検証エラーを見つけてください。

  3. アクセス権限セットまたは割り当てテンプレートを更新し、リポジトリにコミットします。

  4. CI/CD パイプラインは CodeBuild プロジェクトを再起動します。ステータスをモニタリングして、検証エラーが解決されたことを確認します。

関連リソース