オブジェクト・ストレージ・データの暗号化

オブジェクト・ストレージ・サービスが、256ビットAdvanced Encryption Standard (AES-256)を使用してすべてのオブジェクトを暗号化および復号化し、サーバー上のオブジェクト・データを暗号化する方法について学習します。

各オブジェクトは、独自のデータ暗号化キーを使用して暗号化されます。データ暗号化キーは常に、バケットに割り当てられているマスター暗号化キーを使用して暗号化されます。暗号化はデフォルトで有効になっており、オフにできません。デフォルトでは、Oracleはマスター暗号化キーを管理します。

このデフォルトの暗号化に加え、次の戦略を使用してデータを暗号化できます:
  • クライアント側暗号化を使用してオブジェクトを暗号化キーで暗号化してから、オブジェクト・ストレージ・バケットに格納します。使用可能なオプションは、Amazon S3 Compatibility APIを、AWS SDK for Javaで使用可能なクライアント側のオブジェクト暗号化サポートとともに使用することです。このSDKの詳細は、Amazon S3互換API を参照してください。

  • 独自のキーによるサーバー側暗号化を使用します。詳細は、サーバー側暗号化のための独自キーの使用を参照してください。

  • 独自のスケジュールで制御およびローテーションするOracle Cloud Infrastructure Vaultマスター暗号化キーを割り当てます。詳細は、サーバー側暗号化のためのVault内の独自キーの使用を参照してください。

サーバー側暗号化のための独自キーの使用

このトピックでは、顧客提供のキー(SSE-C)を使用したサーバー側暗号化の実装および使用の詳細を説明します。

SSE-Cについて

オプションのAPIヘッダーを使用すると、オブジェクト・ストレージとの間でアップロードおよびダウンロードされたオブジェクトの暗号化および復号化に使用される独自の256ビットAES暗号化キーを指定できます:

  • オブジェクトをアップロードする場合、暗号化キーを指定します。オブジェクト・ストレージは、そのキーを使用してオブジェクトを暗号化し、すぐにキーを削除します。
  • オブジェクトをダウンロードする場合、オブジェクトの暗号化に使用したものと同じキーを指定すると、オブジェクト・ストレージによってオブジェクトが復号化され、ユーザーに返されます。

ユーザーは暗号化キーを管理し、オブジェクト・ストレージは暗号化と復号化を管理します。

重要

オブジェクト・ストレージには暗号化キーは格納されません。各オブジェクトに関連付けられているキーをトラッキングし、必要に応じてキーをローテーションするのは、ユーザーの責任です。暗号化キーを失うと、オブジェクトを取得できません。

範囲および制約

SSE-Cに関する次の範囲および制約について理解します:

  • SSE-Cキーは、バケットに関連付けることはできず、個々のオブジェクトの暗号化にのみ使用できます。
  • 事前認証済リクエストを使用して、独自の暗号化キーでオブジェクトを暗号化できます。事前認証済リクエストを使用してSSE-Cで暗号化されたオブジェクトを取得するには、暗号化キーを指定する必要があります。
  • SSE-Cで暗号化されたオブジェクトを削除または名前変更するには、暗号化キーを指定する必要はありません。
  • ReencryptObjectリクエスト・ペイロードでは、kmsKeyIdまたはsseCustomerKeyのいずれかのみを指定でき、両方は指定できません。リクエスト・ペイロードが空の場合、オブジェクトはバケットに割り当てられた暗号化キーを使用して暗号化されます。バケット暗号化メカニズムは、Oracleまたはボールト・サービスのいずれかによって管理されるマスター暗号化キーです。
  • SSE-Cキーを提供するには、オブジェクト・ストレージAPIおよびCLIのみを使用できます。コンソールを使用して、顧客提供のキーでオブジェクトをアップロードまたは取得することはできません。
  • SSE-Cは、Amazon S3 Compatibility APIでもサポートされています。

SSE-CでのREST APIの使用

サーバー側暗号化に独自のキーを使用する場合は、次の3つのリクエスト・ヘッダーを暗号化キー情報とともに指定します:

ヘッダー 説明 サポートされるAPI
opc-sse-customer-algorithm 暗号化アルゴリズムとしてAES256を指定します。 CopyObject

GetObject

HeadObject

PutObject

CreateMultipartUpload

UploadPart

opc-sse-customer-key データの暗号化または復号化に使用するbase64エンコードの256ビット暗号化キーを指定します。
opc-sse-customer-key-sha256 暗号化キーのbase64エンコードのSHA256ハッシュを指定します。

CopyObjectの場合:

ソース・オブジェクトがSSE-Cキーで暗号化されている場合、オブジェクト・ストレージがオブジェクトを復号化できるように、次の3つのヘッダーも指定する必要があります。

ヘッダー 説明 サポートされるAPI
opc-source-sse-customer-algorithm ソース・オブジェクトの復号化に使用する暗号化アルゴリズムとしてAES256を指定します。 CopyObject
opc-source-sse-customer-key ソース・オブジェクトの復号化に使用するbase64エンコードの256ビット暗号化キーを指定します。
opc-source-sse-customer-key-sha256 ソース・オブジェクトの復号化に使用する暗号化キーのbase64エンコードのSHA256ハッシュを指定します。

SSE-CでのCLIの使用

CLIを使用して、独自の暗号化キーでオブジェクトを暗号化することもできます。

次のコマンドにオプションのパラメータ--encryption-key-file filenameを使用して、独自の暗号化キーを指定できます:

  • oci os object put
  • oci os object get
  • oci os object head
  • oci os object resume-put
  • oci os object bulk-upload
  • oci os object bulk-download
  • oci os object copy
  • oci os object reencrypt

filenameは、AES-256暗号化キーのbase64エンコード文字列を含むファイルを示します。他のパラメータは不要です。オブジェクト・ストレージは、キーをデコードして暗号化キーのSHA256ハッシュを計算します。

ソース・オブジェクトがSSE-Cキーで暗号化されている場合、次のコマンドにオプション・パラメータ--source-encryption-key-file filenameも指定する必要があります:

  • oci os object copy
  • oci os object reencrypt

filenameは、AES-256ソース暗号化キーのbase64エンコード文字列を含むファイルを示します。他のパラメータは不要です。オブジェクト・ストレージは、キーをデコードしてソース暗号化キーのSHA256ハッシュを計算します。

CLIの使用の詳細は、コマンド・ライン・インタフェース(CLI)を参照してください。CLIコマンドで使用できるフラグおよびオプションの完全なリストは、コマンドライン・リファレンスを参照してください。

サーバー側暗号化のためのVault内の独自キーの使用

このトピックでは、Vault内の独自のキーを使用してサーバー側暗号化を実装する方法の詳細を説明します。

Oracle Cloud Infrastructure Object Storageサービスは、ランダムに生成されたデータ暗号化キー(DEK)を使用して、データおよびメタデータ(顧客提供のキー値ペア)を暗号化します。オブジェクト・ストレージを使用すると、Vaultサービスによって管理される独自のマスター暗号化キー(MEK)をバケット(コンソールの使用を参照)および個々のオブジェクトに指定できます。独自のキーを維持および管理しなくても、特定のオブジェクトに使用するMEKを指定できます。

独自のMEKを指定するには、IAMポリシーに必須の権限が必要です。必須IAMポリシーおよびユーザー・グループによるコンパートメントのキーの使用の委任を参照してください。

Vault内のキーを使用したSSEでのCLIの使用

CLIを使用して、Vault内の独自の暗号化キーでオブジェクトを暗号化できます。

次のコマンドにオプションのパラメータ--opc-sse-kms-key-id <target_key_id>を使用して、独自の暗号化キーを指定できます:

  • oci os object put
  • oci os object copy

<target_key_id>は、オブジェクトの暗号化に使用されるOCI Vault内の既存のキーのOCIDです。

Vault内のキーを使用してオブジェクトをバケットにアップロードする例:

oci os object put -bn "MyKeyBucket" --name "MyObjectName" --file "InputFile" --opc-sse-kms-key-id "ocid1.key.region1.sea..exampleuniqueID"

Uploading object  [####################################]  100%
{
  "etag": "cadb9f8a-3292-45e6-a1e8-f075699fb619",
  "last-modified": "Tue, 13 Jul 2021 05:52:47 GMT",
  "opc-content-md5": "9KJsgOK/X5C1sARb2tkhVA=="
}

Vault内のキーを使用してマルチパート・アップロードを実行する例:

oci os object put --namespace MyNamespace --bucket-name MyBucket --file ~/path/to/file --name MyObject --parallel-upload-count 10 --part-size 500
Upload ID: 277ffff5-e1b5-e81d-5f81-c374a8f33998 --opc-sse-kms-key-id "ocid1.key.region1.sea..exampleuniqueID"
Split file into 10 parts for upload.
Uploading object ################################### 100%
{ "etag": "861c8341-74d8-4142-8da4-28e1ce7783ba", "last-modified": "Wed, 25 Sep 2019 19:59:15 GMT", "opc-multipart-md5": "9Qn1eyou2yMiyOO9Bc7o1A==-12" } 

Vault内のキーを使用してオブジェクトをコピーする例:

oci os object put --namespace MyNamespace --bucket-name MyBucket --file ~/path/to/file --name MyObject --parallel-upload-count 10 --part-size 500
Upload ID: 277ffff5-e1b5-e81d-5f81-c374a8f33998 --opc-sse-kms-key-id "ocid1.key.region1.sea..exampleuniqueID"
Split file into 10 parts for upload.
Uploading object ################################### 100%
{ "etag": "861c8341-74d8-4142-8da4-28e1ce7783ba", "last-modified": "Wed, 25 Sep 2019 19:59:15 GMT", "opc-multipart-md5": "9Qn1eyou2yMiyOO9Bc7o1A==-12" } 
ノート

この項の例では、パラメータの完全な構文を使用しています(たとえば、--namespaceおよび--bucket-name)。場合によっては、完全なパラメータのかわりに使用できる短縮されたパラメータ条件があります。たとえば、--namespaceの場合は-ns--bucket-nameの場合は-bnです。特定のコマンドのCLIオンライン--helpには、使用可能な短縮パラメータが表示されます。

CLIの使用の詳細は、コマンド・ライン・インタフェース(CLI)を参照してください。CLIコマンドで使用できるフラグおよびオプションの完全なリストは、コマンドライン・リファレンスを参照してください。

Vault内のキーを使用したSSEでのREST APIの使用

サーバー側暗号化にVault内の独自のキーを使用する場合は、次のリクエスト・ヘッダーをVault内のキーのOCIDとともに指定します:

ヘッダー 説明 サポートされるAPI
opc-sse-kms-key-id オブジェクトの暗号化に使用されるVault内の既存のキーのOCIDを指定します。

PutObject

CopyObject

CreateMultipartUpload

UploadPart

APIの使用およびリクエストの署名の詳細は、REST APIのドキュメントおよびセキュリティ資格証明を参照してください。SDKの詳細は、SDKおよびCLIを参照してください。

バケットの再暗号化

マスター暗号化キーをバケットに割り当てたときからローテーションした場合は、バケットを再暗号化できます。バケットを明示的に再暗号化するまでは、バケットにオブジェクトが挿入されたときにバケットに関連付けられているキー・バージョンによって、すべてのデータ暗号化キーが引き続き復号化されます。同じ最新バージョンの割り当てられたマスター暗号化キーですべてのデータ暗号化キーを暗号化および復号化するには、バケットを再暗号化します。

コンソールを使用してこのタスクを実行する方法については、コンソールを使用してデータ暗号化キーでバケットを再暗号化するにはを参照してください。

CLIを使用してこのタスクを実行する方法については、CLIを使用してデータ暗号化キーでバケットを再暗号化するにはを参照してください。

オブジェクトの再暗号化

異なるマスター暗号化キーを使用してオブジェクトのデータ暗号化キーを暗号化および復号化するには、オブジェクトを再暗号化します。オブジェクトを再暗号化する場合、バケットに割り当てられたキーとは異なるキー、またはバケットに割り当てられたキーの最新バージョンを選択できます。オブジェクトを明示的に再暗号化するまでは、(バケットにオブジェクトが挿入されたときに)バケットに関連付けられたキー・バージョンによって、すべてのオブジェクトのデータ暗号化キーが引き続き復号化されます。

オブジェクトのデータ暗号化キーは、Oracleによって管理されるキー、管理対象のボールトを通じて作成および制御するキー、または顧客提供の暗号化キー(SSE-C)を使用して再暗号化できます。

ノート

顧客提供のキー(SSE-C)とともにサーバー側暗号化を使用する場合、CLIを使用して、暗号化または再暗号化プロセス中にSSE-Cキーを指定する必要があります。CLIを使用すると、異なるSSE-Cキー、Oracleによって管理されるキー、またはボールト・サービスを通じて管理するキーでオブジェクトを再暗号化できます。コンソールでは、バケットに割り当てられたOracle管理キーの最新バージョン、またはVaultキーの最新バージョンを使用するようにオブジェクトを再暗号化できるのみです。選択したキー・バージョンがバケットに割り当てられたバージョンかどうかは関係ありません。

コンソールを使用してこのタスクを実行する方法については、コンソールを使用してオブジェクトを再暗号化するにはを参照してください。

CLIを使用してこのタスクを実行する方法については、CLIを使用してオブジェクトを再暗号化するにはを参照してください。