[アップデート] Amazon S3にSSE-Cをバケットレベルで無効化する新機能が追加されたので試してみた(2026年4月からデフォルトで無効化)

[アップデート] Amazon S3にSSE-Cをバケットレベルで無効化する新機能が追加されたので試してみた(2026年4月からデフォルトで無効化)

Amazon S3のPutBucketEncryption APIに、バケット単位でSSE-C(カスタマー提供キーによるサーバー側暗号化)を無効化する設定が追加されました。2026年4月6日以降、新規バケットではSSE-Cがデフォルトで無効化されます。本記事では、S3の暗号化方式の概要、SSE-Cの歴史と背景、そして新機能をAWSマネジメントコンソール・CLI・CloudFormationで試した結果を紹介します。
2025.11.25

あしざわです。

Amazon S3で利用できるPutBucketEncryption APIに新しい設定項目が追加され、バケットのサーバーサイド暗号化方式からカスタマー提供キーを使用したサーバー側暗号化 (SSE-C)を無効化できるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2025/11/amazon-s3-bucket-level-standardize-encryption-types/

登場の背景として、AWS Blogで発表された 2026年4月6日から新規/既存のS3バケットでSSE-Cが無効化される というアナウンスがあります。

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/

本ブログではS3のサーバーサイド暗号化の概要、SSE-Cの歴史と今後の対応、実際に触ってみた様子を紹介します。

S3のサーバーサイド暗号化について

Amazon S3には「サーバーサイド暗号化」という、オブジェクトがAWSの管理するデータセンターに保存される前に自動で暗号化し、データをダウンロードするときに自動で復号化してくれる便利な機能があります。

Amazon S3のサーバーサイド暗号化方式には現在4つの方法があります。

  • Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)
  • AWS KMS によるサーバー側の暗号化の指定 (SSE−KMS)
  • AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS)
  • お客様が用意したキーによるサーバー側の暗号化 (SSE−C)

SSE-S3 は、S3が管理する暗号化キーを利用してバケットを暗号化ができます。現時点で新規作成されたバケットのデフォルトの暗号化設定 です。追加の課金も発生しないため、データ暗号化に関する特別な要件がなければそのままで問題ありません。

SSE-KMS はAWS KMSで作成した暗号化キーを利用してバケットの暗号化ができる方式です。
暗号化キーを自己管理し、暗号化キーの削除によってデータを破棄する必要があるような、よりコンプライアンスを重視した環境の場合は、こちらを利用しましょう。

DSSE-KMS は2025年6月にリリースされた比較的新しい機能です。二重層暗号化というCNSSP 15や DAR CP バージョン5.0のような厳しいデータ保持・暗号化要件を満たす必要がある場合はこれを選択します。

https://dev.classmethod.jp/articles/amazon-s3-dsse-kms-compliance-workloads/

そして SSE-C は、ユーザーが独自に準備した暗号化キーを利用してバケットを暗号化できます。データの暗号化・復号化はAWSに任せたいが、暗号化キーの管理を完全にユーザー側で完結させたい時に利用するものでした。

これまでのSSE-C

前述した暗号化方式の中でもSSE-Cの歴史は最も古く、KMSが登場する前の2014年6月に登場しました。

https://dev.classmethod.jp/articles/s3-sse-c/

KMSのリリースはその5ヶ月後の2014年11月で、同時にSSE-KMSによる暗号化がサポートされました。現在までにAWS全体に広くSSE-KMSがサポートされており、ユーザーの運用コストが高く柔軟性が低いSSE-Cは、の利用は相対的に減少傾向にありました。

また昨今は、S3に保存されたオブジェクトを攻撃者がSSE-Cを使って暗号化してしまう、AWSの正規の機能を使ったランサムウェア攻撃の手法として認識されるようになっていました。

https://dev.classmethod.jp/articles/s3-ransomware-detection-with-guardduty-alerts/

その脅威に対してユーザーは、AWS OrganizationsのRCPを使った組織全体でSSE-Cを無効化するような対策を取る必要がありました。

https://dev.classmethod.jp/articles/aws-organizations-rcp-deny-s3-sse-c/

今後どうなるのか

2026年4月6日から、新規のAmazon S3の汎用ストレージでSSE-Cがデフォルトで無効化されるようになります。また、既存のS3バケットでSSE-Cで暗号化されたオブジェクトを保管していない場合、2026年4月6日以降順次SSE-Cが無効化されるようです。

SSE-KMSがサポートしていない暗号化方式の要件がある場合、AWSはクライアントサイド暗号化方式の検討を推奨しています。

今後SSE-Cが必要とされるユースケースでは、PutBucketEncryption APIを利用して明示的にSSE-Cを有効化する必要があります。

試してみた

冒頭のWhat's newブログを紹介したように、PutBucketEncryption APIを使ってSSE-Cを無効化する機能は既にリリースされています。

AWSの各API(マネジメントコンソール / AWS CLI / CloudFormation など)で利用できます。

それぞれの方式でアップデートを試してみましょう。

  • AWSマネジメントコンソールから
  • AWS CLIから
  • CloudFormationから

AWSマネジメントコンソールから

新規のS3バケットを作成し、アクセス許可 > デフォルトの暗号化設定を確認しました。ブロックされた暗号化タイプ という設定が追加されています。現状の設定は-(ハイフン)です。

CleanShot 2025-11-25 at 10.01.40@2x 1

SSE-C (Server-Side Encryption with Customer-Provided Keys)にチェックをいれ、有効化します。

CleanShot 2025-11-25 at 10.13.58@2x
設定が反映され、お客様提供のキーによるサーバー側の暗号化 (SSE-C) にステータスが変更されました。

CleanShot 2025-11-25 at 10.18.42@2x

SSE-C (Server-Side Encryption with Customer-Provided Keys)のチェックを外し、無効化してみたところ、ステータスは-(ハイフン)に戻っていました。コンソール上は即時反映されるように見えました。

CleanShot 2025-11-25 at 10.32.17@2x

AWS CLIから

AWS CLIのバージョンはこちら

> aws --v
aws-cli/2.32.0 Python/3.13.9 Darwin/22.6.0 source/arm64

以下コマンドで設定を確認しました。

> aws s3api get-bucket-encryption \
	--bucket test-blockbucketencryption-123456789012

(実行結果)
{
    "ServerSideEncryptionConfiguration": {
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "AES256"
                },
                "BucketKeyEnabled": true,
                "BlockedEncryptionTypes": {
                    "EncryptionType": [
                        "NONE"
                    ]
                }
            }
        ]
    }
}

BlockedEncryptionTypesというプロパティのEncryptionTypeがそれにあたりそうですね。まだ設定していないのでNONEとなっています。

以下コマンドで設定をSSE-Cに変更し、設定後のステータスを確認します。

> aws s3api put-bucket-encryption \
  --bucket test-blockbucketencryption-123456789012 \
  --server-side-encryption-configuration '{
    "Rules": [
      {
        "BlockedEncryptionTypes": {
          "EncryptionType": ["SSE-C"]
        }
      }
    ]
  }'

(実行結果)
なし

> aws s3api get-bucket-encryption \
	--bucket test-blockbucketencryption-123456789012

(実行結果)
{
    "ServerSideEncryptionConfiguration": {
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "AES256"
                },
                "BucketKeyEnabled": true,
                "BlockedEncryptionTypes": {
                    "EncryptionType": [
                        "SSE-C"
                    ]
                }
            }
        ]
    }
}

SSE-Cに変わっていますね。

実行時にエラーにならなかったので、--server-side-encryption-configurationオプションのRules配下のプロパティは変更するBlockedEncryptionTypesのみの指定で問題ないようです。

逆にNONEに切り戻すコマンドと実行結果がこちら。

aws s3api put-bucket-encryption \
  --bucket test-blockbucketencryption-123456789012 \
  --server-side-encryption-configuration '{
    "Rules": [
      {
        "BlockedEncryptionTypes": {
          "EncryptionType": ["NONE"]
        }
      }
    ]
  }'
(実行結果)
なし

> aws s3api get-bucket-encryption \
      --bucket test-blockbucketencryption-123456789012

(実行結果)
{
    "ServerSideEncryptionConfiguration": {
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "AES256"
                },
                "BucketKeyEnabled": false,
                "BlockedEncryptionTypes": {
                    "EncryptionType": [
                        "NONE"
                    ]
                }
            }
        ]
    }
}

戻しも問題なくできました。

CloudFormationから

公式ドキュメントのサンプルを参考にCloudFormationテンプレートを作成しました。

AWSTemplateFormatVersion: 2010-09-09
Description: S3 bucket with default encryption
Resources:
  EncryptedS3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: !Sub 'encryptedbucket-${AWS::Region}-${AWS::AccountId}'
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: 'AES256'
            BucketKeyEnabled: true
            BlockedEncryptionTypes:
              EncryptionType: 
                - 'SSE-C'
    DeletionPolicy: Delete

作成したテンプレートをCloudFormationで実行したところ、正常に実行できました。

CleanShot 2025-11-25 at 11.23.40@2x

コンソールから確認したところ、想定通りの暗号化方式のS3バケットが作成できていました。

CleanShot 2025-11-25 at 11.27.34@2x

検証は以上です。

最後に

PutBucketEncryption APIにSSE-C無効化設定が追加され、コンソール、CLI、CloudFormationの各方法で設定できることを確認しました。

2026年4月6日の変更に備えて、現在SSE-Cを利用しているバケットがないか確認し、必要に応じてSSE-KMSへの移行計画を立てることをお勧めします。

この記事をシェアする

FacebookHatena blogX

関連記事