Amazon S3の暗号化について調べてみた。

2021.08.17

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

こんにちは、イムチェジョンです。
今回のブログではAmazon S3の暗号化について調べてS3で提供してくれる二つの暗号化を実際にしてみようと思います。

アジェンダ

  1. Amazon S3の暗号化とは?
  2. Amazon S3の暗号化4種類
  3. SSE-S3の設定方法
  4. SSE-KMSの設定方法
  5. まとめ

1. Amazon S3の暗号化とは?

  • 暗号化を使用することで転送時と保管時にデータをもっと安全に保護できる
    • 転送時:Amazon S3 との間でデータを送受信するとき
    • 保管時:Amazon S3 データセンター内のディスクに格納されているとき
  • 大きくサーバー側の暗号化とクライアント側の暗号化に分けている
    • サーバー側の暗号化:SSE-S3、SSE-KMS、SSE-C
      • データセンターのディスクに保存する前にオブジェクトを暗号化し、オブジェクトをダウンロードする際に解読するようAmazon S3に要請
    • クライアント側の暗号化:クライアント側の暗号化
      • クライアント側のデータを暗号化して暗号化されたデータをAmazon S3にアップロードすること
      • ユーザーが暗号化プロセス、暗号化キー、関連ツールを管理する

2. Amazon S3の暗号化4種類

SSE-S3

  • Amazon S3によって処理、管理されるキーを使用
  • オブジェクトを固有のキーで暗号化
  • AES-256暗号化タイプを使用
  • "x-amz-server-side-encryption":"AES256"ヘッダーを設定して利用する

SSE-KMS

  • オブジェクトを作成する際にAWS Key Management Service(AWS KMS)の顧客マスタキー(CMK)を使用するサーバ側の暗号化によりデータを暗号化するように指定
  • "x-amz-server-side-encryption":"aws:kms"ヘッダーを設定して利用する

SSE-C

  • サーバ側の暗号化を使用して独自の暗号化キーを設定
  • リクエストの一部として用意された暗号化キーで、Amazon S3 は、ディスクに書き込む際の暗号化、オブジェクトにアクセスする際の復号を管理
  • AES-256暗号化タイプを使用
  • HTTPSだけサポートする

クライアント側の暗号化

  • クライアント側の暗号化でAmazon S3に送る前にデータを暗号化する方法
  • クライアント側暗号化ライブラリ(AWS Encryption SDK)を使用すると暗号化をより容易に実装可能
  • AWS Encryption SDKとAmazon S3 暗号化クライアントは、異なるデータ形式で暗号テキストを生成するため互換できない

3. SSE-S3の設定方法

まず、SSE-S3の暗号化をしてみましょう。

オブジェクトにSSE-S3の暗号化

まず、S3バケットにSSE-S3暗号化をしたオブジェクトを保存してみましょう。

SSE-S3の場合、S3で暗号化キーを処理、管理するので、簡単に設定できます。
ファイルをアップロードした状態でプロパティの設定に行くとサーバー側暗号化設定があるので、暗号化キーをSSE-S3で設定します。

アップロードされたファイルを確認してみると、暗号化設定の部分にSSE-S3に暗号化されているのを確認できます。

バケットにSSE-S3の暗号化

でも、オブジェクトをアップロードする時に毎回同じ設定をするのは大変です。なので、今回はアップロードすると自動に暗号化設定ができるようにバケットに設定をしてみます。

バケットのプロパティの設定に行くとサーバー側暗号化設定がありますので、そこを編集をします。
暗号化を有効をクリック、SSE-S3で設定し、保存をします。

これからアップロードされるオブジェクトはデフォルトでSSE-S3の暗号化に設定されます。

4. SSE-KMSの設定方法

カスタマ管理型のキー作成

Key Management Service(KMS)でカスタマ管理型のキーを作成します。

キーマテリアルオリジンはKMS、リージョンごとは単一リージョンキーを選択します。

キー名にs3-kms-keyを入力します・

後にキーを削除をしたいなら、キーの削除にチエックをします

次にキーのアクセス許可を定義するためにUserまたはRoleを選択します。

最後に設定した内容を基に作成されたキーポリシーを確認してキー作成を完了します。

こうなると作成完了です。

オブジェクトにSSE-KMSの暗号化

カスタマ管理型のキーも作成できたので、SSE-KMSの暗号化をしてみましょう。
まず、S3バケットに新しいオブジェクトをアップロードします。

アップロードする時にプロパティの設定でSSE-KMSを設定します。
今、S3バケットはSSE-S3暗号化がデフォルトになっているので、
暗号化キーを指定する -> デフォルトの暗号化バケット設定を上書きする
-> AWS Key Management Service キー (SSE-KMS)をチエックします。
ここでAWSで管理するキーも使えます。

しかし、今回は上でカスタマ管理型のキーを作ったので、AWS KMS キーから選択するをクリックし、上で作成したキーに設定します。

このように設定をした後にアップロードしたオブジェクトを確認してみるとSSE-KMSがよく設定できているのを確認できます。

バケットにSSE-KMSの暗号化

今回はバケット自体にSSE-KMSの暗号化を設定し、アップロードする全てのファイルに自動にSSE-KMS暗号化してみましょう。
この設定は上で行ったSSE-S3の設定とほぼ同じです。
まず、バケットのプロパティの設定でデフォルトの暗号化を確認すると、上で設定したようにSSE-S3暗号化に設定されていますので、編集をします。

オブジェクトで暗号化設定をしたように上で作成したカスタマ管理型のキーを設定します。

保存するとデフォルトの暗号化の設定は変更されています。
今からアップロードするファイルは自動にSSE-KMSの暗号化されるようになります。

5. まとめ

今回はS3の暗号化について調べてSSE-S3とSSE-KMSの暗号化を実際にやってみました。

もっと詳しく勉強したい方にはこちらをお勧めします。 https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingEncryption.html