翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 のアクセス許可セットを管理します。](images/pattern-img/419aaa80-1b97-402d-9c74-c1b8c1ddd1cb/images/3d671cf3-329b-4292-aa2d-1027886074f4.png)
この図表は、次のワークフローを示しています:
ユーザーは、次の変更の全部または一部を実行します。
CodeCommit リポジトリに 1 つ以上の変更をコミットします。
AWS Organizations の組織単位 (OU) のアカウントを変更
ユーザーが CodeCommit リポジトリに変更をコミットした場合、
CodeChange
EventBridge ルールは変更を検出し、IAM Identity Center の委任された管理者アカウントで Lambda 関数を開始します。このルールは、リポジトリ内の特定のファイル (README.md
ファイルなど) の変更には反応しません。ユーザーが組織単位のアカウントを変更した場合、
MoveAccount
EventBridge ルールは変更を検出し、組織の管理アカウントで Lambda 関数を開始します。開始された Lambda 関数は、 で CI/CD パイプラインを開始します CodePipeline。
CodePipeline は
CodebuildTemplateValidation
CodeBuild プロジェクトを開始します。CodebuildTemplateValidation
CodeBuild プロジェクトは、 CodeCommit リポジトリ内の Python スクリプトを使用して、アクセス許可セット templates. CodeBuild validates を次のように検証します。アクセス権限セット名は一意です。
割り当てステートメント ID (
Sid
) は一意です。CustomPolicy
パラメータ内のポリシー定義は有効です。(この認証では、AWS Identity and Access Management Access Analyzer が使用されます。)管理ポリシーの Amazon リソースネーム (ARN) は有効です。
この
CodebuildPermissionSet
CodeBuild プロジェクトでは、AWS SDK for Python (Boto3) を使用して、IAM Identity Center のアクセス許可セットを削除、作成、または更新します。このSSOPipeline:true
タグが付いたアクセス権限セットのみが影響を受けます。このパイプラインを通じて管理されるすべてのアクセス権限セットにはこのタグが付きます。CodebuildAssignments
CodeBuild プロジェクトは Terraform を使用して、IAM Identity Center の割り当てを削除、作成、または更新します。Terraform バックエンドステートファイルは、同じアカウントの S3 バケットに保存されます。CodeBuild は、組織の管理アカウントで
lookup
IAM ロールを引き受けます。権限の付与または取り消しに必要なリソースを一覧表示するために、組織と 「identitystore」API を呼び出します。 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パイプライン
ベストプラクティス
アクセス権限セットと割り当てテンプレートの変更を開始する前に、組織のアクセス権限セットを計画することをお勧めします。アクセス権限はどうあるべきか、そのアクセス権限セットをどのアカウントまたは OU に適用すべきか、そしてどの IAM Identity Center プリンシパル (ユーザーまたはグループ) がアクセス権限セットの影響を受けるべきかを検討してください。アクセス許可セット名、割り当て ID、IAM アイデンティティセンタープリンシパルのタイプと ID は、デプロイ後に変更することはできません。
最小限権限原則に従い、タスクの実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
リポジトリをクローン作成します。 | bash シェルで、次のコマンドを入力します。これにより、 から aws-iam-identity-centerパイプライン
| DevOps エンジニア |
アクセス権限セットを定義します。 |
| DevOps エンジニア |
割り当てを定義します。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
ファイルを S3 バケットにアップロードします。 |
| DevOps エンジニア |
IAM アイデンティティセンターの委任管理者アカウントにリソースをデプロイします。 |
| DevOps エンジニア |
AWS Organizations 管理アカウントにリソースをデプロイします。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
アクセス権限セットと割り当てを更新します。 |
デプロイされたアクセス許可セットと割り当てを変更する場合は、JSON ファイルを更新し、IAM Identity Center の委任された管理者アカウントの CodeCommit リポジトリにコミットします。手順については、 CodeCommit ドキュメントの「コミットの作成」を参照してください。 CI/CD パイプラインで以前にデプロイされたアクセス権限セットとアソシエーションを管理する場合は、次の点に注意してください。
| DevOps エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
アクセス拒否エラー | CloudFormation テンプレートとその中に定義されているリソースをデプロイするために必要なアクセス許可があることを確認します。詳細については、 CloudFormation ドキュメントの「アクセスの制御」を参照してください。 |
検証段階におけるパイプラインエラー | このエラーは、アクセス権限セットまたは割り当てテンプレートにエラーがある場合に表示されます。
|
関連リソース
「アクセス権限セット」(IAM アイデンティティセンターのドキュメント)