保存データに対する Azure Storage 暗号化

Azure Storage では、サーバー側暗号化 (SSE) を使用して、クラウドに永続化されるときにデータを自動的に暗号化します。 Azure Storage 暗号化によってデータは保護され、組織のセキュリティおよびコンプライアンス コミットメントを満たすのに役立ちます。

Microsoft は、ほとんどのシナリオにおいて、サービス側の暗号化を使用してデータを保護することをお勧めします。 ただし、Blob Storage と Queue Storage 用の Azure Storage クライアント ライブラリでは、クライアント上のデータを暗号化する必要があるお客様にもクライアント側の暗号化が提供されます。 詳細については、「BLOB とキューのクライアント側暗号化」を参照してください。

Azure Storage のサービス側の暗号化について

Azure Storage 内のデータは、利用可能な最強のブロック暗号の 1 つである 256 ビット AES 暗号化を使って透過的に暗号化および暗号化解除され、FIPS 140-2 に準拠しています。 Azure Storage 暗号化は、Windows での BitLocker 暗号化に似ています。

Azure Storage 暗号化は、Resource Manager と従来のストレージ アカウントの両方を含む、すべてのストレージ アカウントで有効になります。 Azure Storage 暗号化を無効にすることはできません。 データは既定で保護されるので、Azure Storage 暗号化を利用するために、コードまたはアプリケーションを変更する必要はありません。

ストレージ アカウント内のデータは、パフォーマンス レベル (Standard または Premium)、アクセス層 (ホットまたはクール)、デプロイ モデル (Azure Resource Manager またはクラシック) に関係なく、暗号化されます。 アーカイブ層のすべての BLOB も暗号化されます。 すべての Azure Storage 冗長性オプションは暗号化をサポートし、geo レプリケーションが有効になっている場合は、プライマリとセカンダリ両方のリージョンのすべてのデータが暗号化されます。 BLOB、ディスク、ファイル、キュー、テーブルなど、すべての Azure Storage リソースが暗号化されます。 すべてのオブジェクト メタデータも暗号化されます。 Azure Storage 暗号化に対する追加コストはありません。

2017 年 10 月 20 日より後に Azure Storage に書き込まれたすべてのブロック BLOB、追加 BLOB、またはページ BLOB は暗号化されます。 この日付より前に作成された BLOB は、引き続きバックグラウンド プロセスによって暗号化されます。 2017 年 10 月 20 日より前に作成された BLOB を強制的に暗号化するには、BLOB を書き換えることができます。 BLOB の暗号化状態を確認する方法については、「BLOB の暗号化状態を確認する」を参照してください。

Azure Storage 暗号化の基になっている暗号化モジュールについて詳しくは、「Cryptography API: Next Generation (暗号化 API: 次世代)」を参照してください。

Azure マネージド ディスクの暗号化とキー管理に関する詳細については、「Azure Managed Disks のサーバー側暗号化」のページを参照してください。

暗号化キーの管理について

既定では、新しいストレージ アカウント内のデータは Microsoft マネージド キーで暗号化されます。 引き続き Microsoft マネージド キーを利用してデータを暗号化することも、独自のキーで暗号化を管理することもできます。 独自のキーで暗号化を管理する場合は、次の 2 つのオプションがあります。 どちらかの種類のキー管理またはその両方を使用できます。

  • Blob Storage と Azure Files でデータの暗号化と復号に使用する目的で "カスタマー マネージド キー" を指定できます。1,2 カスタマー マネージド キーは Azure Key Vault または Azure Key Vault Managed Hardware Security Model (HSM) に保管する必要があります。 カスタマーマネージド キーの詳細については、Azure Storage 暗号化へのカスタマーマネージド キーの使用に関するページを参照してください。
  • Blob Storage の操作では、"カスタマー指定のキー" を指定できます。 Blob Storage に対して読み取りまたは書き込み要求を行うクライアントは、BLOB データの暗号化と暗号化解除の方法を細かく制御するために、要求に暗号化キーを含めることができます。 カスタマー指定のキーの詳細については、「BLOB ストレージに対する要求で暗号化キーを指定する」を参照してください。

既定では、ストレージ アカウントは、そのストレージ アカウント全体をスコープとするキーで暗号化されます。 暗号化スコープを使用すると、コンテナーまたは個々の BLOB にスコープ設定されたキーで暗号化を管理できます。 暗号化スコープを使用すると、異なる顧客が所有する、同じストレージ アカウントに存在するデータの間にセキュリティで保護された境界を作成できます。 暗号化の種類として、Microsoft のマネージド キーまたはカスタマー マネージド キーを使用できます。 暗号化スコープの詳細については、Blob Storage の暗号化スコープに関する記事を参照してください。

次の表では、Azure Storage 暗号化のキー管理オプションを比較しています。

キー管理パラメーター Microsoft のマネージド キー カスタマー マネージド キー カスタマー指定のキー
暗号化/暗号化解除の操作 Azure Azure Azure
サポートされている Azure Storage サービス All Blob Storage、Azure Files1、2 Blob Storage
キー記憶域 Microsoft キー ストア Azure Key Vault または Key Vault HSM お客様独自のキー ストア
キーのローテーションの責任 Microsoft Customer Customer
キー コントロール Microsoft Customer Customer
キー スコープ アカウント (既定)、コンテナー、または BLOB アカウント (既定)、コンテナー、または BLOB 該当なし

1 Queue storage でのカスタマー マネージド キーの使用をサポートするアカウントの作成については、キューのカスタマー マネージド キーをサポートするアカウントの作成に関するページを参照してください。
2 Table Storage でのカスタマー マネージド キーの使用をサポートするアカウントの作成については、テーブルのカスタマー マネージド キーをサポートするアカウントの作成に関するページを参照してください。

Note

Microsoft マネージド キーは、コンプライアンス要件に応じて適切に交換されます。 特定のキー交換の要件がある場合は、ユーザーが自分で交換を管理および監査できるように、カスタマー マネージド キーに移行することをお勧めします。

インフラストラクチャの暗号化を使用してデータを二重に暗号化する

データのセキュリティ保護について高いレベルの保証が必要な顧客は、Azure Storage インフラストラクチャ レベルで 256 ビットの AES 暗号化を有効にすることもできます。 インフラストラクチャの暗号化が有効な場合、ストレージ アカウントのデータは、2 つの異なる暗号化アルゴリズムと 2 つの異なるキーを使用して、2 回 (サービス レベルで 1 回とインフラストラクチャ レベルで 1 回) 暗号化されます。 Azure Storage データの二重暗号化を使用すると、暗号化アルゴリズムまたはキーのいずれかが侵害される可能性があるシナリオから保護されます。 このシナリオでは、追加の暗号化レイヤーによって引き続きデータが保護されます。

サービスレベルの暗号化では、Azure Key Vault での Microsoft マネージド キーまたはカスタマー マネージド キーの使用をサポートしています。 インフラストラクチャレベルの暗号化は Microsoft マネージド キーに依存し、常に別のキーが使用されます。

インフラストラクチャの暗号化を有効にするストレージ アカウントを作成する方法の詳細については、「データの二重暗号化のためにインフラストラクチャ暗号化を有効にしてストレージ アカウントを作成する」を参照してください。

BLOB とキューのクライアント側暗号化

.NET、Java、および Python 用の Azure Blob Storage クライアント ライブラリでは、Azure Storage にアップロードする前にクライアント アプリケーション内のデータを暗号化し、クライアントにダウンロードするときにデータの暗号化を解除することができます。 .NET および Python 用の Queue Storage クライアント ライブラリでは、クライアント側の暗号化もサポートされています。

Note

クライアント側の暗号化ではなく、Azure Storage によって提供されるサービス側の暗号化機能を使用してデータを保護することを検討してください。

Blob Storage および Queue Storage のクライアント ライブラリでは、ユーザー データを暗号化するために AES が使用されます。 クライアント ライブラリでは、次の 2 つのバージョンのクライアント側暗号化を使用できます。

  • バージョン 2 では、AES で Galois/Counter Mode (GCM) モードが使用されます。 Azure Blob Storage と Queue Storage SDK では、v2 を使用したクライアント側の暗号化がサポートされています。
  • バージョン 1 では、AES で暗号ブロック チェーン (CBC) モードが使用されます。 Azure Blob Storage と Queue StorageとTable Storage SDK では、v1 を使用したクライアント側の暗号化がサポートされています。

警告

クライアント ライブラリでの CBC モードの実装を原因とするセキュリティの脆弱性により、クライアント側暗号化 v1の使用は推奨されなくなりました。 このセキュリティ脆弱性の詳細については、セキュリティの脆弱性に対処するために Azure Storage で行われた SDK のクライアント側暗号化の更新に関するページを参照してください。 現在v1を使用している場合は、クライアント側暗号化v2 を使用するようにアプリケーションを更新し、データを移行することをお勧めします。

Azure Table Storage SDK では、v1のクライアント側暗号化のみがサポートされています。 Table Storage でクライアント側暗号化を使用することはお勧めできません。

次の表では、それぞれのクライアント ライブラリがサポートしているクライアント側暗号化のバージョン、およびクライアント側暗号化 v2 に移行するためのガイドラインを示しています。

クライアント ライブラリ サポートされているクライアント側暗号化のバージョン 推奨される移行 その他のガイダンス
Blob Storage クライアント ライブラリ - .NET 用 (バージョン 12.13.0 以降)、Java 用 (バージョン 12.18.0 以降)、Python 用 (バージョン 12.13.0 以降) 2.0

1.0 (下位互換性のみを目的としています)
クライアント側暗号化 v2 を使用するようにコードを更新します。

暗号化されたデータをダウンロードして暗号化を解除し、クライアント側暗号化 v2 で再暗号化します。
BLOB のクライアント側暗号化
Blob Storage クライアント ライブラリ - .NET 用 (バージョン 12.12.0 以下)、Java 用 (バージョン 12.17.0 以下)、Python 用 (バージョン 12.12.0 以下) 1.0 (非推奨) クライアント側暗号化 v2 がサポートされている Blob Storage SDK のバージョンを使用するようにアプリケーションを更新します。 詳細については、「クライアント側暗号化の SDK サポート マトリックス」を参照してください。

クライアント側暗号化 v2 を使用するようにコードを更新します。

暗号化されたデータをダウンロードして暗号化を解除し、クライアント側暗号化 v2 で再暗号化します。
BLOB のクライアント側暗号化
Queue Storage クライアント ライブラリ - .NET 用 (バージョン 12.11.0 以降)、Python 用 (バージョン 12.4 以降) 2.0

1.0 (下位互換性のみを目的としています)
クライアント側暗号化 v2 を使用するようにコードを更新します。 キューのクライアント側暗号化
Queue Storage クライアント ライブラリ - .NET 用 (バージョン 12.10.0 以下)、Python 用 (バージョン 12.3.0 以下) 1.0 (非推奨) クライアント側暗号化 v2 がサポートされている Queue Storage SDK のバージョンを使用するようにアプリケーションを更新します。 「クライアント側暗号化の SDK サポート マトリックス」を参照してください

クライアント側暗号化 v2 を使用するようにコードを更新します。
キューのクライアント側暗号化
.NET、Java、Python 用 Table Storage クライアント ライブラリ 1.0 (非推奨) 使用できません。 該当なし

次のステップ