【AWSセキュリティ】CloudTrailのログ保全に関するIAMポリシー

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

よく訓練されたアップル信者、都元です。CloudTrailは、AWS APIの全ての呼び出しについて、それを行った主体(principal≒ユーザ)やIPアドレス、リクエストやレスポンスの詳細を記録し、そのログをS3に出力してくれるサービスです。このサービスがあることにより、不正アクセスがあった場合の追跡が可能になります。また「記録されているから悪事は働けない」という心理的な予防効果も期待できます。

CloudTrail自体を狙われる危険性

しかし、この証跡ログはS3のバケットにファイルとして配信されるため、悪意のあるユーザによる証拠の隠滅の可能性を考慮しなければなりません。

まず、全リージョンでCloudTrailを有効にした後は、CloudTrail自体の停止を禁止する必要があります。そんなポリシーステートメントはこちら。CloudTrailへの状態変更を行うアクションについては明示的に禁止してしまいます。

    {
      "Effect": "Deny",
      "Action": [
        "cloudtrail:CreateTrail",
        "cloudtrail:DeleteTrail",
        "cloudtrail:StartLogging",
        "cloudtrail:StopLogging",
        "cloudtrail:UpdateTrail"
      ],
      "Resource": "*"
    }

次に、配信されてくるログの削除や上書きも禁止する必要があります。弊社では、CloudTrailのログ配信バケットはcloudtrail-リージョン名-AWSアカウントIDという命名規則とする方針を固めてありますので、その場合は下記のようなポリシーステートメントを使います。

    {
      "Effect": "Deny",
      "Action": [
        "s3:Put*",
        "s3:Delete*"
      ],
      "Resource": [
        "arn:aws:s3:::cloudtrail-*",
        "arn:aws:s3:::cloudtrail-*/*"
      ]
    }

簡単ですが、以上2つのポリシーステートメントを、全てのユーザに対して適用します。Administratorアカウントについても例外ではありません。全てのユーザに適用しておくべきです。確かに、AdministratorAccess権限を持っていれば、そもそもここでご紹介したポリシーを削除してしまうことも可能なので、絶対的なものではありません。しかし、Administratorとは言え、通常削除してはならないものであるため、敢えてAdministratorを除外して適用する必要も無いと考えます。

まとめ

簡単ですが、まとめます。

  • CloudTrailのログ配信バケットの命名規則を規定しましょう。cloudtrail-リージョン名-AWSアカウントIDを推奨します。
  • AWSアカウントを作成したら、まずは全てのリージョンでCloudTrailを有効にしましょう。
  • CloudTrailの機能を停止できないようなポリシーを全員に適用しましょう。
  • CloudTrailのログを保護しましょう。削除・上書き(または偽のログのアップロード)を禁止してしまいます。
  • 以上のポリシーは、Administratorも含めて全員に適用しましょう。