AWS Network FirewallのログをKMSで暗号化する

記事タイトルとURLをコピーする

こんにちは。エンタープライズクラウド部の本田です。
本日はAWS Network FirewallのログをKMSで暗号化する方法について検証した内容をご紹介します。

経緯

Network FirewallのログをKMSで暗号化したところ、Network Firewallでログ設定をしているのにログが出力されないことがありました。
結果、KMSキーの権限が足りていなかったのが原因でしたが、エラーが出ないため見落としがちな設定とも感じましたので、本記事で書き残しておきたいと思います。

AWS Network Firewallのログの出力先

AWS Network Firewallのログ出力先は以下の3つに設定可能です。

  • Amazon S3
  • CloudWatch Logs
  • Firehose

今回はAmazon S3に出力する場合を検証しました。

参考情報:AWS Network Firewall logging destinations - AWS Network Firewall

検証内容

Amazon S3の設定

ログ出力先であるAmazon S3を作成します。
S3バケットのデフォルトの暗号化設定をKMSのカスタマーマネージドキーで設定しました。

AWS Network Firewallの設定

AWS Network Firewallのログ設定を以下のように設定しました。
アラートログとフローログの出力先を先ほど作成したS3バケットに指定しました。
暗号化に関する設定項目はありませんでした。

動作確認

上記設定後、Network Firewallに通信を発生させましたが、S3バケットにログは出力されませんでした。

調査したところ、KMSカスタマーマネージドキーの権限設定が足りていないことがわかりました。

KMSキーの設定

S3バケットのデフォルト暗号化に指定したKMSのカスタマーマネージドキーに以下のキーポリシーを追記しました。
ログ配信サービスdelivery.logs.amazonaws.comにデータキーを生成してデータを暗号化することkms:GenerateDataKey*を許可しています。

{
    "Sid": "Allow Network Firewall to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": [
            "delivery.logs.amazonaws.com"
        ]
    },
    "Action": "kms:GenerateDataKey*",
    "Resource": "*"
}

参考情報:データキーの生成 - AWS Key Management Service

再び動作確認

KMSのキーポリシー設定後、Network Firewallに通信を発生させたところ、S3バケットにログが出力されることを確認できました。

まとめ

AWS Network FirewallのログをKMSで暗号化してS3バケットに保存するには以下の設定が必要でした。

  • AWS Network Firewallのログ出力を設定
  • KMSでの暗号化設定
    • ログ出力先のS3バケットのデフォルト暗号化をKMSカスタマーマネージドキーで設定
    • S3バケットに設定したKMSカスタマーマネージドキーのキーポリシーにてログ配信サービスからデータキーを作成する権限を許可

NetworkFirewallのログ出力の設定自体には暗号化を指定する箇所はなく、今回S3バケットのデフォルトの暗号化設定でKMSカスタマーマネージドキーを設定したように、ログ出力先で必要に応じて暗号化形式を設定する必要があります。
加えて、NetworkFirewallログからKMSカスタマーマネージドキーを使えるようにキーポリシーで必要な権限を許可してあげることも必要でした。

ちなみに公式ドキュメントを確認すると、AWS Network Firewallは、AWS によって管理される AWS Key Management Service キーの暗号化をサポートしていない旨の記載がありました。

ネットワーク ファイアウォールは、キー タイプ Amazon S3 キー (SSE-S3) および AWS Key Management Service (SSE-KMS) AWS KMS キーの Amazon S3 バケットによる暗号化をサポートしています。ネットワーク ファイアウォールは、AWS によって管理される AWS Key Management Service キーの暗号化をサポートしていません。

そのほか、CloudWatch LogsやFirehoseでKMSカスタマーマネージドキーを使って暗号化したい場合については、以下のAWSドキュメントをご参照ください。

参考情報:Logging with server-side encryption and customer-provided keys - AWS Network Firewall

今回はNetworkFirewallのログをKMSで暗号化を検証しましたが、他のサービスで暗号化にKMSカスタマーマネージドキーを使用する場合も、同じようにKMSキー側のキーポリシーへの権限が必要になるかと思いますので、忘れないようにしたいですね。

本田 みかん (記事一覧)