UpdateObjectEncryption APIのリリースは、大規模なデータセキュリティ管理における大きな転換点となる。従来、S3オブジェクトの暗号化を変更することは「物理的な」操作であり、ビットを移動する必要があった。今やそれは「論理的な」メタデータ操作となった。

技術詳細: 移動なしの再暗号化

この更新の背後にある「魔法」はエンベロープ暗号化にある。従来のCopyObjectワークフローでは、S3は古い鍵で実際のデータを復号し、新しい鍵で再暗号化して、事実上新しいファイルを作成する必要があった。

UpdateObjectEncryption APIでは、S3は基盤となるデータブロックに触れない。代わりに、データキー(DK)のみとやり取りする。

  1. S3はオブジェクトのメタデータに保存されている暗号化されたデータキーを取得する。
  2. 古いマスターキーを使用してそのデータキーを復号する。
  3. 同じデータキーを新しいKMSマスターキーで直ちに再暗号化する。
  4. オブジェクトのメタデータが新しい暗号化データキーでアトミックに更新される。

データ自体(暗号文)は同一のままなので、ETag(データのハッシュ)と作成日はまったく変わらない。

長所と短所

長所

  • データのゼロレイテンシ: データが移動されないため、ファイルサイズに関係なく(1KBから5TBまで)操作はミリ秒で完了する。
  • ストレージ整合性: Last-Modified日付、ETagVersion IDが保持される。これはキャッシュ検証にETagを使用するアプリケーションにとって重要だ。
  • アーカイブ対応: Glacierオブジェクトを事前に「復元」することなく暗号化をアップグレードできる。コールドストレージに置いたままでよい。
  • コスト効率: コピーに関連するデータ取得料金(GET)とデータ転送料金を回避できる。API呼び出し(PUT価格)の支払いのみで済む。
  • Intelligent-Tieringの安全性: S3 Intelligent-TieringのオブジェクトがFrequent Accessティアに「リセット」されることがなく、コスト最適化の進行状況が保持される。

短所

  • KMSのみ: SSE-KMSへの更新のみ可能。SSE-CDSSE-KMSはサポートしない。
  • 「非暗号化」は非サポート: ソースオブジェクトは必ず既に暗号化されている必要がある(SSE-S3またはSSE-KMS)。稀なレガシー「プレーンテキスト」オブジェクトの場合、このAPIは失敗する。
  • Object Lockの壁: オブジェクトがリーガルホールドまたは保持モードにある場合、ロックが解除されるまで暗号化を更新できない。
  • KMS ARNの要件: KMSキーエイリアスは使用できず、完全なAmazon Resource Name(ARN)を提供する必要がある。

比較: UpdateObjectEncryption vs. CopyObject

機能UpdateObjectEncryption(新)CopyObject(レガシー)
データ移動なし(メタデータ更新のみ)完全なデータコピー
オブジェクトメタデータ保持(ETag、作成日)リセット(新しいETag、新しい日付)
Glacierサポートアーカイブ中でも動作最初に「復元」が必要
スループット高い(アトミック/即時)オブジェクトサイズ/帯域幅に制限される
コストPUTリクエストのみ($0.005/1k)GET + PUT + データ取得料金
Object Lockブロックされる新しいバージョンを作成(バージョニング有効時)

判断ガイド: どちらを選ぶべきか?

1. UpdateObjectEncryptionを使用するケース:

  • 状況: コンプライアンス監査。規制要件を満たすために、AWS管理キー(SSE-S3)からカスタマー管理キー(SSE-KMS)に切り替える必要がある。
  • 状況: アーカイブデータ。復元の膨大なコストをかけずに暗号化アップグレードが必要なGlacier Deep Archive内のペタバイト級のデータがある。
  • 状況: 巨大オブジェクト。コピー操作に数時間かかりタイムアウトのリスクがある5TBのオブジェクトがある。
  • 状況: ETag依存。アプリケーションロジックが同期/キャッシングのためにETagの不変性に依存している。

2. CopyObjectを使用するケース:

  • 状況: 暗号化されていないソース。全く暗号化されていない非常に古いオブジェクトを扱っている。
  • 状況: クロスリージョン/アカウント。暗号化を変更しながらデータを別のバケットやリージョンに移動する必要がある。
  • 状況: SSE-C要件。新しいAPIがサポートしていないカスタマー提供キー(SSE-C)を使用する必要がある。
  • 状況: ロックされたオブジェクト。永続的にロックされたオブジェクト(コンプライアンスモード)の暗号化を更新する必要がある。この場合、新しいコピー/バージョンが唯一の手段となる。

大規模環境での注意点: 数百万のオブジェクトを扱う場合、このAPIをループで呼び出してはいけない。S3 Batch Operationsを使用すること。AWSはこの新しいAPIをBatchコンソールに直接統合しており、数クリックでバケット全体に対して「再暗号化」ジョブを実行できる。

公式AWSニュースはこちら: https://aws.amazon.com/about-aws/whats-new/2026/01/change-the-server-side-encryption-type-of-s3-objects/

公式AWSドキュメント: 既存データのサーバーサイド暗号化の更新