[アップデート] Amazon S3でオブジェクト保存時に必ず暗号化が行われるようになります

「SSE-S3」は設定しない理由が無い? ならばデフォルトで適用されるようにしようぞ! (とAWSが言ったのかどうかは定かではありません)
2023.01.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、こんにちは!
福岡オフィスの青柳です。

Amazon S3における「暗号化」の仕様に関してのアップデートが公開されました。

Amazon S3 now automatically encrypts all new objects

タイトルを和訳すると「Amazon S3は全ての新しいオブジェクトを自動的に暗号化します」となります。

今までは、S3へオブジェクトを保存する際に「暗号化しない」という選択肢がありました。(と言うか、何も設定を行わない場合のデフォルトの挙動は「暗号化しない」でした)

これが、今後は「必ず暗号化される」ことになります。

どういうことなのか、アップデート内容を見ていきましょう。

おさらい: Amazon S3の「暗号化」について

今回のアップデートについて確認する前に、まずは、Amazon S3の「暗号化」について少しおさらいしたいと思います。

「そんなの知ってるよ!」という方はスキップして頂いて構いません。

Amazon S3における「暗号化」の種類

Amazon S3における「暗号化」には、以下の種類があります。

  • 保管時の暗号化
    • サーバーサイド暗号化
      • S3管理キーによる暗号化 (SSE-S3)
      • KMSキーによる暗号化 (SSE-KMS)
      • 顧客提供キーによる暗号化 (SSE-C)
    • クライアントサイド暗号化
      • SDK等を使ったクライアント側での暗号化/復号
  • 転送時の暗号化
    • HTTPS (TLS) による暗号化

今回のアップデートは、これらのうち「保管時の暗号化」の「サーバーサイド暗号化」に関するものです。

※ Amazon S3の暗号化について、より詳しく知りたい方は、下記のブログエントリを参照してみてください。

「バケットのデフォルト暗号化」の設定

Amazon S3には「バケットのデフォルト暗号化」という設定が存在します。

ここで勘違いしてはいけないのは、S3の (保管時の) 暗号化とは「オブジェクトに対する暗号化」であって、バケット自体に暗号化の概念は無いということです。

では、「バケットのデフォルト暗号化」とはどういう設定なのかと言いますと、「バケットにオブジェクトを保存する際、暗号化の指定を明示しなかった場合にデフォルトで暗号化するかどうか (および暗号化の種類) の設定」なのです。

バケットのデフォルト暗号化が対象とするのは、サーバーサイド暗号化のうち「SSE-S3」と「SSE-KMS」です。
(「SSE-C」は暗号化キーの管理方法や暗号化の手順が「SSE-S3」「SSE-KMS」と少し異なりますので、別枠だと思ってください)

「バケットのデフォルト暗号化」の設定状況と「オブジェクト保存時の暗号化の指定」の組み合わせによって、オブジェクトの暗号化がどのようになるのかについて、表にしてみました。

(※ 今回のアップデートが行われる前の仕様を示しています)

バケットのデフォルト暗号化 オブジェクト保存時の暗号化の指定
未指定 SSE-S3 SSE-KMS
無効 暗号化されない 暗号化される
(SSE-S3)
暗号化される
(SSE-KMS)
有効: SSE-S3 暗号化される
(SSE-S3)
暗号化される
(SSE-S3)
暗号化される
(SSE-KMS)
有効: SSE-KMS 暗号化される
(SSE-KMS)
暗号化される
(SSE-S3)
暗号化される
(SSE-KMS)

オブジェクト保存時に暗号化の種類を明示的に指定した場合は、「バケットのデフォルト暗号化」の設定内容にかかわらず、オブジェクト保存時に指定した通りの種類で暗号化が行われます。

着目して頂きたいのは、オブジェクト保存時に暗号化を明示的に指定しなかった場合です。
その場合、実際に保存されたオブジェクトの暗号化は「バケットのデフォルト暗号化」の設定内容に従います。

なお、オブジェクト保存時の暗号化の指定で「暗号化は行わない」と明示的に指定することはできません。
そのため、「バケットのデフォルト暗号化」を設定すると、オブジェクト保存時に明示的に暗号化を指定しなかった場合であっても、必ず何らかの暗号化を適用することができるという訳です。

(オブジェクト保存時に暗号化を強制する方法としては他に「バケットポリシーによる設定」もありますが、ここでは説明を割愛します)

今回のアップデートで何が変わるのか

お待たせしました。
それでは、今回のアップデートの内容について解説していきます。

新規および既存バケットの「デフォルト暗号化」の設定の変更

今回のアップデートではいくつかの変更が行われますが、本質的な変更点は以下の通りです。

  • バケットの新規作成時:
    • 「バケットのデフォルト暗号化」の設定で「無効」が選択できなくなる
  • 既存のバケット:
    • 「バケットのデフォルト暗号化」の設定が「無効」であるバケットは、「有効: SSE-S3」に設定が変更される
    • 「バケットのデフォルト暗号化」の設定を「有効: SSE-S3」「有効: SSE-KMS」から「無効」に変更できなくなる

前節で掲載した「表」を使って説明すると、下図のようになります。

この変更によって、新規バケット・既存バケット共に「デフォルト暗号化」が必ず「有効: SSE-S3」「有効: SSE-KMS」のいずれかに設定されることになります。
つまり、オブジェクト保存時に明示的に暗号化を指定しなかった場合であっても、必ず何らかの暗号化が適用されるということです。

既存のオブジェクトの扱い

今回のアップデートによって、既存のバケットに保存されている既存のオブジェクトに対する変更は一切行われません

つまり、暗号化されていないオブジェクトが暗号化されることはありませんし、「SSE-KMS」で暗号化されているオブジェクトの暗号化の種類が「SSE-S3」に変わったりするようなこともありません。

今回のアップデートは、あくまで、「バケットのデフォルト暗号化」の設定の仕様を変更することによって、今後新たに作成・保存されるオブジェクトが常に暗号化されることを目的としています。

今回のアップデートに関するFAQ

AWS公式ドキュメントに、今回のアップデートに関するFAQが掲載されています。

Amazon S3 now automatically encrypts all new objects - Amazon Simple Storage Service

抜粋した概要は以下の通りです。
(いくつかの項目は前述の説明と内容が重複するものがありますが、再掲します)

  • 既存のバケットについて
    • デフォルト暗号化が無効になっているバケットの設定は変更されるか? → 「SSE-S3」に変更される (今後数週間で順次展開)
    • デフォルト暗号化が有効 (SSE-S3またはSSE-KMS) になっているバケットの設定は変更されるか? → 変更されない
  • 既存のオブジェクトについて
    • 暗号化されていない既存のオブジェクトは自動的に暗号化されるのか? → 暗号化されない (必要に応じてユーザー側で暗号化を行う)
  • 新規のオブジェクトについて
    • 今後、新たに作成・保存するオブジェクトの暗号化を無効にできるか? → できない (必ず暗号化されることになる)
  • オブジェクトへのアクセス方法について
    • 今回のアップデートによってオブジェクトへのアクセス方法を変更する必要はあるか? → 不要 (SSE-S3およびSSE-KMSの暗号化は透過的に行われる)
  • 費用について
    • 今回のアップデートに伴って新たな料金は発生するか? → 発生しない (SSE-S3は追加料金なしで利用できる)

極力、既存のシステム・運用に影響が無いようになっていることが分かりますね。

アップデートのスケジュール

What's newページおよびAWS公式ドキュメントページの記載では、アップデートは「今後数週間 (the next few weeks)」で展開されると説明されています。

私が普段使用している弊社検証用AWSアカウントで確認していますが、既存のバケットの「デフォルト暗号化」が「無効」から「有効: SSE-S3」へ変更されたということは確認できていません。 (2023/01/06時点)

ただ、既に一部の機能/UIでは変更が始まっているようです。

マネジメントコンソールの「バケットを作成」ページでは、「デフォルト暗号化」の設定項目から「無効にする/有効にする」の選択肢が無くなっており、常に「暗号化キータイプ」の選択肢が表示されるようになっています。
つまり、マネジメントコンソール上ではバケットの新規作成時に「デフォルト暗号化」を無効にすることができなくなっているという訳です。

同様に、既存のバケットのプロパティページで「デフォルト暗号化」の設定を編集しようとしても、「無効/有効」の選択肢が表示されなくなっています。

(※) アップデート後の画面で、「SSE-S3」を選択しているにもかかわらず「バケットキー」の選択項目が表示されているのが不思議ですが、これが一時的な問題であるのか、今後はこのように表示されるようになるのかについては、現時点で不明です。

上記の通りマネジメントコンソールの仕様には既に変更が見受けられますが、AWS CLIを使用した場合は従来通り「バケット新規作成時に『デフォルト暗号化』を無効に指定する」「既存のバケットの『デフォルト暗号化』の設定を無効に変更する」共に実行することができました。

これらは、いずれ「デフォルト暗号化」の「無効」設定が行えないように仕様が変更されるものと思われます。

おわりに

今回のブログエントリでは、アップデートの内容についての解説に留まり、実際の動作について確認することはできませんでした。
いずれアップデートの適用が確認できるようになりましたら、本ブログエントリを更新したいと思います。

Amazon S3におけるサーバーサイド暗号化について、「SSE-KMS」は強力なセキュリティ向上を提供するものの「KMSキーの管理や、KMSへのアクセス権の設定など、運用面がやや煩雑になる」「追加の費用が発生する」という点があり、無条件で適用するものではなく「必要に応じて」選択すべきものです。

一方、「SSE-S3」は暗号化を行わない場合よりもセキュリティ向上のメリットがある一方で、運用面・費用面・性能面でのデメリットが一切ありません。
よって、「SSE-S3」の暗号化は「設定しない理由がない」とも言えると思います。

今回のアップデートで「デフォルト暗号化」は常に有効化されるようになり、これまでのように「せっかくセキュリティ面で有効な設定であるのに有効化していなかった」ということがなくなります。

これは期待のアップレートですね!