翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用した AWS Control Tower コントロールのデプロイと管理
作成者: Iker Reina Fuente (AWS) と Ivan Girardi (AWS)
コードリポジトリ: Terraform を使用して AWS Control Tower コントロールをデプロイおよび管理 | 環境:本稼働 | テクノロジー: セキュリティ、アイデンティティ、コンプライアンス CloudNative、インフラストラクチャ、管理、ガバナンス |
ワークロード: オープンソース | AWS サービス: AWS Control Tower、AWS組織 |
[概要]
このパターンでは、AWSControl Tower コントロール、 HashiCorp Terraform、Infrastructure as Code (IaC ) を使用して、予防、検出、プロアクティブセキュリティコントロールを実装および管理する方法を説明します。コントロール (ガードレール とも呼ばれます) は、AWSControl 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 Control Tower コントロールをデプロイAWSCDKおよび管理AWS CloudFormation」を参照してください。
ターゲットオーディエンス
このパターンは、AWSControl Tower、Terraform、および AWSOrganizations の使用経験があるユーザーに推奨されます。
前提条件と制限
前提条件
AWS Organizations と AWS Control Tower ランディングゾーンで組織として管理されるアクティブなAWSアカウント。手順については、「アカウント構造の作成
AWS」 ( Well-Architected Labs) を参照してください。 このパターンをデプロイするアクセス許可を持つ管理アカウントの AWS Identity and Access Management (IAM) ロール。必要なアクセス許可とサンプルポリシーの詳細については、このパターンの追加情報セクションのIAMロールの最小権限アクセス許可を参照してください。
管理アカウントのIAMロールを引き受けるアクセス許可。
識別子 CT を使用して、サービスコントロールポリシー (SCP) ベースのコントロールを適用します。 CLOUDFORMATIONPR.1。これは、プロアクティブコントロールをデプロイするためにアクティブ化SCPする必要があります。手順については、AWS CloudFormation 「レジストリ 内のリソースタイプ、モジュール、フックの管理の禁止」を参照してください。
Terraform CLI、インストール
済み (Terraform ドキュメント)。 Terraform AWS プロバイダー、設定
済み (Terraform ドキュメント)。 Terraform バックエンドを設定済み
(Terraform のドキュメント)
製品バージョン
AWS Control Tower バージョン 3.0 以降
Terraform バージョン 1.5 以降
Terraform AWS Provider バージョン 4.67 以降
アーキテクチャ
ターゲット アーキテクチャ
このセクションでは、このソリューションの概要と、サンプルコードによって確立されたアーキテクチャについて説明します。次の図は、OU 内のさまざまなアカウントに展開されるコントロールを示しています。
AWS Control Tower コントロールは、その動作とガイダンス に従って分類されます。
コントロールの動作には、主に 3 つのタイプがあります。
予防コントロールは、アクションの発生を防ぐように設計されています。これらは AWS Organizations のサービスコントロールポリシー (SCPs) で実装されます。予防コントロールのステータスは、適用または無効です。予防的コントロールはすべてのAWSリージョンでサポートされています。
Detective コントロールは、特定のイベントが発生したときに検出し、 でアクションを記録するように設計されています CloudTrail。これらは AWSConfig ルール で実装されます。検出コントロールのステータスは、クリア、違反、または無効です。検出コントロールは、AWSControl Tower でサポートされているAWSリージョンにのみ適用されます。
プロアクティブコントロールは、 によってプロビジョニングされるリソースをスキャンし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 エンジニア、一般 AWS、Terraform |
管理アカウントのIAMロールを引き受けます。 | 管理アカウントで、Terraform 設定ファイルをデプロイするアクセス許可を持つIAMロールを引き受けます。必要なアクセス許可とサンプルポリシーの詳細については、「追加情報」セクションのIAM「ロールの最小特権アクセス許可」を参照してください。でIAMロールを引き受ける方法の詳細についてはCLI、AWS「 でIAMロールを使用するCLIAWS」を参照してください。 | DevOps エンジニア、全般 AWS |
設定ファイルをデプロイします。 |
| DevOps エンジニア、一般 AWS、Terraform |
タスク | 説明 | 必要なスキル |
---|---|---|
破棄コマンドを実行します。 | 以下のコマンドを入力して、このパターンでデプロイされたリソースを削除します。
| DevOps エンジニア、一般 AWS、Terraform |
トラブルシューティング
問題 | ソリューション |
---|---|
| 有効化しようとするコントロールは、ターゲット OU で有効になっています。このエラーは、ユーザーが AWS マネジメントコンソール、AWSControl Tower、または AWS Organizations を介して手動でコントロールを有効にした場合に発生する可能性があります。Terraform 設定ファイルをデプロイするには、次のいずれかのオプションを使用できます。 オプション 1: Terraform の現在の状態ファイルを更新する Terraform の現在の状態ファイルにリソースをインポートできます。
オプション 2: コントロールを無効にする 実稼働以外の環境で作業している場合は、コンソールでコントロールを無効にできます。「エピック」セクションにある「設定のデプロイ」の手順を繰り返します。コントロールが無効になる期間があるため、このアプローチは実稼働環境にはお勧めしません。本番環境でこのオプションを使用する場合は、AWSOrganizations SCPで を一時的に適用するなど、一時的なコントロールを実装できます。 |
関連リソース
AWS ドキュメント
コントロールについて (AWS Control Tower ドキュメント)
コントロールライブラリ (AWS Control Tower ドキュメント)
および (AWS規範ガイダンス) を使用して AWS Control Tower コントロールをデプロイAWSCDKおよび管理しますAWS CloudFormation。
その他のリソース
追加情報
variables.tfvars ファイルの例
以下に、更新された variables.tfvars ファイルの例を示します。
controls = [ { control_names = [ "AWS-GR_ENCRYPTED_VOLUMES", ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ]
IAMロールの最小権限のアクセス許可
このAPGパターンでは、管理アカウントでIAMロールを引き受ける必要があります。一時的な権限を持つロールを割り当て、最小特権の原則に従って権限を制限するのがベストプラクティスです。次のサンプルポリシーでは、AWSControl 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": "*" } ] }