[アーティクル] 03/23/2023
5 人の共同作成者
フィードバック
この記事の内容
Azure Storage は、保存されているストレージ アカウント内のすべてのデータを暗号化します。 規定では、データは Microsoft のマネージド キーで暗号化されます。 暗号化キーをさらに制御するために、独自のキーを管理することができます。 カスタマー マネージド キーは、Azure Key Vault または Azure Key Vault Managed Hardware Security Model (HSM) に格納する必要があります。
この記事では、新しいストレージ アカウントを作成するときにカスタマー マネージド キーによる暗号化を構成する方法について説明します。 カスタマー マネージド キーは、キー コンテナーに格納されます。
既存のストレージ アカウントのカスタマー マネージド キーを構成する方法については、「Azure Key Vault に既存のストレージ アカウントのカスタマー マネージド キーを構成する 」を参照してください。
注意
Azure Key Vault と Azure Key Vault マネージド HSM では、カスタマー マネージド キーの構成用に同じ API と管理インターフェイスがサポートされています。 Azure Key Vault でサポートされているすべてのアクションが、Azure Key Vault マネージド HSM でもサポートされます。
新規または既存のキー コンテナーを使用して、カスタマー マネージド キーを格納することができます。 ストレージ アカウントとキーコンテナーは、同じテナント内の異なるリージョンまたはサブスクリプションに存在する場合があります。 Azure Key Vault の詳細については、Azure Key Vault の概要 と Azure Key Vault とは何であるか に関する記事を参照してください。
Azure Storage 暗号化でカスタマー マネージド キーを使うには、キー コンテナーに対して論理的な削除と消去保護の両方を有効にする必要があります。 新しいキー コンテナーを作成すると、論理的な削除は既定で有効になり、無効にすることはできません。 消去保護は、キー コンテナーの作成時または作成後に有効にすることができます。
Azure Key Vault では、Azure RBAC アクセス許可モデルを使用した Azure RBAC による認可がサポートされています。 Microsoft では、キー コンテナー アクセス ポリシーに対して Azure RBAC アクセス許可モデルを使用することをお勧めします。 詳細については、「 Azure RBAC を使用して Azure キー コンテナーへのアクセス許可をアプリケーションに付与する 」を参照してください。
Azure portal を使ってキー コンテナーを作成する方法を学習するには、「クイック スタート: Azure portal を使用してキー コンテナーを作成する 」を参照してください。 キー コンテナーを作成するときに、次の図に示すように、 [消去保護を有効にします] を選択します。
既存のキー コンテナーで消去保護を有効にするには、次の手順を実行します。
Azure portal で、ご自身のキー コンテナーに移動します。
[設定] の [プロパティ] を選択します。
[消去保護] セクションで、 [消去保護を有効にします] を選択します。
PowerShell を使用して新しいキー コンテナーを作成するには、バージョン 2.0.0 以降の Az.KeyVault PowerShell モジュールをインストールします。 次に、New-AzKeyVault を呼び出して新しいキー コンテナーを作成します。 バージョン 2.0.0 以降の Az.KeyVault モジュールでは、新しいキー コンテナーを作成するときには、既定で、論理的な削除が有効になります。
次の例では、論理的な削除と消去保護を有効にして新しいキー コンテナーを作成しています。 キー コンテナーのアクセス許可モデルは、Azure RBAC を使用するように設定されています。 角かっこ内のプレースホルダー値を独自の値で置き換えてください。
$rgName = "<resource_group>"
$location = "<location>"
$kvName = "<key-vault>"
$keyVault = New-AzKeyVault -Name $kvName `
-ResourceGroupName $rgName `
-Location $location `
-EnablePurgeProtection `
-EnableRbacAuthorization
PowerShell を使用して既存のキー コンテナーで消去保護を有効にする方法については、Azure Key Vault の復旧の概要 に関する記事を参照してください。
キー コンテナーを作成したら、Key Vault Crypto Officer ロールを自分自身に割り当てる必要があります。 このロールを使用すると、キー コンテナーにキーを作成できます。 次の例では、このロールをユーザーに割り当てて、スコープをキー コンテナーにします。
New-AzRoleAssignment -SignInName "<user-email>" `
-RoleDefinitionName "Key Vault Crypto Officer" `
-Scope $keyVault.ResourceId
PowerShell で RBAC ロールを割り当てる方法の詳細については、「Azure PowerShell を使用して Azure ロールを割り当てる 」を参照してください。
Azure CLI を使用して新しいキー コンテナーを作成するには、az keyvault create を呼び出します。 次の例では、論理的な削除と消去保護を有効にして新しいキー コンテナーを作成しています。 キー コンテナーのアクセス許可モデルは、Azure RBAC を使用するように設定されています。 角かっこ内のプレースホルダー値を独自の値で置き換えてください。
rgName="<resource_group>"
location="<location>"
kvName="<key-vault>"
az keyvault create \
--name $kvName \
--resource-group $rgName \
--location $location \
--enable-purge-protection \
--enable-rbac-authorization
Azure CLI を使用して既存のキー コンテナーで消去保護を有効にする方法については、Azure Key Vault の復旧の概要 に関する記事を参照してください。
キー コンテナーを作成したら、Key Vault Crypto Officer ロールを自分自身に割り当てる必要があります。 このロールを使用すると、キー コンテナーにキーを作成できます。 次の例では、このロールをユーザーに割り当てて、スコープをキー コンテナーにします。
kvResourceId=$(az keyvault show --resource-group $rgName \
--name $kvName \
--query id \
--output tsv)
az role assignment create --assignee "<user-email>" \
--role "Key Vault Crypto Officer" \
--scope $kvResourceId
Azure CLI で RBAC ロールを割り当てる方法の詳細については、「Azure CLI を使用して Azure ロールを割り当てる 」を参照してください。
キーを追加する
次に、キー コンテナーにキーを追加します。 キーを追加する前に、Key Vault Crypto Officer ロールが自分に割り当てられていることを確認してください。
Azure Storage の暗号化では、2,048、3,072、および 4,096 のサイズの RSA キーと RSA-HSM キーがサポートされています。 サポートされているキーの種類の詳細については、「キーについて 」を参照してください。
PowerShell を使用してキーを追加するには、Add-AzKeyVaultKey を呼び出します。 角かっこ内のプレースホルダー値を独自の値に置き換え、前の例で定義した変数を使用してください。
$keyName = "<key-name>"
$key = Add-AzKeyVaultKey -VaultName $keyVault.VaultName `
-Name $keyName `
-Destination 'Software'
Azure CLI を使用してキーを追加するには、az keyvault key create を呼び出します。 角かっこ内のプレースホルダー値を独自の値で置き換えてください。
keyName="<key-name>"
az keyvault key create \
--name $keyName \
--vault-name $kvName
ユーザー割り当てマネージド ID を使用してキー コンテナーへのアクセスを承認する
新しいストレージ アカウントのカスタマー マネージド キーを有効にする場合は、ユーザー割り当てマネージド ID を指定する必要があります。 既存のストレージ アカウントでは、ユーザー割り当てマネージド ID またはシステム割り当てマネージド ID のいずれかを使用してカスタマー マネージド キーを構成することがサポートされています。
ユーザー割り当てマネージド ID を使用してカスタマー マネージド キーを構成する場合、ユーザー割り当てマネージド ID を使用して、キーを含むキー コンテナーへのアクセスが認可されます。 ユーザー割り当て ID はカスタマー マネージド キーを構成する前に作成する必要があります。
ユーザー割り当てマネージド ID は、スタンドアロンの Azure リソースです。 ユーザー割り当てのマネージド ID の詳細については、「マネージド ID の種類 」を参照してください。 ユーザー割り当てマネージド ID を作成して管理する方法については、「ユーザー割り当てマネージド ID の管理 」を参照してください。
ユーザー割り当てマネージド ID には、キー コンテナー内のキーにアクセスするためのアクセス許可が必要です。 Key Vault Crypto Service Encryption User ロールを、キー コンテナー スコープを持つユーザー割り当てマネージド ID に割り当てて、これらのアクセス許可を付与します。
ユーザー割り当てマネージド ID でカスタマー マネージド キーを構成する前に、キー コンテナーにスコープ設定されたユーザー割り当てマネージド ID に Key Vault Crypto Service Encryption User ロールを割り当てる必要があります。 このロールは、ユーザー割り当てマネージド ID に、キー コンテナー内のキーにアクセスするためのアクセス許可を付与します。 Azure portal を使用して Azure RBAC ロールを割り当てる方法の詳細については、「Azure portal を使用して Azure ロールを割り当てる 」を参照してください。
Azure portal を使用してカスタマー マネージド キーを構成する場合は、ポータルのユーザー インターフェイスから既存のユーザー割り当て ID を選択できます。
次の例は、ユーザー割り当てマネージド ID を取得し、キー コンテナーにスコープ設定された必要な RBAC ロールをその ID に割り当てる方法を示しています。 角かっこ内のプレースホルダー値を独自の値に置き換え、前の例で定義した変数を使用してください。
$userIdentity = Get-AzUserAssignedIdentity -Name <user-assigned-identity> `
-ResourceGroupName $rgName
$principalId = $userIdentity.PrincipalId
New-AzRoleAssignment -ObjectId $principalId `
-RoleDefinitionName "Key Vault Crypto Service Encryption User" `
-Scope $keyVault.ResourceId
次の例は、ユーザー割り当てマネージド ID を取得し、キー コンテナーにスコープ設定された必要な RBAC ロールをその ID に割り当てる方法を示しています。 角かっこ内のプレースホルダー値を独自の値に置き換え、前の例で定義した変数を使用してください。
identityResourceId=$(az identity show --name <user-assigned-identity> \
--resource-group $rgName \
--query id \
--output tsv)
principalId=$(az identity show --name <user-assigned-identity> \
--resource-group $rgName \
--query principalId \
--output tsv)
az role assignment create --assignee-object-id $principalId \
--role "Key Vault Crypto Service Encryption User" \
--scope $kvResourceId \
--assignee-principal-type ServicePrincipal
新しいストレージ アカウントでカスタマー マネージド キーを使用して暗号化を構成する場合は、関連付けられているキー コンテナーで新しいバージョンが使用可能になるたびに、Azure Storage 暗号化に使用するキー バージョンを自動更新することを選択できます。 または、キーのバージョンが手動で更新されるまで暗号化に使用するキーのバージョンを明示的に指定できます。
ストレージ アカウントの作成時にカスタマー マネージド キーを構成する場合は、キー コンテナーへのアクセスの承認に既存のユーザー割り当てマネージド ID を使用する必要があります。 ユーザー割り当てマネージド ID には、キー コンテナーにアクセスするための適切なアクセス許可が必要です。 詳細については、Azure Key Vault に対する認証 に関する記事を参照してください。
Azure Storage では、暗号化に使用されているカスタマー マネージド キーを、キー コンテナーの最新キー バージョンを使用するように自動更新できます。 Azure Storage では、新しいキー バージョンの確認のため、キー コンテナーが毎日チェックされます。 新しいバージョンが使用可能になると、Azure Storage は自動的に、暗号化に最新バージョンのキーの使用を開始します。
重要
Azure Storage では、新しいキー バージョンの確認のため、キー コンテナーが 1 日に 1 回だけチェックされます。 キーを交換するときは、必ず 24 時間待って、古いバージョンを無効化するようにしてください。
キーのバージョンを自動更新するように新しいストレージ アカウントでカスタマー マネージド キーを構成するには、次の手順を実行します。
Azure portal で [Storage accounts] (ストレージ アカウント) ページに移動し、[作成] ボタンを選択して新しいアカウントを作成します。
「ストレージ アカウントを作成する 」に示されている手順に従って、[基本] 、[詳細設定] 、[ネットワーキング] 、[データ保護] の各タブのフィールドに入力します。
[暗号化] タブの [カスタマー マネージド キーのサポートを有効にする] フィールドで、カスタマー マネージド キーのサポートを有効にするサービスを指定します。
[Encryption type] (暗号化の種類) フィールドで、[Customer-managed keys (CMK)] (カスタマー マネージド キー (CMK)) を選択します。
[暗号化キー] フィールドで、[キー コンテナーとキーを選択する] を選択し、キー コンテナーとキーを指定します。
[ユーザー割り当て ID] フィールドで、既存のユーザー割り当てマネージド ID を選択します。
[確認] ボタンを選択して検証し、アカウントを作成します。
新しいストレージ アカウントの作成時にキー バージョンを手動で更新して、カスタマー マネージド キーを構成することもできます。 「キー バージョンを手動で更新するように暗号化を構成する 」で説明されている手順に従います。
キー バージョンを自動更新するように新しいストレージ アカウントでカスタマー マネージド キーを構成するには、次の例に示すように New-AzStorageAccount を呼び出します。 ユーザー割り当てマネージド ID のリソース ID として前に作成した変数を使用します。 キー コンテナーの URI とキー名も必要です。
$accountName = "<storage-account>"
New-AzStorageAccount -ResourceGroupName $rgName `
-Name $accountName `
-Kind StorageV2 `
-SkuName Standard_LRS `
-Location $location `
-AllowBlobPublicAccess $false `
-IdentityType SystemAssignedUserAssigned `
-UserAssignedIdentityId $userIdentity.Id `
-KeyVaultUri $keyVault.VaultUri `
-KeyName $key.Name `
-KeyVaultUserAssignedIdentityId $userIdentity.Id
キー バージョンを自動更新するように新しいストレージ アカウントでカスタマー マネージド キーを構成するには、次の例に示すように az storage account create を呼び出します。 ユーザー割り当てマネージド ID のリソース ID として前に作成した変数を使用します。 キー コンテナーの URI とキー名も必要です。
accountName="<storage-account>"
az storage account create \
--name $accountName \
--resource-group $rgName \
--location $location \
--sku Standard_LRS \
--kind StorageV2 \
--identity-type SystemAssigned,UserAssigned \
--user-identity-id $identityResourceId \
--encryption-key-vault <key-vault-uri> \
--encryption-key-name $keyName \
--encryption-key-source Microsoft.Keyvault \
--key-vault-user-identity-id $identityResourceId
キーのバージョンを手動で更新する場合は、ストレージ アカウントの作成中、カスタマー マネージド キーによる暗号化を構成するときに、そのバージョンを明示的に指定します。 この場合、キー コンテナーで新しいバージョンが作成されると、Azure Storage でキー バージョンが自動的に更新されません。 新しいキー バージョンを使用するには、Azure Storage の暗号化に使用されるバージョンを手動で更新する必要があります。
ストレージ アカウントの作成時にカスタマー マネージド キーを構成する場合は、キー コンテナーへのアクセスの承認に既存のユーザー割り当てマネージド ID を使用する必要があります。 ユーザー割り当てマネージド ID には、キー コンテナーにアクセスするための適切なアクセス許可が必要です。 詳細については、Azure Key Vault に対する認証 に関する記事を参照してください。
Azure portal でキーのバージョンを手動更新するようにカスタマー マネージド キーを構成するには、ストレージ アカウントの作成中に、バージョンを含むキー URI を指定します。 URI としてキーを指定するには、次の手順のようにします。
Azure portal で [Storage accounts] (ストレージ アカウント) ページに移動し、[作成] ボタンを選択して新しいアカウントを作成します。
「ストレージ アカウントを作成する 」に示されている手順に従って、[基本] 、[詳細設定] 、[ネットワーキング] 、[データ保護] の各タブのフィールドに入力します。
[暗号化] タブの [カスタマー マネージド キーのサポートを有効にする] フィールドで、カスタマー マネージド キーのサポートを有効にするサービスを指定します。
[Encryption type] (暗号化の種類) フィールドで、[Customer-managed keys (CMK)] (カスタマー マネージド キー (CMK)) を選択します。
Azure portal でキーの URI を調べるには、キー コンテナーに移動して、 [キー] 設定を選択します。 目的のキーを選択し、キーを選択してそのバージョンを表示します。 そのバージョンの設定を表示するには、キーのバージョンを選択します。
URI を示している [キー識別子] フィールドの値をコピーします。
ストレージ アカウントの [暗号化キー] の設定で、 [キー URI を入力] オプションを選択します。
コピーした URI を [キー URI] フィールドに貼り付けます。 キーのバージョンの手動更新を構成するには、URI にキーのバージョンを含めます。
[ID の選択] リンクを選択して、ユーザー割り当てマネージド ID を 指定します。
[確認] ボタンを選択して検証し、アカウントを作成します。
キーのバージョンを手動更新するようにカスタマー マネージド キーを構成するには、ストレージ アカウントの作成中、暗号化を設定するときに、キーのバージョンを明示的に指定します。 次の例に示すように、Set-AzStorageAccount を呼び出してストレージ アカウントの暗号化設定を更新し、 -KeyvaultEncryption オプションを含めてストレージ アカウントでカスタマー マネージド キーを有効にします。
角かっこ内のプレースホルダー値を独自の値に置き換え、前の例で定義した変数を使用してください。
$accountName = "<storage-account>"
New-AzStorageAccount -ResourceGroupName $rgName `
-Name $accountName `
-Kind StorageV2 `
-SkuName Standard_LRS `
-Location $location `
-AllowBlobPublicAccess $false `
-IdentityType SystemAssignedUserAssigned `
-UserAssignedIdentityId $userIdentity.Id `
-KeyVaultUri $keyVault.VaultUri `
-KeyName $key.Name `
-KeyVersion $key.Version `
-KeyVaultUserAssignedIdentityId $userIdentity.Id
キー バージョンを手動で更新する場合は、新しいバージョンを使用するようにストレージ アカウントの暗号化設定を更新する必要があります。 まず Get-AzKeyVaultKey を呼び出し、キーの最新バージョンを取得します。 次に、前の例で示したように、Set-AzStorageAccount を呼び出して、新しいバージョンのキーを使用するようにストレージ アカウントの暗号化設定を更新します。
キーのバージョンを手動更新するようにカスタマー マネージド キーを構成するには、ストレージ アカウントの作成中、暗号化を設定するときに、キーのバージョンを明示的に指定します。 ストレージ アカウントの暗号化設定を更新するには、次の例に示すように az storage account update を呼び出します。 --encryption-key-source
パラメーターを含め、それを Microsoft.Keyvault
に設定して、アカウントのカスタマー マネージド キーを有効にします。
角かっこ内のプレースホルダー値を独自の値で置き換えてください。
accountName="<storage-account>"
key_vault_uri=$(az keyvault show \
--name <key-vault> \
--resource-group <resource_group> \
--query properties.vaultUri \
--output tsv)
key_version=$(az keyvault key list-versions \
--name <key> \
--vault-name <key-vault> \
--query [-1].kid \
--output tsv | cut -d '/' -f 6)
az storage account create \
--name $accountName \
--resource-group $rgName \
--location $location \
--sku Standard_LRS \
--kind StorageV2 \
--allow-blob-public-access false \
--identity-type SystemAssigned,UserAssigned \
--user-identity-id $identityResourceId \
--encryption-key-vault $keyVaultUri \
--encryption-key-name $keyName \
--encryption-key-source Microsoft.Keyvault \
--encryption-key-version $keyVersion \
--key-vault-user-identity-id $identityResourceId
キー バージョンを手動で更新する場合は、新しいバージョンを使用するようにストレージ アカウントの暗号化設定を更新する必要があります。 まず、az keyvault show を呼び出すことでキー コンテナーの URI を照会し、az keyvault key list-versions を呼び出すことでキーのバージョンを照会します。 次に、az storage account update を呼び出して、キーの新しいバージョンを使用するようにストレージ アカウントの暗号化設定を更新します (前の例を参照)。
キーを変更する
Azure Storage 暗号化に使用しているキーは、いつでも変更できます。
注意
キーまたはキー バージョンを変更すると、ルート暗号化キーの保護は変わりますが、Azure Storage アカウント内のデータは常に暗号化されたままです。 データを確実に保護するための追加のアクションは必要ありません。 キーを変更するかキー バージョンをローテーションしても、パフォーマンスには影響しません。 キーの変更かキー バージョンのローテーションに関連するダウンタイムはありません。
Azure portal でキーを変更するには、次の手順を実行します。
お使いのストレージ アカウントに移動し、 [暗号化] の設定を表示します。
キー コンテナーを選択し、新しいキーを選択します。
変更を保存します。
PowerShell を使用してキーを変更するには、Set-AzStorageAccount を呼び出して、新しいキーの名前とバージョンを指定します。 新しいキーが別のキー コンテナーにある場合は、キー コンテナー URI も更新する必要があります。
Azure CLI を使用してキーを変更するには、az storage account update を呼び出して、新しいキーの名前とバージョンを指定します。 新しいキーが別のキー コンテナーにある場合は、キー コンテナー URI も更新する必要があります。
新しいキーが別のキー コンテナーにある場合は、新しいコンテナー内のキーへのアクセス権をマネージド ID に付与する 必要があります。 キー バージョンの手動更新を選択する場合は、キー コンテナーの URI を更新する 必要もあります。
カスタマー マネージド キーを使用するストレージ アカウントへのアクセスを取り消す
カスタマー マネージド キーを使用しているストレージ アカウントへのアクセスを一時的に取り消すには、キー コンテナーで現在使用されているキーを無効にします。 キーの無効化と再有効化に関連するパフォーマンスへの影響やダウンタイムはありません。
キーが無効化されると、クライアントは BLOB またはそのメタデータとの間で行われる読み取りまたは書き込み操作を呼び出すことができません。 失敗する操作の詳細については、 カスタマー マネージド キーを使用するストレージ アカウントへのアクセスを取り消す を参照してください。
注意事項
キー コンテナーでキーを無効にすると、Azure Storage アカウント内のデータは暗号化されたままになりますが、キーを再度有効にするまでアクセスできなくなります。
Azure portal でカスタマー マネージド キーを無効にするには、以下の手順に従います。
キーを含むキー コンテナーに移動します。
[オブジェクト] で [キー] を選択します。
キーを右クリックし、[無効] を選択します。
PowerShell を使用してカスタマー マネージド キーを取り消すには、次の例に示すように、Update-AzKeyVaultKey コマンドを呼び出します。 必ず、角かっこ内のプレースホルダー値を、変数を定義する独自の値に置き換えるか、前の例で定義した変数を使用してください。
$kvName = "<key-vault-name>"
$keyName = "<key-name>"
$enabled = $false
# $false to disable the key / $true to enable it
# Check the current state of the key (before and after enabling/disabling it)
Get-AzKeyVaultKey -Name $keyName -VaultName $kvName
# Disable (or enable) the key
Update-AzKeyVaultKey -VaultName $kvName -Name $keyName -Enable $enabled
Azure CLI を使用してカスタマー マネージド キーを取り消すには、次の例に示すように、az keyvault key set-attributes コマンドを呼び出します。 必ず、角かっこ内のプレースホルダー値を、変数を定義する独自の値に置き換えるか、前の例で定義した変数を使用してください。
kvName="<key-vault-name>"
keyName="<key-name>"
enabled="false"
# "false" to disable the key / "true" to enable it:
# Check the current state of the key (before and after enabling/disabling it)
az keyvault key show \
--vault-name $kvName \
--name $keyName
# Disable (or enable) the key
az keyvault key set-attributes \
--vault-name $kvName \
--name $keyName \
--enabled $enabled
キーを無効にすると、ストレージ アカウント内のデータへのアクセス試行がエラー コード 403 (許可されていません) で失敗します。 キーを無効にすることによって影響を受けるストレージ アカウント操作のリストについては、「カスタマー マネージド キーを使用するストレージ アカウントへのアクセスを取り消す 」を参照してください。
Microsoft マネージド キーに切り替える
Azure portal、PowerShell、または Azure CLI を使用して、カスタマー マネージド キーから Microsoft マネージド キーにいつでも戻すことができます。
Azure portal でカスタマー マネージド キーから Microsoft マネージド キーに戻すには、以下の手順に従います。
ストレージ アカウントに移動します。
[セキュリティとネットワーク] で、[暗号化] を選択します。
[暗号化の種類] を [Microsoft マネージド キー] に変更します。
PowerShell を使用してカスタマー マネージド キーから Microsoft マネージド キーに戻すには、次の例に示すように、-StorageEncryption
オプションを使用して Set-AzStorageAccount を呼び出します。 角かっこ内のプレースホルダー値を独自の値に置き換え、前の例で定義した変数を使用してください。
Set-AzStorageAccount -ResourceGroupName $storageAccount.ResourceGroupName `
-AccountName $storageAccount.StorageAccountName `
-StorageEncryption
Azure CLI を使用してカスタマー マネージド キーから Microsoft マネージド キーに戻すには、次の例に示すように、az storage account update を呼び出して、--encryption-key-source parameter
を Microsoft.Storage
に設定します。 角かっこ内のプレースホルダー値を独自の値に置き換え、前の例で定義した変数を使用してください。
az storage account update \
--name <storage-account> \
--resource-group <resource_group> \
--encryption-key-source Microsoft.Storage
次のステップ