翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Account Factory for Terraform を使用して複数のアカウントのアクセス許可セットを管理する
Anand Krishna Varanasi と Siamak Heshmati、Amazon Web Services
概要
このパターンは、AWS Control Tower Account Factory Terraform (AFT) を と統合AWS IAM Identity Centerして、複数の に対するアクセス許可を AWS アカウント 大規模に設定するのに役立ちます。このアプローチでは、カスタム AWS Lambda 関数を使用して、組織として管理 AWS アカウント される へのアクセス許可セットの割り当てを自動化します。これにより、プラットフォームエンジニアリングチームからの手動介入を必要としないため、プロセスが合理化されます。このソリューションは、運用効率、セキュリティ、一貫性を高めることができます。これにより、 の安全で標準化されたオンボーディングプロセスが促進され AWS Control Tower、クラウドインフラストラクチャの俊敏性と信頼性を優先する企業にとって不可欠です。
前提条件と制限
前提条件
AWS アカウント、 で管理されます AWS Control Tower。詳細については、「 の開始方法 AWS Control Tower」を参照してください。
Account Factory for Terraform は、環境内の専用アカウントにデプロイされます。詳細については、「Deloy AWS Control Tower Account Factory for Terraform」を参照してください。
IAM Identity Center インスタンス。 環境でセットアップします。詳細については、「IAM アイデンティティセンターの開始方法」を参照してください。
設定済みのアクティブな IAM Identity Center グループ。 詳細については、「 にグループを追加する IAM アイデンティティセンターディレクトリ」を参照してください。
Python バージョン 3.9 以降、インストール済み
制約事項
このソリューションは、 が管理するアカウントでのみ使用できます AWS Control Tower。このソリューションは、Account Factory for Terraform を使用してデプロイされます。
このパターンには、ID ソースとの ID フェデレーションを設定する手順は含まれていません。この設定を完了する方法の詳細については、IAM Identity Center ドキュメントの「IAM Identity Center ID ソースチュートリアル」を参照してください。
アーキテクチャ
AFT の概要
AFT は、アカウントのプロビジョニングとカスタマイズに役立つ Terraform パイプラインを設定します AWS Control Tower。AFT は、アカウントプロビジョニングのプロセスを自動化する GitOps モデルに従います AWS Control Tower。アカウントリクエスト Terraform ファイルを作成し、リポジトリにコミットします。これにより、アカウントプロビジョニングの AFT ワークフローが開始されます。アカウントのプロビジョニングが完了すると、AFT は追加のカスタマイズステップを自動的に実行できます。詳細については、 AWS Control Tower ドキュメントの「AFT アーキテクチャ」を参照してください。
AFT には、次のメインリポジトリがあります。
aft-account-request
– このリポジトリには、作成または更新する Terraform コードが含まれています AWS アカウント。aft-account-customizations
– このリポジトリには、アカウントごとにリソースを作成またはカスタマイズするための Terraform コードが含まれています。aft-global-customizations
– このリポジトリには、すべてのアカウントのリソースを大規模に作成またはカスタマイズするための Terraform コードが含まれています。aft-account-provisioning-customizations
– このリポジトリは、 によって作成され、AFT で管理される特定のアカウントにのみ適用されるカスタマイズを管理します。たとえば、このリポジトリを使用して、IAM Identity Center でユーザーまたはグループの割り当てをカスタマイズしたり、アカウント閉鎖を自動化したりできます。
ソリューションの概要
このカスタムソリューションには、 AWS Step Functions ステートマシンと、複数のアカウントのユーザーとグループに権限セットを割り当てる AWS Lambda 関数が含まれています。このパターンでデプロイされたステートマシンは、既存の AFT aft_account_provisioning_customizations
ステートマシンと組み合わせて動作します。ユーザーは、新しい AWS アカウント の作成時またはアカウントの作成後に、IAM Identity Center のユーザーとグループの割り当てを更新するリクエストを送信します。これを行うには、リポジトリに変更をプッシュしますaft-account-request
。アカウントを作成または更新するリクエストは、Amazon DynamoDB Streams でストリームを開始します。これにより、ターゲットの IAM Identity Center ユーザーとグループを更新する Lambda 関数が開始されます AWS アカウント。
以下は、ターゲットユーザーとグループへのアクセス許可セットの割り当てのために Lambda 関数で指定できるパラメータの例です。
custom_fields = { "InstanceArn" = "<Organization ID>", "PermissionSetArn" = "<Permission set ARN>", "PrincipalId" = "<Principal ID>", }
このステートメントのパラメータは次のとおりです。
InstanceArn
– 組織の Amazon リソースネーム (ARN)PermissionSetArn
– アクセス許可セットの ARNPrincipalId
– アクセス許可セットが適用される IAM Identity Center のユーザーまたはグループの識別子
注記
このソリューションを実行する前に、ターゲットのアクセス許可セット、ユーザー、グループを作成する必要があります。
InstanceArn
値は一貫している必要がありますが、Lambda 関数を変更して、複数のアクセス許可セットを複数のターゲット ID に割り当てることができます。アクセス許可セットのパラメータは で終わる必要がありPermissionSetArn
、ユーザーとグループのパラメータは で終わる必要がありますPrincipalId
。両方の属性を定義する必要があります。以下は、複数のアクセス許可セットとターゲットユーザーおよびグループを定義する方法の例です。
custom_fields = { "InstanceArn" = "<Organization ID>", "AdminAccessPermissionSetArn" = "<Admin privileges permission set ARN>", "AdminAccessPrincipalId" = "<Admin principal ID>", "ReadOnlyAccessPermissionSetArn" = "<Read-only privileges permission set ARN>", "ReadOnlyAccessPrincipalId" = "<Read-only principal ID>", }
次の図は、ソリューションがターゲット内のユーザーとグループのアクセス許可セットを AWS アカウント 大規模に更新する方法のstep-by-stepのワークフローを示しています。ユーザーがアカウント作成リクエストを開始すると、AFT は aft-account-provisioning-framework
Step Functions ステートマシンを開始します。このステートマシンは extract-alternate-sso
Lambda 関数を開始します。Lambda 関数は、ターゲット内のユーザーとグループに権限セットを割り当てます AWS アカウント。これらのユーザーまたはグループは、IAM Identity Center で設定された任意の ID ソースから取得できます。ID ソースの例としては、Okta、Active Directory、Ping Identity などがあります。

この図は、新しいアカウントが作成されたときの次のワークフローを示しています。
ユーザーが
custom_fields
リポジトリに変更をプッシュしますaft-account-request
。AWS CodePipeline は、ユーザー定義メタデータを
aft-request-audit
Amazon DynamoDB テーブルに記録する AWS CodeBuild ジョブを開始します。このテーブルには、ユーザー定義メタデータを記録する属性があります。ddb_event_name
属性は、AFT オペレーションのタイプを定義します。値が の場合
INSERT
、ソリューションは新しい AWS アカウント の作成時にターゲット ID に設定されたアクセス許可を割り当てます。値が の場合
UPDATE
、ソリューションは の作成後にターゲット ID に設定されたアクセス許可を割り当て AWS アカウント ます。
Amazon DynamoDB Streams は
aft_alternate_sso_extract
Lambda 関数を開始します。aft_alternate_sso_extract
Lambda 関数は、 AWS Control Tower 管理アカウントで AWS Identity and Access Management (IAM) ロールを引き受けます。Lambda 関数は、IAM アイデンティティセンターに an AWS SDK for Python (Boto3) create_account_assignment
API コールを実行して、アクセス許可セットをターゲットユーザーとグループに割り当てます。 aft-request-audit
Amazon DynamoDB テーブルからアクセス許可セットと ID の割り当てを取得します。Step Functions ワークフローが完了すると、アクセス許可セットがターゲット ID に割り当てられます。
自動化とスケール
AFT は、スケーラビリティの高い CodePipeline、 AWS CodeBuild、DynamoDB、Lambda AWS のサービス などを使用して大規模に動作します。さらなる自動化のために、このソリューションを Jira などのチケットまたは問題管理システムと統合できます。詳細については、このパターンの「追加情報」セクションを参照してください。
ツール
AWS のサービス
Account Factory for Terraform (AFT) は、このソリューションの主要なツールです。
aft-account-provisioning-customizations
リポジトリには、カスタム IAM Identity Center ユーザーやグループの割り当てなど AWS アカウント、 のカスタマイズを作成するための Terraform コードが含まれています。Amazon DynamoDB は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS Step Functions は、 AWS Lambda 関数やその他の を組み合わせてビジネスクリティカルなアプリケーション AWS のサービス を構築するのに役立つサーバーレスオーケストレーションサービスです。
その他のツール
コードリポジトリ
AFT のコードリポジトリは、GitHub AWS Control Tower Account Factory for Terraform
ベストプラクティス
AWS 責任共有モデル
を理解します。 セキュリティに関する推奨事項に従ってください AWS Control Tower。詳細については、「 のセキュリティ AWS Control Tower」を参照してください。
最小権限の原則に従います。詳細については、「最小特権アクセス許可を適用する」を参照してください。
グループとビジネスユニット向けに、特定の焦点を絞ったアクセス許可セットと IAM ロールを構築します。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
IAM ロールを作成します。 | AWS Control Tower 管理アカウントで、Terraform を使用して IAM ロールを作成します。このロールには、クロスアカウントアクセスと、ID プロバイダーからのフェデレーションアクセスを許可する信頼ポリシーがあります。また、 を介して他の アカウントへのアクセスを付与するアクセス許可も付与されます AWS Control Tower。Lambda 関数はこのロールを引き受けます。以下の操作を実行します。
| AWS DevOps、クラウドアーキテクト |
環境に合わせてソリューションをカスタマイズします。 |
| AWS DevOps、クラウドアーキテクト |
ソリューションをデプロイします。 |
| AWS DevOps、クラウドアーキテクト |
コードリポジトリ接続を設定します。 | 設定ファイルを保存するコードリポジトリと 間の接続を設定します AWS アカウント。手順については、 AWS CodePipeline ドキュメントのCodeConnections を使用してパイプラインにサードパーティーのソースプロバイダーを追加する」を参照してください。 | AWS DevOps、クラウドアーキテクト |
タスク | 説明 | 必要なスキル |
---|---|---|
AFT パイプラインを起動して新しいアカウントをデプロイします。 | AWS Control Tower 環境に新しい を作成するパイプラインを開始するには、「AFT を使用して新しいアカウントをプロビジョニングする AWS アカウント 」の手順に従います。アカウント作成プロセスが完了するまで待ちます。 | AWS DevOps、クラウドアーキテクト |
変更を検証します。 |
| AWS DevOps、クラウドアーキテクト |
トラブルシューティング
問題 | ソリューション |
---|---|
アクセス許可セットの割り当てが機能していません。 | グループ ARN、組織 ID、および Lambda パラメータが正しいことを確認します。例については、このパターンのソリューションの概要セクションを参照してください。 |
リポジトリ内のコードを更新しても、パイプラインは開始されません。 | この問題は、 AWS アカウント と リポジトリ間の接続に関連しています。で AWS Management Console、接続がアクティブであることを確認します。詳細については、 AWS CodePipeline ドキュメントのGitHub 接続」を参照してください。 |
追加情報
チケット管理ツールとの統合
このソリューションを Jira や ServiceNow などのチケットまたは問題管理ツールと統合することを選択できます。次の図は、このオプションのワークフローの例を示しています。チケット管理ツールを AFT ソリューションリポジトリと統合するには、ツールのコネクタを使用します。Jira コネクタについては、「Jira と GitHub の統合aft-account-request
GitHub リポジトリにカスタムフィールドを追加するワークフローを開始できます。ユースケースの要件を満たすカスタムワークフローを設計できます。

この図表は、次のワークフローを示しています:
ユーザーは、Jira などのチケット管理ツールでカスタムアクセス許可セットの割り当てをリクエストします。
ケースが承認されると、ワークフローはアクセス許可セットの割り当ての更新を開始します。(オプション) プラグインを使用して、このステップをカスタムオートメーションできます。
オペレーターは、更新されたアクセス許可セットパラメータを含む Terraform コードを
aft-account-request
リポジトリの開発ブランチまたは機能ブランチに送信します。GitHub Actions は、OpenID Connect (OIDC) 呼び出しを使用して開始 AWS CodeBuild します。CodeBuild は、tfsec
や checkov などのツールを使用して、Infrastructure as Code (IaC) セキュリティスキャンを実行します。セキュリティ違反があれば、オペレーターに警告します。 違反が見つからない場合、GitHub Actions は自動プルリクエストを作成し、コード所有者にコードレビューを割り当てます。また、プルリクエストのタグも作成します。
コード所有者がコードレビューを承認すると、別の GitHub Actions ワークフローが開始されます。以下を含むプルリクエスト標準をチェックします。
プルリクエストのタイトルが要件を満たしている場合。
プルリクエスト本文に承認されたケース番号が含まれている場合。
プルリクエストに適切なタグが付けられている場合。
プルリクエストが基準を満たしている場合、GitHub Actions は AFT 製品ワークフローを開始します。を使用して
ct-aft-account-request
パイプラインが開始されます AWS CodePipeline。このパイプラインは Step Functions でaft-account-provisioning-framework
カスタムステートマシンを起動します。このステートマシンは、このパターンのソリューションの概要セクションで前述したとおりに動作します。