概要

Control Tower をセットアップすると、ログ集約用のアカウント(ログアーカイブアカウント)が自動的に作成され、その中にS3バケットがプロビジョニングされます。このS3バケットには、デフォルトでライフサイクルルール(RetentionRule)が設定されており、組織全体の CloudTrail ログや Config ログが集約されます。
今回は、この Control Tower が管理するログアーカイブ用 S3 バケットのライフサイクルルールを変更することが可能かどうかを調査しました。

調査結果

調査の結果、Control Tower が管理するログアーカイブ用 S3 バケットのライフサイクルルールに関して、以下の点が判明しました。

  • オブジェクトのストレージクラスの移行設定
    • Control Tower コンソールからの変更機能は提供されておらず、基盤となる CloudFormation スタックセットのパラメータ値を直接変更しても恒久的な変更はできません(詳細は後述)。
  • オブジェクトの保存日数の設定
    • Control Tower コンソールから変更可能です。
項目 変更可否 変更方法 / 備考
オブジェクトのストレージクラスの移行設定 不可 (※恒久的な変更) CloudFormation を直接変更しても、ランディングゾーン更新時に設定がリセットされる
オブジェクトの保存日数の設定 可能 Control Tower コンソールから保存日数を変更

S3ライフサイクルルールについて

S3 ライフサイクルルールは、Amazon S3 の機能の一つで、オブジェクトのライフサイクルを管理するために使用されます。主な機能は以下の通りです。

  • ストレージクラスの移行
    • オブジェクトを、アクセス頻度やコストに応じて異なるストレージクラス(例: S3 標準から S3 Glacier Flexible Retrieval へ)に自動的に移動させる。
  • オブジェクトの削除
    • 指定した期間が経過したオブジェクトを自動的に削除する。

これにより、ストレージコストの最適化への対応が可能になります。Control Tower が作成するバケットでは、デフォルトで S3 標準ストレージクラスが使用されています。

調査の詳細

Control Tower が作成するログアーカイブ用 S3 バケットと関連リソースは、管理アカウントの AWS CloudFormation スタックセット AWSControlTowerLoggingResources によって管理されています。このスタックセットのテンプレートを確認すると、ライフサイクルルールに関連する以下のパラメータが定義されていることが分かります(デフォルト値)。

パラメータ名 デフォルト値 説明
RetentionDays 180 ログの保持期間(日数)
RetentionDaysForAccessLogs 180 S3 アクセスログの保持期間(日数)
TransitionDays 90 低頻度アクセスストレージクラス(IA)などへの移行を開始するまでの日数
TransitionToGlacier No S3 Glacier Flexible Retrieval ストレージクラスへの移行有無(No: 移行しない)

これらのパラメータが存在するため、スタックセットのパラメータ値を変更して更新すれば、ライフサイクルルールをカスタマイズできるのではないかと考えました。実際にパラメータを変更してスタックセットを更新したところ、一時的には S3 バケットのライフサイクルルールが変更されることを確認できました。

しかし、この方法には後述する重要な注意点が存在します。

注意点:Control Tower 管理リソースの変更について

前述の方法で CloudFormation パラメータを変更することは可能ですが、以下の理由から推奨されず、恒久的な解決策とはなりません。

  1. Control Tower 管理リソース変更の非推奨
    AWS の公式ドキュメントには、以下のガイダンスが記載されています。

AWS Control Tower によって作成されたリソースを変更または削除しないでください。

  1. ランディングゾーン更新による設定のリセット
    Control Tower の重要な操作の一つに「ランディングゾーンの更新」があります。この操作を実行すると、Control Tower は管理下の環境(OU 構成、ガードレール、共有アカウントのリソースなど)を最新のベストプラクティスや設定に準拠させようとします。このプロセスの一環として、AWSControlTowerLoggingResources などの CloudFormation スタックセットが Control Tower のデフォルト設定に基づいて再デプロイされることがあります。
    実際に、CloudFormation パラメータを直接変更してライフサイクルルールをカスタマイズした後、ランディングゾーンの更新を実行したところ、変更した設定がリセットされ、元のデフォルト状態に戻ってしまうことを確認しました。
    現状、Control Tower のコンソールからライフサイクルルールのストレージクラス移行を設定する機能は提供されていません。また、公式ドキュメントなどを調査しましたが、ランディングゾーン更新後も CloudFormation パラメータの変更を永続的に保持する方法は見当たりませんでした。

まとめ

今回、AWS Control Tower が自動作成するログアーカイブ用 S3 バケットのライフサイクルルールを変更できるか調査しました。

結論として、以下の通りです。

  • オブジェクトの保存日数の変更
    • Control Tower コンソールからサポートされており、変更可能です。
  • オブジェクトのストレージクラスの移行設定
    • Control Tower コンソールからの変更はサポートされていません。基盤となる CloudFormation スタックセットのパラメータを直接変更することで一時的な設定変更は可能ですが、ランディングゾーンの更新時に設定がリセットされてしまうため、恒久的な変更はできません。また、Control Tower の管理外でのリソース変更は非推奨です。

ストレージコスト最適化のためにストレージクラス移行を行いたい場合は、Control Tower の今後のアップデートを待つか、Control Tower の管理外で別途ログを転送・処理する仕組みを検討する必要があります。

参考