Account Factory for Terraform を使用して複数のアカウントのアクセス許可セットを管理する - AWS 規範ガイダンス

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

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 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 – アクセス許可セットの ARN

  • PrincipalId – アクセス許可セットが適用される 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 などがあります。

アカウントが作成または更新されたときにアクセス許可セットを更新するワークフロー。

この図は、新しいアカウントが作成されたときの次のワークフローを示しています。

  1. ユーザーがcustom_fieldsリポジトリに変更をプッシュしますaft-account-request

  2. AWS CodePipeline は、ユーザー定義メタデータを aft-request-audit Amazon DynamoDB テーブルに記録する AWS CodeBuild ジョブを開始します。このテーブルには、ユーザー定義メタデータを記録する属性があります。ddb_event_name 属性は、AFT オペレーションのタイプを定義します。

    • 値が の場合INSERT、ソリューションは新しい AWS アカウント の作成時にターゲット ID に設定されたアクセス許可を割り当てます。

    • 値が の場合UPDATE、ソリューションは の作成後にターゲット ID に設定されたアクセス許可を割り当て AWS アカウント ます。

  3. Amazon DynamoDB Streams は aft_alternate_sso_extract Lambda 関数を開始します。

  4. aft_alternate_sso_extract Lambda 関数は、 AWS Control Tower 管理アカウントで AWS Identity and Access Management (IAM) ロールを引き受けます。

  5. Lambda 関数は、IAM アイデンティティセンターに an AWS SDK for Python (Boto3) create_account_assignment API コールを実行して、アクセス許可セットをターゲットユーザーとグループに割り当てます。aft-request-audit Amazon DynamoDB テーブルからアクセス許可セットと ID の割り当てを取得します。

  6. 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 のサービス を構築するのに役立つサーバーレスオーケストレーションサービスです。

その他のツール

  • Python」は汎用のコンピュータープログラミング言語です。

  • Terraform」は、HashiCorpのinfrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。

コードリポジトリ

AFT のコードリポジトリは、GitHub AWS Control Tower Account Factory for Terraform リポジトリで入手できます。このパターンのコードは、Govern SSO Assignments for AWS アカウント using Account Factory for Terraform (AFT) リポジトリで入手できます。

ベストプラクティス

エピック

タスク説明必要なスキル

IAM ロールを作成します。

AWS Control Tower 管理アカウントで、Terraform を使用して IAM ロールを作成します。このロールには、クロスアカウントアクセスと、ID プロバイダーからのフェデレーションアクセスを許可する信頼ポリシーがあります。また、 を介して他の アカウントへのアクセスを付与するアクセス許可も付与されます AWS Control Tower。Lambda 関数はこのロールを引き受けます。以下の操作を実行します。

  1. GitHub コードリポジトリから AFTCrossAccountRole.tf ファイルをダウンロードします。

  2. AWS 環境に応じて AFTCrossAccountRole.tf ファイルを変更します。

  3. Terraform で、次のコマンドを入力してこの IAM ロールを作成します。

    terraform init terraform plan terraform apply
  4. ロールが正常にデプロイされ、予想されるクロスアカウントアクセスがあることを確認します。

AWS DevOps、クラウドアーキテクト

環境に合わせてソリューションをカスタマイズします。

  1. 次のコマンドを入力して、Account Factory for Terraform (AFT) リポジトリ AWS アカウント を使用するための Govern SSO Assignments をローカルワークステーションにクローンします。

    git clone https://github.com/aws-samples/aft-custom-sso-assignment.git
  2. aft-account-provisioning-customizations/terraform フォルダで、 variables.tf ファイルを開きます。

  3. 環境に合わせて変数を変更します。

  4. variables.tf ファイルを保存して閉じます。

  5. aft-account-request リポジトリで account-request.tf ファイルを開きます。

  6. custom_fields パラメータを変更して、アクセス許可セットとターゲットユーザーおよびグループを定義します。詳細については、このパターンの「アーキテクチャ」セクションを参照してください。

  7. account-request.tf ファイルを保存して閉じます。

AWS DevOps、クラウドアーキテクト

ソリューションをデプロイします。

  1. クローンされたリポジトリで、 terraformフォルダの内容をコピーし、aft-account-provisioning-customizationsリポジトリの terraformフォルダに貼り付けます。

  2. AFT 管理アカウントで、ct-aft-account-provisioning-customizationsパイプラインを開始します。これにより、カスタムソリューションがデプロイされます。手順については、CodePipeline でパイプラインを開始する」を参照してください。

  3. リソースが AFT 管理アカウントに正常にデプロイされたことを確認します。

AWS DevOps、クラウドアーキテクト

コードリポジトリ接続を設定します。

設定ファイルを保存するコードリポジトリと 間の接続を設定します AWS アカウント。手順については、 AWS CodePipeline ドキュメントのCodeConnections を使用してパイプラインにサードパーティーのソースプロバイダーを追加する」を参照してください。

AWS DevOps、クラウドアーキテクト
タスク説明必要なスキル

AFT パイプラインを起動して新しいアカウントをデプロイします。

AWS Control Tower 環境に新しい を作成するパイプラインを開始するには、「AFT を使用して新しいアカウントをプロビジョニングする AWS アカウント 」の手順に従います。アカウント作成プロセスが完了するまで待ちます。

AWS DevOps、クラウドアーキテクト

変更を検証します。

  1. AWS IAM Identity Center コンソールを開きます。

  2. アカウントのリストで、新しく作成したアカウントを選択します。

  3. ターゲットユーザーとグループにアクセス権を付与するためのアクセス許可セットが割り当てられていることを確認します。

AWS DevOps、クラウドアーキテクト

トラブルシューティング

問題ソリューション

アクセス許可セットの割り当てが機能していません。

グループ ARN、組織 ID、および Lambda パラメータが正しいことを確認します。例については、このパターンのソリューションの概要セクションを参照してください。

リポジトリ内のコードを更新しても、パイプラインは開始されません。

この問題は、 AWS アカウント と リポジトリ間の接続に関連しています。で AWS Management Console、接続がアクティブであることを確認します。詳細については、 AWS CodePipeline ドキュメントのGitHub 接続」を参照してください。

追加情報

チケット管理ツールとの統合

このソリューションを Jira や ServiceNow などのチケットまたは問題管理ツールと統合することを選択できます。次の図は、このオプションのワークフローの例を示しています。チケット管理ツールを AFT ソリューションリポジトリと統合するには、ツールのコネクタを使用します。Jira コネクタについては、「Jira と GitHub の統合」を参照してください。ServiceNow コネクタについては、GitHub との統合」を参照してください。プルリクエストの承認の一環としてユーザーにチケット ID の提供を要求するカスタムソリューションを構築することもできます。AFT AWS アカウント を使用して新しい を作成するリクエストが承認された場合、そのイベントは aft-account-request GitHub リポジトリにカスタムフィールドを追加するワークフローを開始できます。ユースケースの要件を満たすカスタムワークフローを設計できます。

GitHub Actions とチケット管理ツールを使用するワークフロー。

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

  1. ユーザーは、Jira などのチケット管理ツールでカスタムアクセス許可セットの割り当てをリクエストします。

  2. ケースが承認されると、ワークフローはアクセス許可セットの割り当ての更新を開始します。(オプション) プラグインを使用して、このステップをカスタムオートメーションできます。

  3. オペレーターは、更新されたアクセス許可セットパラメータを含む Terraform コードをaft-account-requestリポジトリの開発ブランチまたは機能ブランチに送信します。

  4. GitHub Actions は、OpenID Connect (OIDC) 呼び出しを使用して開始 AWS CodeBuild します。CodeBuild は、tfseccheckov などのツールを使用して、Infrastructure as Code (IaC) セキュリティスキャンを実行します。セキュリティ違反があれば、オペレーターに警告します。

  5. 違反が見つからない場合、GitHub Actions は自動プルリクエストを作成し、コード所有者にコードレビューを割り当てます。また、プルリクエストのタグも作成します。

  6. コード所有者がコードレビューを承認すると、別の GitHub Actions ワークフローが開始されます。以下を含むプルリクエスト標準をチェックします。

    • プルリクエストのタイトルが要件を満たしている場合。

    • プルリクエスト本文に承認されたケース番号が含まれている場合。

    • プルリクエストに適切なタグが付けられている場合。

  7. プルリクエストが基準を満たしている場合、GitHub Actions は AFT 製品ワークフローを開始します。を使用してct-aft-account-requestパイプラインが開始されます AWS CodePipeline。このパイプラインは Step Functions でaft-account-provisioning-frameworkカスタムステートマシンを起動します。このステートマシンは、このパターンのソリューションの概要セクションで前述したとおりに動作します。