こんにちは。エンタープライズクラウド部の本田です。
本日は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キー側のキーポリシーへの権限が必要になるかと思いますので、忘れないようにしたいですね。
本田 みかん (記事一覧)