継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ALB アクセスログの格納時の暗号化は KMS カスタマキーで行えるのか?

タダです.

ALB のアクセスログを暗号化する時にドキュメントでは SSE-S3 がサポートされていると書いているが,実際 KMS のカスタマーキーではできないかを調べて見る機会があり,その備忘録をこの記事にまとめます.

サポートされている唯一のサーバー側の暗号化オプションは、Amazon S3 マネージドキー (SSE−S3) です。詳細については、 「 Amazon S3 マネージド暗号化キー (SSE-S3)」を参照してください。

docs.aws.amazon.com

検証した KMS ポリシーと検証設定概要

検証は以下の KMS ポリシーで設定して,S3 バケットにもカスタマキーを設定しました.IAM の権限があれば KMS の全権限があるのに加え,ELB のサービスプリンシパルと KMS の暗号化・復号化を東京リージョンの ELB で許可する意図の設定を行いました.

{
    "Version": "2012-10-17",
    "Id": "key-consolepolicy",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "elasticloadbalancing.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "elasticloadbalancing.ap-northeast-1.amazonaws.com"
                }
            }
        }
    ]
}

S3 バケットの暗号化セクション

アクセスログに出力されるかの確認

KMS カスタマキーを先にS3 バケットに設定していた場合,これはアクセスログ出力設定時に権限エラーがでました.これはドキュメントの記載通りの挙動と言えます.

一時的にバケットの暗号化を SSE-S3 に変更して再度アクセスログ出力設定を有効化すると今度は成功しました.ここまでも想定通りの挙動です.

アクセスログ有効化後に,KMS カスタマキーをバケットに設定してみるとアクセスログは出るかどうかを見てみましょう.本来であれば,ここではアクセスログが出ないことが予測されます.が,ログは出力されました(検証は2022/09/18 12時台に確認しています).

このログをダウンロードして確認してみると,ログの中身を確認もできました.

ログ抜粋

h2 2022-09-18T03:09:14.366280Z app/test/123456789 133.200.0.32:24097 - 0.009 0.026 0.000 200 200 199 1118 "GET https://test-123456789.ap-northeast-1.elb.amazonaws.com:443/ HTTP/2.0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Safari/605.1.15" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:ap-northeast-1:1234567899:targetgroup/hoge-tg/123456789 "Root=1-63268bda-0d7a0a1d241c44753a4d572f" "test-123456789.ap-northeast-1.elb.amazonaws.com" "arn:aws:acm:ap-northeast-1:1234567899:certificate/1234567899-1234567899-1234567899" 0 2022-09-18T03:09:14.330000Z "forward" "-" "-" "-" "200" "-" "-"

以上の検証から次のことが確認できました.

まとめ

ALB アクセスログの暗号化として SSE-KMS を使えるかを試してみたのでその内容をまとめました.初回出力はうまくいきませんでしたが,ログ出力以降にポリシーを設定していれば KMS のカスタマーキーによる暗号化はいけそうでした.