[アップデート] Amazon S3のSSE-C(顧客提供キーによるサーバーサイド暗号化)がデフォルトで無効化されました。

[アップデート] Amazon S3のSSE-C(顧客提供キーによるサーバーサイド暗号化)がデフォルトで無効化されました。

AWSアカウント全体でSSE-C暗号化オブジェクトがない場合は、新規で作成した以外の既存バケットも新規書き込みに対してSSE-Cが無効化されます。
2026.04.10

はじめに

おのやんです。

Amazon S3(以下、S3)で、SSE-C(顧客提供キーによるサーバーサイド暗号化)がデフォルトで無効化されました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/04/s3-default-bucket-security-setting/

こちらは、事前告知されていた設定変更が適用された形になります。具体的な内容はAWS公式ブログからも確認できます。

https://aws.amazon.com/jp/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/

弊社からも関連のブログを公開しております。

https://dev.classmethod.jp/articles/update-amazon-s3-block-sse-c-encryption/

S3のサーバーサイド暗号化にはSSE-S3・SSE-KMS・SSE-Cといった方式があり、SSE-Cは暗号化キーをユーザー自身が管理・提供する方式です。今回の変更で、2026年4月6日以降に作成される新規の汎用バケットではSSE-Cがデフォルトで無効化されるようになりました。こちらはAWS公式ドキュメントにも掲載されています。

2026 年 4 月以降、AWS はすべての新しいバケットについて、お客様が用意したキー (SSE-C) によるサーバー側の暗号化を無効にします。

既存バケットの扱いはAWSアカウントによって異なります。AWSアカウント全体でSSE-Cで暗号化されたオブジェクトがない場合は、既存バケットも新規書き込みに対してSSE-Cが無効化されます。1個でもSSE-C暗号化オブジェクトが存在するアカウントでは、既存バケットの設定は変更されません。

さらに、SSE-C 暗号化は、SSE-C 暗号化データを持たない AWS アカウントのすべての既存のバケットに対して無効になります。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html

SSE-Cが全く使えなくなる、というわけではなく、2026年4月6日以降に作成された新規バケットで引き続きSSE-Cを使いたい場合は、バケット作成後にPutBucketEncryptionAPIや、AWSマネジメントコンソールでSSE-Cを有効化できます

やってみた

ということで、実際に新規バケットを作成してSSE-Cのデフォルト動作を確認してみます。今回はap-northeast-1(東京リージョン)で実施します。

検証用のS3バケットを作成し、「プロパティ」タブから「デフォルトの暗号化」のセクションを確認してみます。今回の変更が反映されていると、このように「ブロックされた暗号化タイプ」に「お客様提供のキーによるサーバー側の暗号化 (SSE-C)」が設定されているのが確認できます。

S3でデフォルトでSSE-Cがブロックされている画面

こちらはAWS CLIからでも確認することができ、S3バケットの暗号化設定を取得するとこのようなレスポンスが返ります。BlockEncryptionTypesSSE-Cが指定されており、SSE-Cがデフォルトでブロックされていることが確認できます。

$ aws s3api get-bucket-encryption \
  --bucket aws-test-bucket-default-s3-c-123456789012

{
    "ServerSideEncryptionConfiguration": {
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "AES256"
                },
                "BucketKeyEnabled": false,
                "BlockedEncryptionTypes": {
                    "EncryptionType": [
                        "SSE-C"
                    ]
                }
            }
        ]
    }
}

次に、SSE-Cを指定してオブジェクトをアップロードしてみます。こちらのブログを参考に暗号化キーを作成し、AWS CLI経由でアップロードしてみます。

$ SSE_CUSTOMER_KEY=$(openssl rand -hex 16)

https://dev.classmethod.jp/articles/amazon-s3-sse-c-aws-cli/#:~:text=ということです。-,SSE-C を指定する場合,-SSE-C の

今回のアップデートでSSE-Cはブロックされているので、次のようなエラーが出ます。

$ aws s3api put-object \
  --bucket aws-test-bucket-default-s3-c-123456789012 \
  --key test.txt \
  --body test.txt \
  --sse-customer-algorithm AES256 \
  --sse-customer-key "$SSE_CUSTOMER_KEY" \

aws: [ERROR]: An error occurred (AccessDenied) when calling the PutObject operation: User: arn:aws:sts::123456789012:assumed-role/sample-user is not authorized to perform: s3:PutObject on resource: "arn:aws:s3:::aws-test-bucket-default-s3-c-123456789012/test.txt" because this bucket has blocked upload requests that specify Server Side Encryption with Customer provided keys (SSE-C). Please specify a different server-side encryption type.

では、SSE-Cを明示的に有効化してからアップロードしてみましょう。AWSコンソールで、デフォルトのSSE-Cブロックのチェックを外します。

デフォルトのSSE-Cブロックを解除

改めてデフォルト暗号化設定を確認すると、BlockEncryptionTypesNONEになり、SSE-Cがブロックされていないことが確認できます。

$ aws s3api get-bucket-encryption \
  --bucket aws-test-bucket-default-s3-c-123456789012

{
    "ServerSideEncryptionConfiguration": {
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "AES256"
                },
                "BucketKeyEnabled": false,
                "BlockedEncryptionTypes": {
                    "EncryptionType": [
                        "NONE"
                    ]
                }
            }
        ]
    }
}

再度、SSE-Cでアップロードしてみると、今度は正常にアップロードできます。

$ aws s3api put-object \
  --bucket aws-test-bucket-default-s3-c-123456789012 \
  --key test.txt \
  --body test.txt \
  --sse-customer-algorithm AES256 \
  --sse-customer-key "$SSE_CUSTOMER_KEY"

{
    "ETag": "\"8f5a89fcdcffa003b2c856511d04da80\"",
    "ChecksumCRC64NVME": "2wstOANdZ/o=",
    "ChecksumType": "FULL_OBJECT",
    "SSECustomerAlgorithm": "AES256",
    "SSECustomerKeyMD5": "dVLiCRhCrOH3M0QgyQ3tEg=="
}

まとめ

S3のSSE-Cがデフォルトで無効化されました。引き続きSSE-Cを使いたい場合は明示的に有効化できます。

SSE-Cで暗号化されたオブジェクトがないAWSアカウントですと、自動でSSE-Cブロックが適用されます。SSE-Cを使いたい要件が出た時に戸惑うことがないよう、S3バケットの暗号化設定を確認しておくと良いかなと思います。では!

この記事をシェアする

関連記事