SSE-KMS暗号化したCloudTrailログをSumo Logicに送信する

SSE-KMSで暗号化したCloudTrailの証跡ログをSumo Logicに送信する場合、キーポリシーでアクセス許可が必要です。さらにKMSをクロスアカウントで利用していた場合、ロールでKMSキーのアクセス許可が必要です。
2023.07.12

今回はAWSとSumo Logicとのログ連携の中で、SSE-KMS暗号化したCloudTrailログをSumo Logicに送信したいと思います。

構成としては以下のようになります。

Sumo LogicのCloudTrailソースの設定だけでは権限エラーになる

通常 S3 に保存したログを Sumo Logic に連携したい場合、下記のような手順で AWS に Sumo Logic からアクセスするためのロールを作成して、Sumo Logic からログをポーリングします。
※CloudTrail の場合、実際には AWS CloudTrail Source を設定する必要がありますが、下記の記事内での Source の選択を変えていただくだけでその他はほぼ同様の手順です。

ただし、SSE-KMSで CloudTrail のログを暗号化している場合、Collectionの設定でソースがエラーとなってしまい、ログを収集することができません。

エラーメッセージを確認するには、上記の画面の「Error」の部分をクリックして、詳細を確認していくことができます。

Health Events の画面でエラーの詳細を確認することができ、KMSキーのポリシーが原因かはメッセージだけではわかりませんがアクセス権限エラーとなっていることが分かります。

KMSキーポリシーでSumo Logicがアクセスするためのロールを許可する

KMSキーで CloudTrail 証跡を暗号化している場合、KMSキーポリシーにSumo Logicがアクセスするためのロールを許可してあげます。

公式ドキュメントでも、 こちらに記載されているので、参照して必要な設定を入れていきます。

AWSのKMSにログインして、CMSキーのキーポリシーを編集して以下のポリシーを追加します。

{
      "Sid": "Enable Sumo Logic S3 kms decrypt",
      "Effect": "Allow",
      "Principal": {
            "AWS": "<Sumo Logic がアクセスするためのロールのARN>"
      },
      "Action": "kms:decrypt",
      "Resource": "*"
}

「<Sumo Logic がアクセスするためのロールのARN>」は、前のCloudTrailソースの設定で作成されたロールを指定して上げる必要があります。
IAMから確認することも可能ですが、Sumo Logic コンソール内のCloudTrailソースの編集画面でARNを確認するのが簡単です。

Control Towerやマルチアカウント構成でSumo LogicがアクセスするためのロールとKMSがクロスアカウントのとき

下記のような構成の場合、KMSキーポリシーの設定に加え、S3アクセス用のロールでKMSキーのアクセス許可が必要です。(下記はControl Towerでのイメージです)

AWSのIAMにログインして、先程確認したS3アクセス用のロールに対して、KMSキーのアクセス許可を追加します。

{
      "Sid": "AllowUseOfKey",
      "Effect": "Allow",
      "Action": [
          "kms:Encrypt",
          "kms:Decrypt",
          "kms:ReEncrypt*",
          "kms:GenerateDataKey*",
          "kms:DescribeKey"
      ],
      "Resource": "<マスターアカウントのKMSキーのARN>"
}

下記参考:ステップ 2: 外部アカウントに IAM ポリシーを追加する

ログ収集の確認

ここまで設定してしばらくした後、再度Sumo LogicのCollectionを確認すると、ソースのヘルスチェックが緑色のHelthyになっていることが確認できます。

またその隣のボタンをクリックすると、ログ検索クエリが開き、CloudTrailのログが収集できていることも確認できました。

まとめ

SSE-KMSキーでCloudTrailの証跡を暗号化している場合、追加の設定が必要になります。
もし今回のようなエラーが出ていたら確認してみてください。