翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用した AWS Control Tower コントロールのデプロイと管理
作成者: Iker Reina Fuente (AWS) と Ivan Girardi (AWS)
概要
このパターンでは、 AWS Control Tower コントロール、 HashiCorp Terraform、Infrastructure as Code (IaC) を使用して、予防、検出、プロアクティブセキュリティコントロールを実装および管理する方法を説明します。コントロール (ガードレールとも呼ばれます) は、 AWS Control Tower 環境全体に継続的なガバナンスを提供する高レベルのルールです。例えば、コントロールを使用して のログ記録を要求し AWS アカウント 、特定のセキュリティ関連のイベントが発生した場合に自動通知を設定できます。
AWS Control Tower は、 AWS リソースを管理し、複数の にわたるコンプライアンスをモニタリングする予防、検出、プロアクティブコントロールを実装するのに役立ちます AWS アカウント。各コントロールは、1 つのルールを適用します。このパターンでは、提供された IaC テンプレートを使用して、環境にデプロイするコントロールを指定します。
AWS Control Tower コントロールは組織単位 (OU) 全体に適用され、コントロールは OU AWS アカウント 内のすべての に影響します。したがって、ユーザーがランディングゾーン内の任意のアカウントで作業を実行する場合、アクションは OU に適用されるコントロールに従います。
AWS Control Tower コントロールを実装することで、 AWS ランディングゾーンの強力なセキュリティ基盤を確立できます。このパターンを使用してコントロールを Terraform IaC としてデプロイすることで、ランディングゾーンでのコントロールを標準化し、より効率的にデプロイして管理できます。
AWS Control Tower コントロールを IaC としてデプロイするには、Terraform AWS Cloud Development Kit (AWS CDK) の代わりに を使用することもできます。詳細については、「 AWS CDK と を使用して AWS Control Tower コントロールをデプロイおよび管理する AWS CloudFormation」を参照してください。
対象者
このパターンは AWS Control Tower、、Terraform、および の使用経験があるユーザーに推奨されます AWS Organizations。
前提条件と制限
前提条件
AWS Organizations の組織および AWS Control Tower ランディングゾーンとして AWS アカウント 管理されているアクティブ。手順については、 AWS Control Tower ドキュメントの「開始方法」を参照してください。
このパターンをデプロイするアクセス許可を持つ管理アカウントの AWS Identity and Access Management (IAM) ロール。必要なアクセス許可とサンプルポリシーの詳細については、このパターンの「追加情報」セクションのIAM「ロールの最小特権のアクセス許可」を参照してください。
管理アカウントでIAMロールを引き受けるアクセス許可。
識別子 CT を使用して、サービスコントロールポリシー (SCP) ベースのコントロールを適用します。 CLOUDFORMATIONPR.1。これは、プロアクティブコントロールをデプロイするためにアクティブ化SCPする必要があります。手順については、AWS CloudFormation 「レジストリ内のリソースタイプ、モジュール、フックの管理を禁止する」を参照してください。
Terraform CLIがインストールされました
(Terraform ドキュメント)。 Terraform AWS Provider、設定
済み (Terraform ドキュメント)。 Terraform バックエンドを設定済み
(Terraform のドキュメント)
制約事項
製品バージョン
AWS Control Tower バージョン 3.2 以降
Terraform バージョン 1.5 以降
Terraform AWS Provider バージョン 4.67 以降
アーキテクチャ
このセクションでは、このソリューションの概要と、サンプルコードによって確立されたアーキテクチャについて説明します。次の図は、OU 内のさまざまなアカウントに展開されるコントロールを示しています。

AWS Control Tower コントロールは、その動作とガイダンスに従って分類されます。
コントロールの動作には、主に 3 つのタイプがあります。
予防コントロールは、アクションの発生を防ぐように設計されています。これらは、 のサービスコントロールポリシー (SCPs) またはリソースコントロールポリシー (RCPs) で実装されます AWS Organizations。予防コントロールのステータスは、適用または無効です。予防コントロールはすべての でサポートされています AWS リージョン。
検出コントロールは、特定のイベントが発生したときに検出し、アクションをログに記録するように設計されています AWS CloudTrail。これらは AWS Config ルールで実装されます。検出コントロールのステータスは、クリア、違反、または無効です。検出コントロールは、 で AWS リージョン サポートされているコントロールにのみ適用されます AWS Control Tower。
プロアクティブコントロールは、 によってプロビジョニングされるリソースをスキャンし AWS CloudFormation 、会社のポリシーと目標に準拠しているかどうかを確認します。準拠していないリソースはプロビジョニングされません。これらはフックでAWS CloudFormation 実装されます。プロアクティブコントロールのステータスは、PASS、FAIL、または ですSKIP。
コントロールガイダンスは、各コントロールを に適用する方法の推奨プラクティスですOUs。 AWS Control Tower は、必須、強く推奨、選択的の 3 つのカテゴリのガイダンスを提供します。コントロールのガイダンスは、コントロールの動作とは無関係です。詳細については、「コントロールの動作とガイダンス」を参照してください。
ツール
AWS のサービス
AWS CloudFormation は、 AWS リソースの設定、迅速かつ一貫したプロビジョニング、および AWS アカウント リージョン間のライフサイクル全体の管理に役立ちます。
AWS Config は、 内のリソース AWS アカウント の詳細と、それらの設定方法を提供します。リソースがどのように相互に関連しているか、またそれらの構成が時間の経過とともにどのように変化したかを特定するのに役立ちます。
AWS Control Tower は、規範的なベストプラクティスに従って、 AWS マルチアカウント環境をセットアップして管理するのに役立ちます。
AWS Organizations は、作成して一元管理する AWS アカウント 組織に複数の を統合するのに役立つアカウント管理サービスです。
その他のツール
HashiCorp Terraform
はオープンソースのInfrastructure as Code (IaC) ツールで、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングおよび管理できます。
コードリポジトリ
このパターンのコードは、 GitHub Terraform リポジトリを使用して AWS Control Tower コントロールをデプロイおよび管理できます
ベストプラクティス
このソリューションをデプロイするために使用されるIAMロールは、最小特権の原則 (IAM ドキュメント) に従う必要があります。
AWS Control Tower 管理者向けのベストプラクティス (AWS Control Tower ドキュメント) に従ってください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
リポジトリをクローン作成します。 | bash シェルで、次のコマンドを入力します。これにより、Terraform リポジトリを使用して、デプロイおよび管理 AWS Control Tower コントロールの
| DevOps エンジニア |
Terraform バックエンド設定ファイルを編集します。 |
| DevOps エンジニア、Terraform |
Terraform プロバイダー設定ファイルを編集します。 |
| DevOps エンジニア、Terraform |
設定ファイルを編集します。 |
| DevOps engineer、GeneralAWS、Terraform |
管理アカウントのIAMロールを引き受けます。 | 管理アカウントで、Terraform 設定ファイルをデプロイする権限を持つIAMロールを引き受けます。必要なアクセス許可とサンプルポリシーの詳細については、「追加情報」セクションのIAM「ロールの最小特権のアクセス許可」を参照してください。での IAMロールの引き受けの詳細については AWS CLI、「」の「 IAMロールを使用する AWS CLI」を参照してください。 | DevOps エンジニア、一般 AWS |
設定ファイルをデプロイします。 |
| DevOps engineer、GeneralAWS、Terraform |
タスク | 説明 | 必要なスキル |
---|---|---|
| 以下のコマンドを入力して、このパターンでデプロイされたリソースを削除します。
| DevOps engineer、GeneralAWS、Terraform |
トラブルシューティング
問題 | ソリューション |
---|---|
| 有効化しようとするコントロールは、ターゲット OU で有効になっています。このエラーは、ユーザーが 、 AWS Management Console、 AWS Control Tower または を介してコントロールを手動で有効にした場合に発生する可能性があります AWS Organizations。Terraform 設定ファイルをデプロイするには、次のいずれかのオプションを使用できます。 オプション 1: Terraform の現在の状態ファイルを更新する Terraform の現在の状態ファイルにリソースをインポートできます。
オプション 2: コントロールを無効にする 実稼働以外の環境で作業している場合は、コンソールでコントロールを無効にできます。エピックセクションの設定をデプロイするのステップを繰り返して、再度有効にします。コントロールが無効になる期間があるため、このアプローチは実稼働環境にはお勧めしません。本番稼働環境でこのオプションを使用する場合は、 を一時的に適用するなどの一時的なコントロールを実装できますSCP AWS Organizations。 |
関連リソース
AWS ドキュメント
コントロールについて (AWS Control Tower ドキュメント)
コントロールライブラリ (AWS Control Tower ドキュメント)
AWS CDK と を使用して AWS Control Tower コントロールをデプロイおよび管理 AWS CloudFormation (AWS 規範ガイダンス)
その他のリソース
追加情報
variables.tfvars ファイルの例
以下に、更新された variables.tfvars ファイルの例を示します。このサンプルでは、AWS-GR_ENCRYPTED_VOLUMES コントロール (グローバル ID: 503uicglhjkokaajywfpt6ros
) と AWS-GR_SUBNET_AUTO_ASSIGNPUBLIC_IP_DISABLED コントロール (グローバル ID: ) を有効にします50z1ot237wl8u1lv5ufau6qqo
。グローバル のリストについてはIDs、 AWS Control Tower ドキュメントの「すべてのグローバル識別子」を参照してください。
controls = [ { control_names = [ "503uicglhjkokaajywfpt6ros", ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "50z1ot237wl8u1lv5ufau6qqo", ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ]
IAMロールの最小特権のアクセス許可
このパターンでは、管理アカウントで IAMロールを引き受ける必要があります。一時的な権限を持つロールを割り当て、最小特権の原則に従って権限を制限するのがベストプラクティスです。次のサンプルポリシーでは、 AWS Control Tower コントロールを有効または無効にするために必要な最小限のアクションを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "controltower:EnableControl", "controltower:DisableControl", "controltower:GetControlOperation", "controltower:ListEnabledControls", "organizations:AttachPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:DescribeOrganization", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy" ], "Resource": "*" } ] }