翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ブートストラップパイプラインを使用して Account Factory for Terraform (AFT) を実装する
作成者: Vinicius Elias (AWS) と Edgar Costa Filho (AWS)
コードリポジトリ: aft-bootstrap-pipeline | 環境:本稼働 | テクノロジー: 管理とガバナンス、インフラストラクチャ |
ワークロード: オープンソース | AWS サービス: AWS CodeBuild、AWS CodeCommit、AWS CodePipeline、AWS Control Tower、AWS Organizations |
[概要]
このパターンは、 の管理アカウントから AWS Control Tower Account Factory for Terraform (AFT) をデプロイするためのシンプルで安全な方法を提供します AWS Organizations。このソリューションの中核となるのは、Terraform パイプラインを作成して AFT 設定を自動化する AWS CloudFormation テンプレートです。このパイプラインは、最初のデプロイやその後の更新に簡単に適応できるように設計されています。
セキュリティとデータの整合性は の最優先事項であるため AWS、マネージドインフラストラクチャと設定の状態を追跡する重要なコンポーネントである Terraform 状態ファイルは、Amazon Simple Storage Service (Amazon S3) バケットに安全に保存されます。このバケットには、サーバー側の暗号化やパブリックアクセスをブロックするポリシーなど、いくつかのセキュリティ対策が設定されているため、Terraform の状態が不正アクセスやデータ侵害から保護されます。
管理アカウントは環境全体をオーケストレーションおよび監視するため、 の重要なリソースです AWS Control Tower。このパターンは AWS ベストプラクティスに従っており、デプロイプロセスが効率的であるだけでなく、セキュリティとガバナンスの基準にも準拠し、 AWS 環境に AFT をデプロイするための包括的で安全で効率的な方法を提供します。
AFT の詳細については、 AWS Control Tower ドキュメントを参照してください。
前提条件と制限
前提条件
最低限、管理アカウント、ログアーカイブアカウント、監査アカウント、および AFT 管理用の追加のアカウントが 1 つある基本的な AWS マルチアカウント環境。
確立された AWS Control Tower 環境。 CloudFormation テンプレートがデプロイされるため、管理アカウントは適切に設定する必要があります。
AWS 管理アカウントに必要なアクセス許可。S3 バケット、 AWS Lambda 関数、 AWS Identity and Access Management (IAM) ロール、 AWS CodePipeline プロジェクトなどのリソースを作成および管理するには、十分なアクセス許可が必要です。
Terraform に精通していること。デプロイには Terraform 設定の生成と管理が含まれるため、Terraform の主要な概念とワークフローを理解することは重要です。
制約事項
アカウントのAWS リソースクォータに注意してください。デプロイによって複数のリソースが作成され、サービスクォータが発生すると、デプロイプロセスが妨げられる可能性があります。
テンプレートは、Terraform と の特定のバージョン向けに設計されています AWS のサービス。バージョンのアップグレードまたは変更には、テンプレートの変更が必要になる場合があります。
製品バージョン
Terraform バージョン 1.5.7 以降
AFT バージョン 1.11.1 以降
アーキテクチャ
ターゲットテクノロジースタック
AWS CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon EventBridge
IAM
AWS Lambda
Amazon S3
ターゲット アーキテクチャ
次の図は、このパターンで説明されている実装を示しています。
ワークフローは、リソースの作成、コンテンツの生成、パイプラインの実行の 3 つの主要なタスクで構成されます。
リソースの作成
CloudFormation このパターンで提供されるテンプレートは
AFT Terraform ブートストラップコードを保存する CodeCommit リポジトリ
AFT 実装に関連付けられている Terraform 状態ファイルを保存する S3 バケット
CodePipeline パイプライン
Terraform プランを実装し、パイプラインのさまざまな段階でコマンドを適用する 2 つの CodeBuild プロジェクト
CodeBuild および CodePipeline サービスの IAM ロール
パイプラインランタイムアーティファクトを保存するための 2 番目の S3 バケット
main
ブランチの CodeCommit リポジトリの変更をキャプチャする EventBridge ルールEventBridge ルールの別の IAM ロール
さらに、 CloudFormation テンプレートの Generate AFT Files
パラメータを に設定するとtrue
、テンプレートはこれらの追加リソースを作成してコンテンツを生成します。
生成されたコンテンツを保存し、 CodeCommit リポジトリのソースとして使用する S3 バケット
指定されたパラメータを処理し、適切なコンテンツを生成する Lambda 関数
Lambda 関数を実行する IAM 関数
テンプレートがデプロイされたときに Lambda 関数を実行する CloudFormation カスタムリソース
コンテンツの生成
AFT ブートストラップファイルとそのコンテンツを生成するために、ソリューションは Lambda 関数と S3 バケットを使用します。この関数はバケットにフォルダを作成し、フォルダ内に main.tf
と の 2 つのファイルを作成しますbackend.tf
。この関数は、提供された CloudFormation パラメータも処理し、これらのファイルに事前定義されたコードを入力し、それぞれのパラメータ値を置き換えます。
ファイルを生成するテンプレートとして使用されるコードを表示するには、ソリューションのGitHub リポジトリ
main.tf
module "aft" { source = "github.com/aws-ia/terraform-aws-control_tower_account_factory?ref=<aft_version>" # Required variables ct_management_account_id = "<ct_management_account_id>" log_archive_account_id = "<log_archive_account_id>" audit_account_id = "<audit_account_id>" aft_management_account_id = "<aft_management_account_id>" ct_home_region = "<ct_home_region>" # Optional variables tf_backend_secondary_region = "<tf_backend_secondary_region>" aft_metrics_reporting = "<false|true>" # AFT Feature flags aft_feature_cloudtrail_data_events = "<false|true>" aft_feature_enterprise_support = "<false|true>" aft_feature_delete_default_vpcs_enabled = "<false|true>" # Terraform variables terraform_version = "<terraform_version>" terraform_distribution = "<terraform_distribution>" }
backend.tf
terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup.tfstate" } }
CodeCommit リポジトリの作成時に Generate AFT Files
パラメータを に設定するとtrue
、テンプレートは生成されたコンテンツをmain
ブランチのソースとする S3 バケットを使用してリポジトリを自動的に入力します。
パイプラインの実行
リソースが作成され、ブートストラップファイルが設定されると、パイプラインが実行されます。第 1 ステージ (ソース ) はリポジトリのメインブランチからソースコードを取得し、第 2 ステージ (ビルド ) は Terraform プランコマンドを実行し、レビューする結果を生成します。3 番目のステージ (承認 ) では、パイプラインは手動アクションが最後のステージ (デプロイ ) を承認または拒否するのを待ちます。最後のステージでは、パイプラインは前の Terraform apply
コマンドの結果を入力として使用して Terraform plan
コマンドを実行します。最後に、クロスアカウントロールと管理アカウントのアクセス許可を使用して、AFT 管理アカウントに AFT リソースを作成します。
ツール
AWS サービス
AWS CloudFormation は、AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、AWS アカウントとリージョン全体でライフサイクル全体を通じてリソースを管理するのに役立ちます。
AWS CodeBuild は、ソースコードをコンパイルし、ユニットテストを実行し、すぐにデプロイできるアーティファクトを生成するのに役立つフルマネージドビルドサービスです。
AWS CodeCommit は、独自のソース管理システムを管理することなく、Git リポジトリをプライベートに保存および管理できるようにするバージョン管理サービスです。
AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化して設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
AWS Lambda は、イベントに応じてコードを実行し、コンピューティングリソースを自動的に管理するコンピューティングサービスであり、本番稼働用の最新のサーバーレスアプリケーションをすばやく作成できます。
AWS SDK for Python (Boto3)
は、Python アプリケーション、ライブラリ、またはスクリプトを AWS のサービスに統合するのに役立つソフトウェア開発キットです。
その他のツール
コードリポジトリ
このパターンのコードは、 GitHub AFT ブートストラップパイプラインリポジトリ
公式 AFT リポジトリについては、「」の「AWS Control Tower Account Factory for Terraform
ベストプラクティス
提供された CloudFormation テンプレートを使用して AFT をデプロイする場合は、 ベストプラクティスに従って、安全で効率的で正常な実装を保証することをお勧めします。AFT の実装と運用に関する主要なガイドラインと推奨事項は次のとおりです。
パラメータの詳細なレビュー: CloudFormation テンプレート内の各パラメータを慎重に確認し、理解します。AFT の正しいセットアップと機能には、正確なパラメータ設定が不可欠です。
テンプレートの定期的な更新: テンプレートを最新の AWS 機能と Terraform バージョンで更新しておいてください。定期的に更新することで、新機能を活用してセキュリティを維持できます。
バージョニング: AFT モジュールのバージョンを固定し、可能であればテストに別の AFT デプロイを使用します。
スコープ : AFT は、インフラストラクチャガードレールとカスタマイズをデプロイするためにのみ使用します。アプリケーションのデプロイには使用しないでください。
リンティングと検証 : AFT パイプラインには、リントされた検証済みの Terraform 設定が必要です。設定を AFT リポジトリにプッシュする前に、lint、検証、テストを実行します。
Terraform モジュール: 再利用可能な Terraform コードをモジュールとして構築し、組織の要件に合わせて Terraform と AWS プロバイダーのバージョンを常に指定します。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
AWS Control Tower 環境を準備します。 | AWS Control Tower AWS 環境内で をセットアップして設定し、 の一元管理とガバナンスを確保します AWS アカウント。詳細については、 AWS Control Tower ドキュメントの「 の開始 AWS Control Tower方法」を参照してください。 | クラウド管理者 |
AFT 管理アカウントを起動します。 | AWS Control Tower Account Factory を使用して、AFT 管理アカウント AWS アカウント として機能する新しい を起動します。詳細については、 AWS Control Tower ドキュメントの「Account Factory で AWS Service Catalog アカウントをプロビジョニングする」を参照してください。 | クラウド管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
CloudFormation テンプレートを起動します。 | このエピックでは、このソリューションで提供される CloudFormation テンプレートをデプロイして、 AWS 管理アカウントに AFT ブートストラップパイプラインを設定します。パイプラインは、前のエピックで設定した AFT 管理アカウントに AFT ソリューションをデプロイします。 ステップ 1: AWS CloudFormation コンソールを開く
ステップ 2: 新しいスタックを作成する
ステップ 3: スタックパラメータを設定する
ステップ 4: ファイル生成を決定する
ステップ 5: アカウント AWS Control Tower の詳細と AFT アカウントの詳細を入力する
ステップ 6: AFT オプションを設定する
ステップ 7: バージョンを指定する
ステップ 8: スタックを確認して作成する
ステップ 9: スタックの作成をモニタリングする
ステップ 10: デプロイを検証する
| クラウド管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
AFT ブートストラップリポジトリを入力します。 | (オプション) CloudFormation テンプレートをデプロイしたら、新しく作成された AFT ブートストラップリポジトリにコンテンツを入力または検証し、パイプラインが正常に実行されたかどうかをテストできます。
ステップ 1: リポジトリを入力する
ステップ 2: 変更をコミットしてプッシュする
| クラウド管理者 |
AFT ブートストラップパイプラインを検証します。 | ステップ 1: パイプラインを表示する
ステップ 2: Terraform 計画結果を承認する
ステップ 3: デプロイを待つ
ステップ 4: 作成されたリソースを確認する
| クラウド管理者 |
トラブルシューティング
問題 | ソリューション |
---|---|
CloudFormation テンプレートに含まれるカスタム Lambda 関数は、デプロイ中に失敗します。 | Lambda 関数の Amazon CloudWatch ログをチェックして、エラーを特定します。ログには詳細情報が表示され、特定の問題を特定するのに役立ちます。Lambda 関数に必要なアクセス許可があり、環境変数が正しく設定されていることを確認します。 |
アクセス許可が不十分であるため、リソースの作成または管理に障害が発生します。 | Lambda 関数にアタッチされている IAM ロールとポリシー CodeBuild、およびデプロイに関係するその他のサービスを確認します。必要なアクセス許可があることを確認します。アクセス許可に問題がある場合は、IAM ポリシーを調整して必要なアクセスを許可します。 |
新しいバージョン AWS のサービス または Terraform バージョンで古いバージョンの CloudFormation テンプレートを使用しています。 | テンプレートを定期的に更新 CloudFormation して、最新の AWS および Terraform リリースと互換性を持たせます。バージョン固有の変更や要件については、リリースノートまたはドキュメントを確認してください。 |
デプロイ中に AWS のサービス クォータに達します。 | パイプラインをデプロイする前に、S3 バケット、IAM ロール、Lambda 関数などのリソースの AWS のサービス クォータを確認してください。必要に応じてリクエストの増加。詳細については、 AWS ウェブサイトの「 AWS のサービス クォータ」を参照してください。 |
CloudFormation テンプレートの入力パラメータが正しくないため、エラーが発生します。 | すべての入力パラメータにタイプミスや誤った値がないかを再確認してください。アカウント IDs やリージョン名などのリソース識別子が正確であることを確認します。 |
関連リソース
このパターンを正常に実装するには、次のリソースを確認してください。これらのリソースは、 を使用して AFT をセットアップおよび管理する際に貴重な追加情報とガイダンスを提供します AWS CloudFormation。
AWS ドキュメント:
AWS Control Tower ユーザーガイドには、 の設定と管理に関する詳細情報が記載されています AWS Control Tower。
AWS CloudFormation ドキュメントは、 CloudFormation テンプレート、スタック、リソース管理に関するインサイトを提供します。
IAM ポリシーとベストプラクティス:
IAM のセキュリティのベストプラクティスでは、IAM ロールとポリシーを使用して AWS リソースを保護する方法について説明します。
の Terraform AWS:
Terraform AWS Provider ドキュメント
には、 での Terraform の使用に関する包括的な情報が記載されています AWS。
AWS のサービス クォータ:
AWS のサービス クォータには、 AWS のサービス クォータの表示方法と引き上げをリクエストする方法に関する情報が記載されています。