保存データに対する Azure Storage 暗号化Azure Storage encryption for data at rest

Azure Storage では、データはクラウドに永続化されるときに自動的に暗号化されます。Azure Storage automatically encrypts your data when persisting it to the cloud. 暗号化によってデータは保護され、組織のセキュリティおよびコンプライアンス コミットメントを満たすのに役立ちます。Encryption protects your data and to help you to meet your organizational security and compliance commitments. Azure Storage 内のデータは、利用可能な最強のブロック暗号の 1 つである 256 ビット AES 暗号化を使って透過的に暗号化および暗号化解除され、FIPS 140-2 に準拠しています。Data in Azure Storage is encrypted and decrypted transparently using 256-bit AES encryption, one of the strongest block ciphers available, and is FIPS 140-2 compliant. Azure Storage 暗号化は、Windows での BitLocker 暗号化に似ています。Azure Storage encryption is similar to BitLocker encryption on Windows.

Azure Storage 暗号化は、新規と既存のすべてのストレージ アカウントに対して有効にされ、無効にすることはできません。Azure Storage encryption is enabled for all new and existing storage accounts and cannot be disabled. データは既定で保護されるので、Azure Storage 暗号化を利用するために、コードまたはアプリケーションを変更する必要はありません。Because your data is secured by default, you don't need to modify your code or applications to take advantage of Azure Storage encryption.

ストレージ アカウントは、そのパフォーマンス レベル (Standard または Premium) またはデプロイ モデル (Azure Resource Manager またはクラシック) に関係なく、暗号化されます。Storage accounts are encrypted regardless of their performance tier (standard or premium) or deployment model (Azure Resource Manager or classic). Azure Storage のすべての冗長性オプションで暗号化がサポートされており、ストレージ アカウントのすべてのコピーが暗号化されます。All Azure Storage redundancy options support encryption, and all copies of a storage account are encrypted. BLOB、ディスク、ファイル、キュー、テーブルなど、すべての Azure Storage リソースが暗号化されます。All Azure Storage resources are encrypted, including blobs, disks, files, queues, and tables. すべてのオブジェクト メタデータも暗号化されます。All object metadata is also encrypted.

暗号化により、Azure Storage のパフォーマンスが影響を受けることはありません。Encryption does not affect Azure Storage performance. Azure Storage 暗号化に対する追加コストはありません。There is no additional cost for Azure Storage encryption.

Azure Storage 暗号化の基になっている暗号化モジュールについて詳しくは、「Cryptography API: Next Generation (暗号化 API: 次世代)」を参照してください。For more information about the cryptographic modules underlying Azure Storage encryption, see Cryptography API: Next Generation.

暗号化キーの管理についてAbout encryption key management

Microsoft のマネージド キーを利用してストレージ アカウントを暗号化することも、独自のキーで暗号化を管理することもできます。You can rely on Microsoft-managed keys for the encryption of your storage account, or you can manage encryption with your own keys. 独自のキーで暗号化を管理する場合は、次の 2 つのオプションがあります。If you choose to manage encryption with your own keys, you have two options:

  • ストレージ アカウント内のすべてのデータを暗号化および暗号化解除するために使用する "カスタマー マネージド キー" を指定できます。You can specify a customer-managed key to use for encrypting and decrypting all data in the storage account. カスタマー マネージド キーは、ストレージ アカウント内のすべてのサービスのすべてのデータを暗号化するために使用されます。A customer-managed key is used to encrypt all data in all services in your storage account.
  • BLOB ストレージの操作では、"カスタマー指定のキー" を指定できます。You can specify a customer-provided key on Blob storage operations. BLOB ストレージ に対して読み取りまたは書き込み要求を行うクライアントは、BLOB データの暗号化と暗号化解除の方法を細かく制御するために、要求に暗号化キーを含めることができます。A client making a read or write request against Blob storage can include an encryption key on the request for granular control over how blob data is encrypted and decrypted.

次の表では、Azure Storage 暗号化のキー管理オプションを比較しています。The following table compares key management options for Azure Storage encryption.

Microsoft のマネージド キーMicrosoft-managed keys カスタマー マネージド キーCustomer-managed keys カスタマー指定のキーCustomer-provided keys
暗号化/暗号化解除の操作Encryption/decryption operations AzureAzure AzureAzure AzureAzure
サポートされている Azure Storage サービスAzure Storage services supported AllAll BLOB ストレージ、Azure FilesBlob storage, Azure Files BLOB ストレージBlob storage
キー記憶域Key storage Microsoft キー ストアMicrosoft key store Azure Key VaultAzure Key Vault Azure Key Vault またはその他のキー ストアAzure Key Vault or any other key store
キーのローテーションの責任Key rotation responsibility MicrosoftMicrosoft 顧客Customer 顧客Customer
キー使用法Key usage MicrosoftMicrosoft Azure portal、Storage Resource Provider REST API、Azure Storage 管理ライブラリ、PowerShell、CLIAzure portal, Storage Resource Provider REST API, Azure Storage management libraries, PowerShell, CLI Azure Storage REST API (BLOB ストレージ)、Azure Storage クライアント ライブラリAzure Storage REST API (Blob storage), Azure Storage client libraries
キーへのアクセスKey access Microsoft のみMicrosoft only Microsoft、顧客Microsoft, Customer 顧客のみCustomer only

以降のセクションでは、キー管理の各オプションについてさらに詳しく説明します。The following sections describe each of the options for key management in greater detail.

Microsoft のマネージド キーMicrosoft-managed keys

既定では、ストレージ アカウントには Microsoft のマネージド暗号化キーが使われます。By default, your storage account uses Microsoft-managed encryption keys. ストレージ アカウントの暗号化の設定は、次の図のように、Azure portal[暗号化] セクションで確認できます。You can see the encryption settings for your storage account in the Encryption section of the Azure portal, as shown in the following image.

Microsoft のマネージド キーで暗号化されたアカウントを表示する

カスタマー マネージド キーCustomer-managed keys

独自のキーを使用して、ストレージ アカウントのレベルで Azure Storage 暗号化を管理できます。You can choose to manage Azure Storage encryption at the level of the storage account with your own keys. ストレージ アカウントのレベルでカスタマー マネージド キーを指定すると、そのキーは、BLOB、キュー、ファイル、テーブル データなど、ストレージ アカウント内のすべてのデータの暗号化および暗号化解除に使用されます。When you specify a customer-managed key at the level of the storage account, that key is used to encrypt and decrypt all data in the storage account, including blob, queue, file, and table data. カスタマー マネージド キーを使用すると、アクセス制御の作成、ローテーション、無効化、取り消しを、いっそう柔軟に行うことができます。Customer-managed keys offer greater flexibility to create, rotate, disable, and revoke access controls. また、データを保護するために使われる暗号化キーを監査することもできます。You can also audit the encryption keys used to protect your data.

カスタマー マネージド キーを格納するには、Azure Key Vault を使用する必要があります。You must use Azure Key Vault to store your customer-managed keys. 独自のキーを作成してキー コンテナーに格納することも、Azure Key Vault API を使ってキーを生成することもできます。You can either create your own keys and store them in a key vault, or you can use the Azure Key Vault APIs to generate keys. ストレージ アカウントとキー コンテナーは同じリージョンに存在していることが必要です。ただし、サブスクリプションは異なっていてもかまいません。The storage account and the key vault must be in the same region, but they can be in different subscriptions. Azure Key Vault の詳細については、「Azure Key Vault とは」をご覧ください。For more information about Azure Key Vault, see What is Azure Key Vault?.

次の図は、Azure Storage で Azure Active Directory と Azure Key Vault を使用して、カスタマー マネージド キーを使って要求を行う方法を示しています。This diagram shows how Azure Storage uses Azure Active Directory and Azure Key Vault to make requests using the customer-managed key:

Azure Storage でのカスタマー マネージド キーのしくみを示す図

次の一覧では、図の番号付きの手順について説明します。The following list explains the numbered steps in the diagram:

  1. Azure Key Vault 管理者が、ストレージ アカウントに関連付けられているマネージド ID に暗号化キーへのアクセス許可を付与します。An Azure Key Vault admin grants permissions to encryption keys to the managed identity that's associated with the storage account.
  2. Azure Storage 管理者が、ストレージ アカウントのカスタマー マネージド キーを使用して暗号化を構成します。An Azure Storage admin configures encryption with a customer-managed key for the storage account.
  3. Azure Storage は、ストレージ アカウントに関連付けられているマネージド ID を使用して、Azure Active Directory 経由で Azure Key Vault へのアクセスを認証します。Azure Storage uses the managed identity that's associated with the storage account to authenticate access to Azure Key Vault via Azure Active Directory.
  4. Azure Storage は、Azure Key Vault のカスタマー キーを使用してアカウント暗号化キーをラップします。Azure Storage wraps the account encryption key with the customer key in Azure Key Vault.
  5. 読み取り/書き込み操作の場合、Azure Storage は Azure Key Vault に要求を送信して、暗号化と暗号化解除の操作を実行するためにアカウント暗号化キーをラップおよびラップ解除します。For read/write operations, Azure Storage sends requests to Azure Key Vault to wrap and unwrap the account encryption key to perform encryption and decryption operations.

ストレージ アカウント上のカスタマー マネージド キーへのアクセスを取り消すには、Azure Key Vault PowerShell および Azure Key Vault CLI に関する記事をご覧ください。To revoke access to customer-managed keys on the storage account, see Azure Key Vault PowerShell and Azure Key Vault CLI. アクセスを取り消すと、Azure Storage が暗号化キーにアクセスできなくなるため、ストレージ アカウント内の全データへのアクセスが事実上ブロックされます。Revoking access effectively blocks access to all data in the storage account, as the encryption key is inaccessible by Azure Storage.

Azure マネージド ディスクに対しては、カスタマー マネージド キーはサポートされていません。Customer-managed keys are not supported for Azure managed disks.

Azure Storage でカスタマー マネージド キーを使う方法については、次の記事をご覧ください。To learn how to use customer-managed keys with Azure Storage, see one of these articles:

重要

カスタマー マネージド キーは、Azure Active Directory (Azure AD) の 1 つの機能である Azure リソース用マネージド ID に依存します。Customer-managed keys rely on managed identities for Azure resources, a feature of Azure Active Directory (Azure AD). Azure portal でカスタマー マネージド キーを構成すると、内部でマネージド ID がストレージ アカウントに自動的に割り当てられます。When you configure customer-managed keys in the Azure portal, a managed identity is automatically assigned to your storage account under the covers. その後、サブスクリプション、リソース グループ、またはストレージ アカウントを 1 つの Azure AD ディレクトリから別のディレクトリに移動した場合、そのストレージ アカウントに関連付けられているマネージド ID は新しいテナントに転送されないため、カスタマー マネージド キーが機能しなくなることがあります。If you subsequently move the subscription, resource group, or storage account from one Azure AD directory to another, the managed identity associated with the storage account is not transferred to the new tenant, so customer-managed keys may no longer work. 詳細については、「Azure リソース用マネージド ID に関する FAQ と既知の問題」の中の「Azure AD ディレクトリ間のサブスクリプションの転送」を参照してください。For more information, see Transferring a subscription between Azure AD directories in FAQs and known issues with managed identities for Azure resources.

カスタマー指定のキー (プレビュー)Customer-provided keys (preview)

Azure BLOB ストレージに対して要求を行うクライアントには、個々の要求に対して暗号化キーを指定するオプションがあります。Clients making requests against Azure Blob storage have the option to provide an encryption key on an individual request. 要求に暗号化キーを含めると、BLOB ストレージ操作の暗号化設定をきめ細かく制御できます。Including the encryption key on the request provides granular control over encryption settings for Blob storage operations. カスタマー指定のキー (プレビュー) は、Azure Key Vault または別のキー ストアに格納できます。Customer-provided keys (preview) can be stored in Azure Key Vault or in another key store.

読み取り操作と書き込み操作の暗号化Encrypting read and write operations

クライアント アプリケーションが要求に対して暗号化キーを指定すると、Azure Storage は BLOB データの読み取りおよび書き込み中に暗号化と暗号化解除を透過的に実行します。When a client application provides an encryption key on the request, Azure Storage performs encryption and decryption transparently while reading and writing blob data. 暗号化キーの SHA-256 ハッシュは BLOB の内容と共に書き込まれ、BLOB に対する以降のすべての操作で同じ暗号化キーが使用されるようにするために使われます。A SHA-256 hash of the encryption key is written alongside a blob's contents and is used to verify that all subsequent operations against the blob use the same encryption key. Azure Storage は、クライアントが要求と共に送信する暗号化キーの格納も管理も行いません。Azure Storage does not store or manage the encryption key that the client sends with the request. 暗号化または暗号化解除のプロセスが完了するとすぐに、キーは安全に破棄されます。The key is securely discarded as soon as the encryption or decryption process is complete.

クライアントがカスタマー指定のキーを使用して BLOB を作成または更新した場合は、その BLOB に対する以降の読み取り要求と書き込み要求でもそのキーを指定する必要があります。When a client creates or updates a blob using a customer-provided key, then subsequent read and write requests for that blob must also provide the key. カスタマー指定のキーで既に暗号化されている BLOB の要求にキーが指定されていない場合、要求はエラーコード 409 (競合) で失敗します。If the key is not provided on a request for a blob that has already been encrypted with a customer-provided key, then the request fails with error code 409 (Conflict).

クライアント アプリケーションが要求で暗号化キーを送信し、ストレージ アカウントも Microsoft のマネージド キーまたはカスタマー マネージド キーを使用して暗号化されている場合、Azure Storage は、要求で指定されたキーを暗号化と暗号化解除に使用します。If the client application sends an encryption key on the request, and the storage account is also encrypted using a Microsoft-managed key or a customer-managed key, then Azure Storage uses the key provided on the request for encryption and decryption.

暗号化キーを要求の一部として送信するために、クライアントは HTTPS を使用して Azure Storage へのセキュリティで保護された接続を確立する必要があります。To send the encryption key as part of the request, a client must establish a secure connection to Azure Storage using HTTPS.

各 BLOB スナップショットには、独自の暗号化キーを保持できます。Each blob snapshot can have its own encryption key.

カスタマー指定のキーを指定するための要求ヘッダーRequest headers for specifying customer-provided keys

REST 呼び出しの場合、クライアントは次のヘッダーを使用して、要求の暗号化キー情報を BLOB ストレージに安全に渡すことができます。For REST calls, clients can use the following headers to securely pass encryption key information on a request to Blob storage:

要求ヘッダーRequest Header 説明Description
x-ms-encryption-key 書き込み要求と読み取り要求の両方に必要です。Required for both write and read requests. Base64 でエンコードされた AES-256 暗号化キー値です。A Base64-encoded AES-256 encryption key value.
x-ms-encryption-key-sha256 書き込み要求と読み取り要求の両方に必要です。Required for both write and read requests. 暗号化キーの Base64 でエンコードされた SHA256 です。The Base64-encoded SHA256 of the encryption key.
x-ms-encryption-algorithm 書き込み要求の場合は必須、読み取り要求の場合は省略可能です。Required for write requests, optional for read requests. 指定されたキーを使用してデータを暗号化するときに使用するアルゴリズムを指定します。Specifies the algorithm to use when encrypting data using the given key. AES256 である必要があります。Must be AES256.

要求に対する暗号化キーの指定は省略できます。Specifying encryption keys on the request is optional. ただし、上記のいずれかのヘッダーを書き込み操作に指定する場合は、それらのすべてを指定する必要があります。However, if you specify one of the headers listed above for a write operation, then you must specify all of them.

カスタマー指定のキーをサポートしている BLOB ストレージ操作Blob storage operations supporting customer-provided keys

次の BLOB ストレージ操作では、要求でカスタマー指定の暗号化キーを送信することをサポートしています。The following Blob storage operations support sending customer-provided encryption keys on a request:

カスタマー指定のキーのローテーションRotate customer-provided keys

要求で渡される暗号化キーをローテーションするには、BLOB をダウンロードし、新しい暗号化キーを使用して再アップロードします。To rotate an encryption key passed on the request, download the blob and re-upload it with the new encryption key.

重要

Azure portal を使用して、要求で指定されたキーで暗号化されたコンテナーまたは BLOB への読み取りおよび書き込みを行うことはできません。The Azure portal cannot be used to read from or write to a container or blob that is encrypted with a key provided on the request.

BLOB ストレージに対する要求で指定した暗号化キーは、Azure Key Vault などのセキュリティで保護されたキー ストア内で必ず保護してください。Be sure to protect the encryption key that you provide on a request to Blob storage in a secure key store like Azure Key Vault. 暗号化キーを使用せずにコンテナーまたは BLOB に対して書き込み操作を試みると、操作は失敗し、そのオブジェクトにアクセスできなくなります。If you attempt a write operation on a container or blob without the encryption key, the operation will fail, and you will lose access to the object.

例:カスタマー指定のキーを使用して .NET で BLOB をアップロードするExample: Use a customer-provided key to upload a blob in .NET

次の例では、カスタマー指定のキーを作成し、そのキーを使用して BLOB をアップロードします。The following example creates a customer-provided key and uses that key to upload a blob. このコードは、1 つのブロックをアップロードしてから、ブロック一覧をコミットして Azure Storage に BLOB を書き込みます。The code uploads a block, then commits the block list to write the blob to Azure Storage. キーは、CustomerProvidedKey プロパティを設定することで、BlobRequestOptions オブジェクトに指定されます。The key is provided on the BlobRequestOptions object by setting the CustomerProvidedKey property.

キーは、AesCryptoServiceProvider クラスを使用して作成されます。The key is created with the AesCryptoServiceProvider class. コードでこのクラスのインスタンスを作成するには、System.Security.Cryptography 名前空間を参照する using ステートメントを追加します。To create an instance of this class in your code, add a using statement that references the System.Security.Cryptography namespace:

public static void UploadBlobWithClientKey(CloudBlobContainer container)
{
    // Create a new key using the Advanced Encryption Standard (AES) algorithm.
    AesCryptoServiceProvider keyAes = new AesCryptoServiceProvider();

    // Specify the key as an option on the request.
    BlobCustomerProvidedKey customerProvidedKey = new BlobCustomerProvidedKey(keyAes.Key);
    var options = new BlobRequestOptions
    {
        CustomerProvidedKey = customerProvidedKey
    };

    string blobName = "sample-blob-" + Guid.NewGuid();
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);

    try
    {
        // Create an array of random bytes.
        byte[] buffer = new byte[1024];
        Random rnd = new Random();
        rnd.NextBytes(buffer);

        using (MemoryStream sourceStream = new MemoryStream(buffer))
        {
            // Write the array of random bytes to a block.
            int blockNumber = 1;
            string blockId = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("BlockId{0}",
                blockNumber.ToString("0000000"))));

            // Write the block to Azure Storage.
            blockBlob.PutBlock(blockId, sourceStream, null, null, options, null);

            // Commit the block list to write the blob.
            blockBlob.PutBlockList(new List<string>() { blockId }, null, options, null);
        }
    }
    catch (StorageException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Azure Storage 暗号化とディスク暗号化Azure Storage encryption versus disk encryption

Azure Storage 暗号化では、すべての Azure ストレージ アカウントとそれに含まれるリソースが暗号化され、それには Azure 仮想マシンのディスクをバックアップするページ BLOB が含まれます。With Azure Storage encryption, all Azure Storage accounts and the resources they contain are encrypted, including the page blobs that back Azure virtual machine disks. さらに、Azure 仮想マシンのディスクは Azure Disk Encryption で暗号化することもできます。Additionally, Azure virtual machine disks may be encrypted with Azure Disk Encryption. Azure Disk Encryption では、業界標準である BitLocker (Windows 上) および DM-Crypt (Linux 上) が使われており、Azure Key Vault と統合されたオペレーティング システム ベースの暗号化ソリューションが提供されます。Azure Disk Encryption uses industry-standard BitLocker on Windows and DM-Crypt on Linux to provide operating system-based encryption solutions that are integrated with Azure Key Vault.

次の手順Next steps