翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用して AWS アクセス許可セットを動的に管理する
Amazon Web Services、Vinicius Elias および Marcos Vinicius Pinto Jordao
概要
AWS IAM アイデンティティセンター は、 AWS アカウント およびクラウドアプリケーションへのシングルサインオンアクセスを管理するための一元化されたハブを提供することで AWS Identity and Access Management (IAM) を強化します。ただし、組織の拡大に伴って、IAM アイデンティティセンターの許可セットを手動で管理することはますます複雑になり、エラーが発生しやすくなる可能性があります。この複雑さにより、潜在的なセキュリティギャップや管理オーバーヘッドにつながる可能性があります。
このソリューションを使用すると、ネイティブ AWS のサービスで構築された継続的インテグレーションおよび継続的デリバリー (CI/CD) パイプラインを使用して、Infrastructure as Code (IaC) を通じて許可セットを管理できます。これにより、アクセス許可セットの割り当てメカニズムを AWS Control Tower ライフサイクルイベントまたは Account Factory for Terraform (AFT) 環境とシームレスに統合できます。このアプローチでは、新規と既存の ID の両方に動的な ID 設定を提供します AWS アカウント。
Amazon EventBridge ルールは AWS アカウント 作成と更新をモニタリングし、ID 設定を組織構造と同期させるのに役立ちます。 AWS Control Tower または AFT でアカウントを作成または更新すると、パイプラインがトリガーされます。許可セットの定義と割り当てルールを含む一連の JSON ファイルを評価します。次に、パイプラインはすべてのアカウントに設定を適用し、同期します。
このアプローチには以下の利点があります。
整合性 — AWS 組織全体の手動設定ドリフトを排除
監査性 – すべての ID 管理の変更の完全な履歴を維持します
スケーラビリティ – AWS 環境の拡大に応じて設定を自動的に適用する
セキュリティ – アクセス許可の割り当てにおける人為的ミスを削減します
コンプライアンス – 文書化された変更と割り当てルールを通じて、規制要件の遵守を促進します
前提条件と制限事項
AWS Control Tower と AWS Organizations がセットアップされたマルチアカウント環境。必要に応じて、 で AFT を使用できます AWS Control Tower。
ソリューションを受け取る AWS アカウント IAM アイデンティティセンターの委任管理者。詳細については、IAM アイデンティティセンタードキュメントの「委任管理」を参照してください。
メインコードを処理するバージョン管理システム (VCS) リポジトリ。サンプルについては、ソリューションの GitHub リポジトリ
を参照してください。 Amazon Simple Storage Service (Amazon S3) バケットや Amazon DynamoDB テーブルなど、Terraform バックエンド管理に必要な AWS リソース。
制限事項
パイプラインは AWS ネイティブリソースとオープンソースの Terraform を使用します。パイプラインは、サードパーティーのエコシステムへの呼び出しを行う準備ができていません。
一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS サービス (リージョン別)
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択してください。
アーキテクチャ
次の図は、このパターンのコンポーネントとワークフローを示しています。

AWS Control Tower イベントフロー
このソリューションは、 AWS Control Tower または AFT からのイベントの統合から始まります。どのサービスを選択するかは、変数定義を通じて実装時に決まります。使用される方法に関係なく、アカウントが作成または更新されるたびにパイプラインがトリガーされます。パイプラインは、許可セット管理リポジトリに保存されているポリシーを調整します。
AWS Control Tower ライフサイクルイベントは次のとおりです。
CreateManagedAccount– 新しいアカウントが作成された場合UpdateManagedAccount– 既存のアカウントが更新された場合
イベントルーティング
EventBridge は中央イベント処理サービスとして機能し、 AWS Control Tower アカウントで生成されたイベントをキャプチャします。イベントが発生すると、EventBridge はそれらをソリューションアカウントの一元化されたイベントバスにインテリジェントにルーティングします。 AWS Control Tower ライフサイクルイベントは、個別のルーティングパターンに従います。AFT がイベントソースとして定義されている場合、AFT 管理アカウントは AWS Control Tower アカウントではなくイベントを処理します。このイベント駆動型アーキテクチャにより、手動による介入なしに組織の変更に自動的に対応できるようになります。
AFT 統合プロセス
AWS Control Tower ライフサイクルイベントが AFT 管理アカウントに到達すると、AFT に組み込まれている複数のダウンストリームプロセスが自動的にトリガーされます。AFT アカウントカスタマイズワークフローが完了すると、専用の aft-notifications Amazon Simple Notification Service (Amazon SNS) トピックにメッセージが発行されます。このトピックでは、このソリューションで実装されている aft-new-account-forward-event AWS Lambda 関数をトリガーします。Lambda 関数は、パイプラインの開始に使用される、ソリューションアカウントイベントバスにイベントを送信します。
Infrastructure as Code パイプライン
ソリューションパイプラインは、完全に自動化されたデプロイメカニズムとして動作します。 AWS CodePipeline サービスはリポジトリの変更を継続的にモニタリングします。新しいコミットを検出すると、デプロイワークフローが自動的に開始され、検証フェーズと実行フェーズを含むシーケンシャル処理が開始されます。システムは Terraform planオペレーションを実行して提案された変更を特定し、次に Terraform apply コマンドを実行してそれらの変更を AWS 環境に実装します。注目すべきは、パイプラインが手動承認ゲートなしで実行実行されることです。このアプローチにより、パイプラインログと Terraform 状態ファイルを通じて監査性を維持しながら、インフラストラクチャの変更を迅速にデプロイできるようになります。
パイプラインは を活用して AWS CodeBuild 、適切なアクセス許可を持つ制御された環境で Terraform オペレーションを実行します。この IaC アプローチにより、パイプラインは次のような包括的なアクセス許可管理オペレーションを実行できます。
新しい許可セットを作成します。
既存の許可セットを更新します。
不要な許可セットを削除します。
AWS 組織内のアカウントとグループ間でこれらのアクセス許可の割り当てを管理します。
インフラストラクチャの一貫性を維持し、競合する変更を防ぐために、このソリューションでは、Amazon S3 バケットと専用の Amazon DynamoDB テーブルを使用して Terraform バックエンド状態管理システムを実装します。このアプローチは、Terraform 状態ファイルの永続的なストレージの場所と状態のロックメカニズムを提供し、同じリソースに同時に変更を加えるのを防ぎます。
メインの Terraform コードは、公式 AWS permission-setsの Terraform モジュールを使用します。このモジュールでは、許可セットテンプレートに基づいて、IAM アイデンティティセンター内の許可セットを動的に管理できます。
ソースコントロール管理
許可セットテンプレート (JSON ファイル) は、ID 管理設定の一元化されたリポジトリを提供する、GitHub などの外部バージョン管理システムにあります。このアプローチにより、許可セット定義の信頼できる唯一の情報源が確立され、標準的なコードレビュー手法を通じて共同開発が可能になります。認可されたユーザーは、組織の変更管理プロセスに従って、これらのテンプレートに変更をコミットできます。これらのコミットは、自動デプロイパイプラインの主要なトリガーとして機能し、インフラストラクチャ更新プロセスを開始します。
リポジトリ内の JSON ファイルを使用して許可セットを設定する方法の例については、「追加情報」を参照してください。
ツール
AWS のサービス
AWS CodeBuild は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
AWS CodeConnections では、CodePipeline などの AWS リソースとサービスが GitHub などの外部コードリポジトリに接続できます。
AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。
AWS Control Tower は、規範的なベストプラクティスに従って、 AWS マルチアカウント環境を設定および管理するのに役立ちます。
Amazon DynamoDB は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
「Amazon EventBridge」 は、アプリケーションをさまざまなソースのデータに接続するために支援するサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。
AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理できます。
AWS IAM アイデンティティセンター を使用すると、すべての AWS アカウント およびクラウドアプリケーションへのシングルサインオン (SSO) アクセスを一元管理できます。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS Organizations は、作成して一元管理する AWS アカウント 組織に複数の を統合するのに役立つアカウント管理サービスです。
Amazon Simple Notification Service (Amazon SNS) は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。アカウント管理イベントのプッシュ通知を有効にし、システム内の重要な変更やアクションが関係者に確実に通知されるようにします。
Amazon Simple Storage Service (Amazon S3) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
その他のツール
Terraform
は HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。
コードリポジトリ
このパターンのコードは、 AWS sample-terraform-aws-permission-sets-pipeline リポジトリの GitHub の Samples 組織で入手できます。 sample-terraform-aws-permission-sets-pipeline
ベストプラクティス
本番稼働でコードを実行するために使用される Terraform モジュールとプロバイダーのバージョンを常に固定します。
Checkov
などの静的コード分析ツールを使用して、コードをスキャンし、セキュリティの問題を解決します。 最小特権の原則に従い、タスク実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「最小限の特権を認める。」と「IAM でのセキュリティのベストプラクティス」を参照してください。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
Terraform バックエンドリソースを作成します。 | Terraform バックエンド AWS リソースをまだ作成していない場合は、次の手順を使用して Amazon S3 バケット (
| AWS 管理者 |
クロスアカウントロールを作成します。 | Terraform AWS プロバイダー設定でクロスアカウント IAM
この例では、 AWS マネージド IAM ポリシー AdministratorAccess を使用します。必要に応じて、より具体的なポリシーを使用することもできます。 | AWS 管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
専用リポジトリを作成します。 | このタスクでは、GitHub を使用していることを前提としています。メインの Terraform コードと許可セットテンプレート JSON ファイルを保存するための専用リポジトリを作成します。 | DevOps エンジニア |
許可セットコードを準備します。 | 次のファイルをどのように構造化できるかの詳細については、ソリューションリポジトリのサンプルコード ├── main.tf ├── outputs.tf ├── providers.jinja └── templates 内容をコピーし、 | DevOps エンジニア |
変更をコミットします。 | 先ほど作成したリポジトリに変更をコミットしてプッシュします。リポジトリ名とその GitHub 組織 (例: | DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
コンテンツをダウンロードします。 | ソリューションリポジトリ | DevOps エンジニア |
変数を処理します。 |
追加の変数オプションの詳細については、このパターンの GitHub リポジトリにある variables.tf | DevOps エンジニア |
Terraform バックエンド設定を調整します。 |
必要に応じて、独自の Terraform バックエンド設定を使用することもできます。 | DevOps エンジニア |
Terraform プロバイダー設定を調整します。 |
| DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
を選択します AWS アカウント。 | IAM アイデンティティセンターの委任管理者アカウントにソリューションをデプロイすることをお勧めします。ただし、 AWS Organizations 管理アカウントにデプロイすることもできます。 IAM アイデンティティセンターインスタンスと同じリージョンで、選択したアカウントにサインインするには、 AWS CLIを使用します。使用している IAM ロールに、前のステップで | AWS 管理者 |
Terraform を手動で実行します。 | 設定を初期化、計画、適用するには、次の Terraform コマンドを示されている順序で実行します。
| DevOps エンジニア |
デプロイの結果を確認します。 | IAM アイデンティティセンターの委任管理者アカウントで、 | AWS DevOps |
CodeConnections 設定を完了します。 | CodeConnections 設定を完了するには、次のステップを実行します。
これで、パイプラインは許可セットリポジトリにアクセスできるようになります。 詳細な手順については、デベロッパーツールコンソールのドキュメントの「保留中の接続の更新」を参照してください。 | AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
パイプラインを AWS Control Tower または AFT 更新で実行します。 | AWS Control Tower または AFT を使用してアカウントを作成または変更すると (選択したライフサイクルイベントのタイプに応じて)、パイプラインが開始されます。 | AWS 管理者 |
コードを変更してパイプラインを実行します。 | コードを変更して | AWS DevOps |
パイプラインを手動で実行します。 | パイプラインを手動で開始するには、 のリリース変更機能を使用します AWS CodePipeline。 | AWS DevOps |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
アクセスが拒否されました | ソリューションをデプロイするために必要なアクセス許可があることを確認します。 |
CodeConnections の問題 |
|
パイプライン実行の問題 |
|
許可セットのデプロイの問題 |
|
関連リソース
AWS のサービス ドキュメント
アクセス許可セット AWS アカウント を使用して を管理する (IAM Identity Center ドキュメント)
その他のリソース
アクセスAWS 許可セットモジュール
(Terraform)
追加情報
サンプル許可セットを含む JSON ファイル
次の例は、リポジトリ内の JSON ファイルを使用して許可セットを設定する方法を示しています。
{ "Name": "ps-billing", // Permission set identifier "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set "Description": "Billing access in AWS", // Detailed description "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format) "ManagedPolicies": [ // List of AWS IAM managed policies "arn:aws:iam::aws:policy/job-function/Billing", "arn:aws:iam::aws:policy/job-function/SupportUser", "arn:aws:iam::aws:policy/AWSSupportAccess", "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess" ], "CustomerPolicies": [], // References to IAM policies previously created "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set "PermissionBoundary": { // AWS or customer managed IAM policy to be used as boundary "ManagedPolicy": "", "CustomerPolicy": "" }, "Assignments": [ // Define the assignment rules { "all_accounts": true, // Apply to ALL active AWS accounts in organization "principal": "G_BILLING_USERS", // Group/user name in Identity Center "type": "GROUP", // Can be "GROUP" or "USER" "account_id": [], // List of AWS account ID (empty since all_accounts=true) "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags } ] }
詳細については、Terraform ウェブサイトで「AWS Permission Sets module
ヒント
Terraform インポートブロック
を使用して、既存の許可セットをソリューションにインポートできます。 AFT を使用して、委任アカウントに AWS 権限セットパイプラインを実装できます。詳細については、「AFT Blueprints
」を参照してください。