

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

# Terraform を使用してエンタープライズ規模で一元化されたログ記録を設定する
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform"></a>

*Amazon Web Services、Aarti Rajput、Yashwant Patel、Nishtha Yadav*

## 概要
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-summary"></a>

一元化されたログ記録は、組織のクラウドインフラストラクチャにとって不可欠です。これにより、組織の運用、セキュリティ、コンプライアンスを可視化できるためです。組織が複数のアカウントにまたがって AWS 環境をスケールするにつれて、構造化ログ管理戦略は、セキュリティ運用の実行、監査要件を満たすこと、運用上の優秀性を達成するための基本となります。

このパターンは、複数の AWS アカウント および サービスからのログを一元化するためのスケーラブルで安全なフレームワークを提供し、複雑な AWS デプロイ全体でエンタープライズ規模のログ記録管理を可能にします。このソリューションは、Terraform を使用して自動化されます。Terraform は HashiCorp の Infrastructure as Code (IaC) ツールであり、一貫性のある反復可能なデプロイを保証し、手動設定を最小限に抑えます。Amazon CloudWatch Logs、Amazon Data Firehose、Amazon Simple Storage Service (Amazon S3) を組み合わせることで、以下を実現する堅牢なログ集約と分析パイプラインを実装できます。
+ での組織全体の一元化されたログ管理 AWS Organizations
+ 組み込みのセキュリティコントロールを使用した自動ログ収集
+ スケーラブルなログ処理と耐久性のあるストレージ
+ シンプルなコンプライアンスレポートと監査証跡
+ リアルタイムの運用に関するインサイトとモニタリング

このソリューションは、CloudWatch Logs を介して Amazon Elastic Kubernetes Service (Amazon EKS) コンテナ、 AWS Lambda 関数、Amazon Relational Database Service (Amazon RDS) データベースインスタンスからログを収集します。CloudWatch サブスクリプションフィルターを使用して、これらのログを専用のログ記録アカウントに自動的に転送します。Firehose は、Amazon S3 への高スループットのログストリーミングパイプラインを管理し、長期保存を可能にします。Amazon Simple Queue Service (Amazon SQS) は、オブジェクトの作成時に Amazon S3 イベント通知を受信するように設定されています。これにより、以下を含む分析サービスとの統合が可能になります。
+ ログ検索、視覚化、リアルタイム分析のための Amazon OpenSearch Service
+ SQL ベースクエリ用の Amazon Athena
+ 大規模な処理のための Amazon EMR
+ カスタム変換のための Lambda
+ ダッシュボード用の Amazon Quick Sight

すべてのデータは AWS Key Management Service (AWS KMS) を使用して暗号化され、インフラストラクチャ全体が Terraform を使用して環境間で一貫した設定でデプロイされます。

この一元的なログ記録アプローチにより、組織はセキュリティ体制を改善し、コンプライアンス要件を維持し、 AWS インフラストラクチャ全体の運用効率を最適化できます。

## 前提条件と制限
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-prereqs"></a>

**前提条件**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) を使用して構築された組織のランディングゾーン
+ 必要なアカウントでデプロイおよび設定された [Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html)
+ インフラストラクチャをプロビジョニングするための [Terraform](https://developer.hashicorp.com/terraform/downloads)
+ クロスアカウントアクセス用の [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) ロールとポリシー

アカウント AWS Control Tower、AFT、およびアプリケーションアカウントを設定する手順については、[「エピック」セクション](#set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics)を参照してください。

**必要なアカウント**

の組織には、次のアカウントを含める AWS Organizations 必要があります。
+ **アプリケーションアカウント** – AWS のサービス (Amazon EKS、Lambda、Amazon RDS) が実行され、ログを生成する 1 つ以上のソースアカウント
+ **ログアーカイブアカウント** – 一元化されたログの保管と管理を行うための専用アカウント

**製品バージョン**
+ [AWS Control Tower バージョン 3.1](https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#lz-3-1) 以降
+ [Terraform バージョン 0.15.0](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) 以降

## アーキテクチャ
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-architecture"></a>

次の図は、複数のアプリケーションアカウントから専用のログアーカイブアカウントにログを収集、処理、保存するためのスケーラブルなソリューションを提供する一 AWS 元的なログ記録アーキテクチャを示しています。このアーキテクチャは AWS のサービス、Amazon RDS、Amazon EKS、Lambda などの からのログを効率的に処理し、合理化されたプロセスを通じて Log Archive アカウントのリージョン S3 バケットにルーティングします。

![\[複数のアプリケーションアカウントからログを収集する AWS の一元化されたログ記録アーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/9fc71a10-65d6-437b-9128-cc27bda11af4/images/2e916040-0f11-4712-a8dd-31c95194ce5d.png)


ワークフローには 5 つのプロセスが含まれます。

1. **ログフロープロセス**
   + ログフロープロセスはアプリケーションアカウントで開始されます。アプリケーションアカウントでは、一般ログ、エラーログ、監査ログ、Amazon RDS からのスロークエリログ、Amazon EKS からのコントロールプレーンログ、Lambda からの関数の実行ログとエラーログなど、さまざまなタイプのログ AWS のサービス が生成されます。
   + CloudWatch は最初の収集ポイントとして機能します。これらのログは、各アプリケーションアカウント内のロググループレベルで収集されます。
   + CloudWatch では、[サブスクリプションフィルター](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html)によって、中央アカウントに転送するログを判断します。これらのフィルターを使用すると、ログ転送をきめ細かく制御できるため、正確なログパターンや完全なログストリームを指定して一元化できます。

1. **クロスアカウントログ転送**
   + ログはログアーカイブアカウントに移動します。CloudWatch サブスクリプションフィルターによって、クロスアカウント転送が容易になり、リージョンコンテキストが保持されます。
   + このアーキテクチャは、さまざまなログソースを効率的に処理するために複数の並列ストリームを確立して、最適なパフォーマンスとスケーラビリティを確保します。

1. **ログアーカイブアカウントでのログ処理**
   + ログアーカイブアカウントでは、Firehose が受信ログストリームを処理します。
   + 各リージョンは、必要に応じてログを変換、または強化できる専用の Firehose 配信ストリームを維持します。
   + これらの Firehose ストリームは、データ主権要件を維持するために、ソースアプリケーションアカウント (図のリージョン A) と同じリージョンにあるログアーカイブアカウントの S3 バケットに処理されたログを配信します。

1. **通知と追加のワークフロー**
   + ログが宛先の S3 バケットに到達すると、アーキテクチャは Amazon SQS を使用して通知システムを実装します。
   + リージョン SQS キューは、非同期処理を有効にし、保存されたログに基づいて追加のワークフロー、分析、またはアラートシステムをトリガーできます。

1. **AWS KMS セキュリティ用**

   このアーキテクチャには、セキュリティ AWS KMS のために が組み込まれています。 は S3 バケットの暗号化キー AWS KMS を提供します。これにより、保存されているすべてのログが保存中の暗号化を維持するとともに、リージョンでの暗号化を保つことで、データレジデンシー要件を満たすことが保証されます。

## ツール
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-tools"></a>

**AWS のサービス**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) は、ログ、メトリクス、イベントの形式でモニタリングおよび運用データを収集するモニタリングおよびオブザーバビリティサービスです。AWS サーバーとオンプレミスサーバーで実行される AWS リソース、アプリケーション、サービスの統合ビューを提供します。
+ [CloudWatch Logs サブスクリプションフィルター](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html)は、受信ログイベントのパターンに一致し、一致するログイベントを指定された AWS リソースに配信して、さらなる処理または分析を行う式です。
+ [AWS Control Tower Account Factory For Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) は、アカウントのプロビジョニングとカスタマイズに役立つ Terraform パイプラインを設定します AWS Control Tower。AFT は Terraform ベースのアカウントプロビジョニングを提供し、アカウントを管理できるようにします AWS Control Tower。
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) は、Amazon S3、Amazon Redshift、Amazon OpenSearch Service などの送信先にリアルタイムのストリーミングデータを配信します。これはデータのスループットに合わせて自動的に拡張し、継続的な管理作業は不要です。
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) は、Kubernetes を使用してコンテナ化されたアプリケーションのデプロイ、管理、スケーリングを容易にするマネージドコンテナオーケストレーションサービスです。Kubernetes コントロールプレーンノードの可用性とスケーラビリティを自動で管理します。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) は、データを暗号化するための暗号化キーを作成および制御します。 は、他の と AWS KMS 統合 AWS のサービス して、これらのサービスで保存するデータを保護します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理をする必要なくコードを実行できるサーバーレスコンピューティングサービスです。各トリガーに応じてコードを実行することでアプリケーションを自動でスケーリングします。使用したコンピューティング時間に対してのみ料金が発生します。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) は、クラウドでリレーショナルデータベースを簡単にセットアップし、運用し、スケーリングすることのできるマネージドリレーショナルデータベースです。時間のかかる管理タスクを自動化しながら、コスト効率が高くサイズ変更可能な容量を提供します。
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) は、マイクロサービス、分散システム、およびサーバーレスアプリケーションの疎結合化とスケールを可能にするメッセージキューイングサービスです。メッセージ指向ミドルウェアの管理と運用の複雑さを解消します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、スケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するクラウドベースのオブジェクトストレージサービスです。ウェブ上の任意の場所から、任意の量のデータを保存および取得できます。

**その他のツール**
+ [Terraform](https://www.terraform.io/) は HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。

**Code**

このパターンのコードは GitHub 内の [Centralized logging](https://github.com/aws-samples/sample-centralised-logging-at-enterprise-scale-using-terraform) リポジトリで入手できます。

## ベストプラクティス
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-best-practices"></a>
+ [の 1 つの組織 AWS アカウント で複数の を使用します AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts.html)。この方法により、アカウント間で一元的な管理と標準化されたログ記録が可能になります。
+ [S3 バケットのバージョニング、ライフサイクルポリシー、クロスリージョンレプリケーション](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)を設定します。セキュリティとコンプライアンスのため、暗号化とアクセスのログ記録を実装します。
+ 標準のタイムスタンプとフィールドを含む、[JSON 形式を使用した一般的なログ記録標準](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html)を実装します。追跡と分析を容易にするために、一貫したプレフィックス構造と相関 ID を使用します。
+ [AWS KMS 暗号化と最小特権アクセスを使用してセキュリティコントロール](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)を有効にします。セキュリティを強化するために、 AWS CloudTrail モニタリングと定期的なキーローテーションを維持します。
+ 配信追跡用の [CloudWatch メトリクスとアラート](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)を設定します。自動通知を使用してコストとパフォーマンスをモニタリングします。
+ コンプライアンス要件を満たすように [Amazon S3 保持ポリシー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)を設定し、Amazon S3 サーバーアクセスログ記録を有効にして、S3 バケットに対して行われたすべてのリクエストを追跡します。S3 バケットポリシーとライフサイクルルールのドキュメントを維持管理します。アクセスログ、バケットのアクセス許可、ストレージ設定を定期的に見直して、コンプライアンスと[セキュリティのベストプラクティス](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)を確保します。

## エピック
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics"></a>

### セットアップ AWS Control Tower、AFT、およびアプリケーションアカウント
<a name="set-up-ctowerlong-aft-and-application-accounts"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AFT を使用して AWS Control Tower 環境をセットアップします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | AWS 管理者 | 
| 組織のリソース共有を有効にします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | AWS 管理者 | 
| アプリケーションアカウントを検証またはプロビジョニングします。 | ユースケース用に新しいアプリケーションアカウントをプロビジョニングするには、AFT を介してアカウントを作成します。詳細については、 AWS Control Tower ドキュメント[の「AFT を使用して新しいアカウントをプロビジョニング](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html)する」を参照してください。 | AWS 管理者 | 

### アプリケーションアカウントの設定ファイルを設定する
<a name="set-up-configuration-files-for-application-accounts"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| `Application_account` フォルダの内容を `aft-account-customizations` リポジトリにコピーします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 
| アプリケーションアカウントを設定するための入力パラメータを確認して編集します。 | このステップでは、CloudWatch ロググループ、CloudWatch サブスクリプションフィルター、IAM ロールとポリシー、Amazon RDS、Amazon EKS、Lambda 関数の設定詳細など、アプリケーションアカウントにリソースを作成するための設定ファイルを設定します。`aft-account-customizations` リポジトリの `Application_account` フォルダで、組織の要件に基づいて `terraform.tfvars` ファイルの入力パラメータを設定します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 

### ログアーカイブアカウントの設定ファイルを設定する
<a name="set-up-configuration-files-for-the-log-archive-account"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| `Log_archive_account` フォルダの内容を `aft-account-customizations` リポジトリにコピーします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 
| ログアーカイブアカウントを設定するための入力パラメータを確認して編集します。 | このステップでは、Firehose 配信ストリーム、S3 バケット、SQS キュー、IAM ロールとポリシーなど、ログアーカイブアカウントにリソースを作成するための設定ファイルを設定します。`aft-account-customizations` リポジトリの `Log_archive_account` フォルダで、組織の要件に基づいて `terraform.tfvars` ファイルの入力パラメータを設定します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 

### Terraform コマンドを実行してリソースをプロビジョニングする
<a name="run-terraform-commands-to-provision-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| オプション 1 – AFT から Terraform 設定ファイルをデプロイします。 | AFT では、設定変更を含むコードを GitHub `aft-account-customizations` リポジトリにプッシュすると、AFT パイプラインがトリガーされます。AFT は変更を自動的に検出し、アカウントのカスタマイズプロセスを開始します。Terraform (`terraform.tfvars`) ファイルに変更を加えたら、変更をコミットして `aft-account-customizations` リポジトリにプッシュします。<pre>$ git add *<br />$ git commit -m "update message"<br />$ git push origin main</pre>別のブランチ (`dev` など) を使用している場合は、`main` をブランチ名に置き換えます。 | DevOps エンジニア | 
| オプション 2 – Terraform 設定ファイルを手動でデプロイします。 | AFT を使用していない場合、またはソリューションを手動でデプロイする場合は、`Application_account` および `Log_archive_account` フォルダから次の Terraform コマンドを使用できます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 

### リソースを検証する
<a name="validate-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| サブスクリプションフィルターを検証します。 | サブスクリプションフィルターがアプリケーションアカウントのロググループからログアーカイブアカウントにログを正しく転送することを検証するには、以下の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 
| Firehose ストリームを確認します。 | ログアーカイブアカウントの Firehose ストリームがアプリケーションログを正常に処理することを確認するには、以下の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 
| 一元化された S3 バケットを検証します。 | 一元化された S3 バケットがログを適切に受信して整理することを確認するには、以下の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 
| SQS キューを検証します。 | SQS キューが新しいログファイルの通知を受信することを確認するには、以下の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 

### リソースをクリーンアップする
<a name="clean-up-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| オプション 1 – AFT から Terraform 設定ファイルを削除します。 | Terraform 設定ファイルを削除して変更をプッシュすると、AFT は自動的にリソース削除プロセスを開始します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 
| オプション 2 – Terraform リソースを手動でクリーンアップします。 | AFT を使用していない場合、またはリソースを手動でクリーンアップする場合は、`Application_account` および `Log_archive_account` フォルダから次の Terraform コマンドを使用します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps エンジニア | 

## トラブルシューティング
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| CloudWatch Logs の送信先が作成されていないか、非アクティブです。 | 以下を確認してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| サブスクリプションフィルターが失敗した、または保留中のステータスのままです。 | 以下をチェックしてください:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Firehose 配信ストリームに受信レコードが表示されません。 | 以下について確認します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 

## 関連リソース
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-resources"></a>
+ [Terraform infrastructure setup](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) (Terraform ドキュメント)
+ [Account AWS Control Tower Factory for Terraform (AFT) をデプロイ](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html)する (AWS Control Tower ドキュメント)
+ [IAM チュートリアル: IAM ロール AWS アカウント を使用して 全体でアクセスを委任](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)する (IAMdocumentation)