猫キック

IT関連について投稿

【AWS】【S3】暗号化形式がSSE-S3形式のみ限定されているログについて

久しぶりに投稿(もしかして飽きてる!?)。最近 Auth0 をいじいじしている私です。


仕事とかでログ設計やS3バケットの設計をしている時、セキュリティの都合でSSE-KMSキーでオブジェクトを暗号化する非機能要件は結構あります。 しかし、全てSSE-KMSで暗号化可能かといったらそうではなく、一部SSE-S3形式でのみ出力することができないサービスがあるので今回はこれについて言及したいと思います。



SSE-KMSの形式で直接出力できないサービス

以下のログはSSE-S3での形式でないとサポートされていない為、注意。


  • S3 アクセスログ ... SSE-S3形式でないと出力できない。
  • CloudFront アクセスログ ... SSE-S3形式でないと出力できない。
  • ELB アクセスログ ... SSE-S3形式出ないと出力できない。
    • S3バケットがELBアカウントID(582318560864)とサービスdelivery.logs.amazonaws.comに対して出力の権限があること。
    • ELBアカウント582318560864は、リージョンごとでアカウントID変わる為、適用するリージョンに応じて変更すること。詳しくはこちら
    • ELBの場合、出力先のS3バケットに以下のようなバケットポリシーがないとアクセスログが出力できないので適用する。(ap-northeast-1上のELBからの出力なので、582318560864)
{
    "Version": "2012-10-17",
    "Id": "AWSConsole-AccessLogs-Policy-xxxxxxxxxxxxx",
    "Statement": [
        {
            "Sid": "AWSConsoleStmt-xxxxxxxxxxxxx",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::582318560864:root"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::[bucket_name]/AWSLogs/[account_id]/*"
        },
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::[bucket_name]/AWSLogs/[account_id]/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::[bucket_name]"
        }
    ]
}


... ってあれ?



何でSSE-S3だけ?

ここでふと疑問に思ったのが、そもそも上記の暗号化形式がSSE-S3に限定されているのは何故かということ。SSE-KMS形式が選択できない理由とは何か?


色々探してみたんですがそのような記載が載っている文献は見つけられませんでした。。。


おそらくですが、「アクセスログがSSE-S3にのみ限定されているという共通点から、アクセス過多やその他サービスの諸々の処理によるKMS利用によって、簡単に10000 API/s いっちゃうから?」というのが私の結論です。(詳しくはKMSのサービスクォータで)。


上記が正しいならS3サービスでバケットキーのGAがあったので、もしかしたらバケットキーを有効にした場合にのみ、SSE-KMS形式でも暗号化可能になるかもしれないですね? (バケットキーを利用してS3からのAPIコール数を削減できます。詳しくはこちら)