Share via


Azure Elastic SAN のカスタマー マネージド キーを構成する

Elastic SAN ボリュームに書き込まれるすべてのデータは、保存時、データ暗号化キー (DEK) を使用して自動的に暗号化されます。 Azure では、エンベロープ暗号化を使用し、キー暗号化キー (KEK) により DEK の暗号化を行います。 KEK は既定ではプラットフォーム マネージド (Microsoft による管理) ですが、お客様が独自の KEK を作成して管理することもできます。

この記事では、Azure Key Vault に格納されているカスタマー マネージド キーを使用して Elastic SAN ボリューム グループの暗号化を構成する方法について説明します。

制限事項

次の一覧は、現在、Elastic SAN が使用可能なリージョンと、ゾーン冗長ストレージ (ZRS) およびローカル冗長ストレージ (LRS) の両方がサポートされているリージョン、または LRS のみがサポートされているリージョンを示しています。

  • 南アフリカ北部 - LRS
  • 東アジア - LRS
  • 東南アジア: LRS
  • ブラジル南部 - LRS
  • カナダ中部 - LRS
  • フランス中部 - LRS と ZRS
  • ドイツ中西部 - LRS
  • オーストラリア東部 - LRS
  • 北ヨーロッパ - LRS と ZRS
  • 西ヨーロッパ - LRS と ZRS
  • 英国南部 - LRS
  • 東日本 - LRS
  • 韓国中部 - LRS
  • 米国中部
  • 米国東部 - LRS
  • 米国中南部 - LRS
  • 米国東部 2 - LRS
  • 米国西部 2 - LRS と ZRS
  • 米国西部 3 - LRS
  • スウェーデン中部 - LRS
  • スイス北部 - LRS

前提条件

この記事で説明する操作を実行するには、お使いの Azure アカウントと目的に応じた管理ツールを用意する必要があります。 準備作業には、必要なモジュールのインストール、アカウントへのログイン、PowerShell または Azure CLI の変数の設定が含まれます。 この記事内では同じ変数セットを統一的に使用するため、ここで変数を設定しておくと、それらを使用してすべてのサンプルを実行できます。

この記事で説明する操作を PowerShell で実行するには、以下のようにします。

  1. 最新バージョンの Azure PowerShell をインストールします (まだインストールしていない場合)。

  2. Azure PowerShell がインストールされたら、Install-Module -Name Az.ElasticSan -Repository PSGallery で Elastic SAN 拡張機能のバージョン 0.1.2 以降をインストールしてください。

  3. Azure にサインインします。

    Connect-AzAccount
    

この記事の PowerShell サンプルで使用する変数を設定する

サンプル コードをコピーし、すべてのプレースホルダー テキストを実際の値に置き換えます。 この記事では、すべての例において同じ変数を統一的に使用します。

# Define some variables
# The name of the resource group where the resources will be deployed.
$RgName          = "ResourceGroupName"

# The name of the Elastic SAN that contains the volume group to be configured.
$EsanName        = "ElasticSanName"

# The name of the Elastic SAN volume group to be configured.
$EsanVgName      = "ElasticSanVolumeGroupName"

# The region where the new resources will be created.
$Location        = "Location"

# The name of the Azure Key Vault that will contain the KEK.
$KvName          = "KeyVaultName"

# The name of the Azure Key Vault key that is the KEK.
$KeyName         = "KeyName"

# The name of the user-assigned managed identity, if applicable.
$ManagedUserName = "ManagedUserName"

キー コンテナーを構成する

新規または既存のキー コンテナーを使用して、カスタマー マネージド キーを格納することができます。 暗号化されたリソースとキー コンテナーは、同じ Microsoft Entra ID テナント内であれば、異なるリージョンやサブスクリプションに配置されていても問題ありません。 Azure Key Vault の詳細については、Azure Key Vault の概要Azure Key Vault とは何であるかに関する記事を参照してください。

暗号化にカスタマー マネージド キーを使用するには、そのキー コンテナーで論理的な削除と消去保護の両方が有効になっている必要があります。 新しいキー コンテナーを作成すると、論理的な削除は既定で有効になり、無効にすることはできません。 消去保護は、キー コンテナーの作成時だけでなく作成後にも有効にすることができます。 Azure Elastic SAN 暗号化では、サイズが 2048、3072、4096 の RSA キーがサポートされています。

Azure Key Vault では、Azure RBAC アクセス許可モデルを使用した Azure RBAC による認可がサポートされています。 Microsoft では、キー コンテナー アクセス ポリシーに対して Azure RBAC アクセス許可モデルを使用することをお勧めします。 詳細については、「 Azure RBAC を使用して Azure キー コンテナーへのアクセス許可をアプリケーションに付与する」を参照してください。

ボリューム グループ KEK 用のストアにするキー コンテナーを準備するには、以下 2 つの手順が必要です。

  • 論理的な削除と消去保護を有効にした新しいキー コンテナーを作成するか、既存のキー コンテナーの消去保護を有効にします。
  • バックアップ、作成、削除、インポートの取得、リストの取得、更新、復元のアクセス許可を持つ Azure RBAC ロールを作成または割り当てます。

次のような例です。

  • 論理的な削除と消去保護を有効にした新しいキー コンテナーを作成します。
  • ユーザー アカウントの UPN を取得します。
  • 新しいキー コンテナー用の Key Vault Crypto Officer ロールをアカウントに割り当てます。

この記事内で先ほど定義した変数を使用します。

# Setup the parameters to create the key vault.
$NewKvArguments = @{
    Name                    = $KvName
    ResourceGroupName       = $RgName
    Location                = $Location
    EnablePurgeProtection   = $true
    EnableRbacAuthorization = $true
}

# Create the key vault.
$KeyVault = New-AzKeyVault @NewKvArguments

# Get the UPN of the currently loggged in user.
$MyAccountUpn = (Get-AzADUser -SignedIn).UserPrincipalName

# Setup the parameters to create the role assignment.
$CrptoOfficerRoleArguments = @{
    SignInName         = $MyAccountUpn
    RoleDefinitionName = "Key Vault Crypto Officer"
    Scope              = $KeyVault.ResourceId
}

# Assign the Cypto Officer role to your account for the key vault.
New-AzRoleAssignment @CrptoOfficerRoleArguments

PowerShell を使用して既存のキー コンテナーで消去保護を有効にする方法については、Azure Key Vault の復旧の概要に関する記事を参照してください。

PowerShell で RBAC ロールを割り当てる方法の詳細については、「Azure PowerShell を使用して Azure ロールを割り当てる」を参照してください。

キーを追加する

次に、キー コンテナーにキーを追加します。 キーを追加する前に、Key Vault Crypto Officer ロールが自分に割り当てられていることを確認してください。

Azure Storage と Elastic SAN 暗号化では、サイズが 2048、3072、4096 の RSA キーがサポートされています。 サポートされているキーの種類の詳細については、「キーについて」を参照してください。

これらのサンプル コマンドを使用して、PowerShell でキー コンテナーにキーを 1 つ追加します。 この記事内で先ほど定義した変数を使用します。

# Get the key vault where the key is to be added.
$KeyVault = Get-AzKeyVault -ResourceGroupName $RgName -VaultName $KvName

# Setup the parameters to add the key to the vault.
$NewKeyArguments = @{
    Name        = $KeyName
    VaultName   = $KeyVault.VaultName
    Destination = "Software"
}

# Add the key to the vault.
$Key = Add-AzKeyVaultKey @NewKeyArguments

キー ローテーションの方針を決定する

暗号化のベスト プラクティスに従うと、Elastic SAN ボリューム グループを保護するキーは定期的に (通常は、少なくとも 2 年ごとに) ローテーションすることになります。 Azure Elastic SAN がキー コンテナー内のキーを変更することは決してありませんが、お客様がキー ローテーション ポリシーを構成することにより、コンプライアンス要件に沿ったキーのローテーションが可能です。 詳細については、「Azure Key Vault で暗号化キーの自動ローテーションを構成する」を参照してください。

キー コンテナー内のキーがローテーションされた後は、その新しいバージョンのキーを使用するために、Elastic SAN ボリューム グループの暗号化構成を更新する必要があります。 カスタマー マネージド キーでは、KEK バージョンの自動更新、手動更新の両方がサポートされています。 新規または既存のボリューム グループで使用するカスタマー マネージド キーの設定にあたっては、どの方法を使用するかをあらかじめ決定しておいてください。

キー ローテーションの詳細については、「キーのバージョンを更新する」を参照してください。

重要

キーまたはキー バージョンを変更すると、ルート データ暗号化キーの保護が変更されますが、Azure Elastic SAN ボリューム グループ内のデータが暗号化された状態は常に維持されます。 データを確実に保護するために、追加のアクションを行う必要はありません。 キー バージョンのローテーションを実行しても、パフォーマンスに影響はなく、それに伴ってダウンタイムが発生することもありません。

キー バージョンの自動ローテーション

Azure Elastic SAN では、暗号化に使用するカスタマー マネージド キーを自動的に更新して、キー コンテナー内にある最新バージョンのキーを使用させることができます。 Elastic SAN では、新しいキー バージョンを確認するためにキー コンテナーのチェックが毎日行われます。 新しいバージョンが提供されると、自動的にその最新バージョンのキーを使用した暗号化が開始されます。 キーを交換するときは、必ず 24 時間待って、古いバージョンを無効化するようにしてください。

重要

Elastic SAN ボリューム グループがキー バージョンの手動更新用に構成されていて、それを自動的に更新するように変更する場合は、キーのバージョンを空の文字列に変更してください。 キーのバージョンを手動で変更する方法の詳細については、「キー バージョンを自動的に更新する」を参照してください。

キー バージョンの手動ローテーション

キーのバージョンを手動で更新するには、カスタマー マネージド キーを使用して暗号化を構成する際に、特定のバージョンを示す URI を指定します。 URI を指定すると、キー コンテナー内に新しいバージョンが作成されても、Elastic SAN はキー バージョンを自動的に更新しません。 Elastic SAN で新しいキー バージョンを使用するには、手動で更新する必要があります。

特定のバージョンのキーを示す URI は、Azure portal で以下のようにして取得できます。

  1. お使いのキー コンテナーに移動します。
  2. [オブジェクト] で、[キー] を選択します。
  3. 目的のキーを選択し、キーのバージョンを表示します。
  4. そのバージョンの設定を表示するには、キーのバージョンを選択します。
  5. URI を示している [キー識別子] フィールドの値をコピーします。
  6. コピーしたテキストを保存します。この内容は、後でボリューム グループの暗号化を構成する際に使用します。

Screenshot showing key vault key URI in Azure portal.

キー コンテナーへのアクセスを承認するためのマネージド ID を選択する

Elastic SAN ボリューム グループのカスタマー マネージド暗号化キーを有効にする際には、そのキーがあるキー コンテナーへのアクセスを承認するために使用するマネージド ID を指定する必要があります。 指定するマネージド ID には以下のアクセス許可が必要です。

  • get
  • wrapkey
  • unwrapkey

キー コンテナーに対するアクセスの承認を得たマネージド ID であれば、ユーザー割り当て、システム割り当てのどちらのマネージド ID でも使用できます。 システム割り当てとユーザー割り当てのマネージド ID の詳細については、「マネージド ID の種類」を参照してください。

ボリューム グループが作成される際には、そのボリューム グループ用のシステム割り当て ID が自動的に作成されます。 ユーザー割り当て ID を使用する場合は、ボリューム グループのカスタマー マネージド暗号化キーを構成する前に ID を作成してください。 ユーザー割り当てマネージド ID を作成して管理する方法については、「ユーザー割り当てマネージド ID の管理」を参照してください。

ユーザー割り当てマネージド ID を使用してアクセスを承認する

新しいボリューム グループに対してカスタマー マネージド キーを有効にする場合は、ユーザー割り当てマネージド ID を指定する必要があります。 既存のボリューム グループでは、ユーザー割り当てマネージド ID、システム割り当てマネージド ID のどちらかを使用してカスタマー マネージド キーを構成できます。

ユーザー割り当てマネージド ID を使用してカスタマー マネージド キーを構成する場合、ユーザー割り当てマネージド ID を使用して、キーを含むキー コンテナーへのアクセスが認可されます。 ユーザー割り当て ID はカスタマー マネージド キーを構成する前に作成する必要があります。

ユーザー割り当てマネージド ID は、スタンドアロンの Azure リソースです。 ユーザー割り当てのマネージド ID の詳細については、「マネージド ID の種類」を参照してください。 ユーザー割り当てマネージド ID を作成して管理する方法については、「ユーザー割り当てマネージド ID の管理」を参照してください。

ユーザー割り当てマネージド ID には、キー コンテナー内のキーにアクセスするためのアクセス許可が必要です。 ID に対するアクセス許可を手動で付与するか、キー コンテナー スコープを持つ組み込みロールを割り当ててこれらのアクセス許可を付与することができます。

以下の例では、次のことを行っています。

  • ユーザー割り当てマネージド ID を新規作成する。
  • ユーザー割り当て ID の作成が完了するのを待ちます。
  • 新しい ID から PrincipalId を取得します。
  • キー コンテナーをスコープとする新しい ID にRBAC の役割を割り当てます。

この記事内で先ほど定義した変数を使用します。

# Create a new user-assigned managed identity.
$UserIdentity = New-AzUserAssignedIdentity -ResourceGroupName $RgName -Name $ManagedUserName -Location $Location

ヒント

約 1 分待ち、ユーザー割り当て ID の作成が完了してから次に進みます。

# Get the `PrincipalId` for the new identity.
$PrincipalId = $UserIdentity.PrincipalId

# Setup the parameters to assign the Crypto Service Encryption User role.
$CryptoUserRoleArguments = @{
    ObjectId           = $PrincipalId
    RoleDefinitionName = "Key Vault Crypto Service Encryption User"
    Scope              = $KeyVault.ResourceId
}

# Assign the Crypto Service Encryption User role to the managed identity so it can access the key in the vault.
New-AzRoleAssignment @CryptoUserRoleArguments

システム割り当てマネージド ID を使用してアクセスを承認する

システム割り当てマネージド ID は、Azure サービスのインスタンス (Azure Elastic SAN ボリューム グループなど) に関連付けられます。

システム割り当てマネージド ID には、キー コンテナー内のキーにアクセスするためのアクセス許可が必要です。 この記事では、Key Vault Crypto Service Encryption User ロールを使って、キー コンテナー スコープを持つシステム割り当てマネージド ID に割り当てて、これらのアクセス許可を付与します。

New-AzElasticSanVolumeGroup コマンドで -IdentityType "SystemAssigned" パラメーターを指定した場合は、ボリューム グループが作成される際、そのボリューム グループ用のシステム割り当て ID が自動的に作成されます。 ボリューム グループの作成が完了する前にシステム割り当て ID を知ることはできません。 また、キー コンテナー内の暗号化キーにアクセスするためには、ID に Key Vault Crypto Service Encryption User ロールなどの適切なロールが割り当てられている必要があります。 つまり、ボリューム グループの作成時には、カスタマー マネージド キーでシステム割り当て ID を使用する構成を行うことはできません。 カスタマー マネージド キーを使用して新しいボリューム グループを作成する場合は、ボリューム グループの作成時にユーザー割り当て ID を使用する必要があります。作成後にシステム割り当て ID を構成できます。

このサンプル コードを使用して、システム割り当てマネージド ID に必要な RBAC ロールを割り当て、スコープをキー コンテナーにします。 この記事内で先ほど定義した変数を使用します。

# Get the Elastic SAN volume group.
$ElasticSanVolumeGroup = Get-AzElasticSanVolumeGroup -Name $EsanVgName -ElasticSanName $EsanName -ResourceGroupName $RgName

# Generate a system-assigned identity if one does not already exist.
If ($ElasticSanVolumeGroup.IdentityPrincipalId -eq $null) {
Update-AzElasticSanVolumeGroup -ResourceGroupName $RgName -ElasticSanName $EsanName -Name $EsanVgName -IdentityType "SystemAssigned"}

# Get the `PrincipalId` (system-assigned identity) of the volume group.
$PrincipalId = $ElasticSanVolumeGroup.IdentityPrincipalId

# Setup the parameters to assign the Crypto Service Encryption User role.
$CryptoUserRoleArguments = @{
    ObjectId           = $PrincipalId
    RoleDefinitionName = "Key Vault Crypto Service Encryption User"
    Scope              = $KeyVault.ResourceId
}

# Assign the Crypto Service Encryption User role.
New-AzRoleAssignment @CryptoUserRoleArguments

ボリューム グループ用のカスタマー マネージド キーを構成する

お好みの管理ツールを使用してカスタマー マネージド暗号化キーを構成する手順については、[Azure PowerShell] モジュールまたは [Azure CLI] タブを選択してください。

PowerShell を選択したので、次に、新しいボリューム グループの作成時に設定を構成するか、既存のボリューム グループの設定を更新する方法のうち、希望する方法に対応するタブを選択してください。

新しいボリューム グループの作成時に、キー バージョンが自動で更新されるようカスタマー マネージド キーを構成するには、PowerShell でこのサンプルを使用します。

# Setup the parameters to create the volume group.
$NewVgArguments        = @{
    Name                         = $EsanVgName
    ElasticSanName               = $EsanName
    ResourceGroupName            = $RgName
    ProtocolType                 = "Iscsi"
    Encryption                   = "EncryptionAtRestWithCustomerManagedKey"
    KeyName                      = $KeyName
    KeyVaultUri                  = $KeyVault.VaultUri
    IdentityType                 = "UserAssigned"
    IdentityUserAssignedIdentity = @{$UserIdentity.Id=$UserIdentity}
    EncryptionIdentityEncryptionUserAssignedIdentity = $UserIdentity.Id
}

# Create the volume group.
New-AzElasticSanVolumeGroup @NewVgArguments

新しいボリューム グループの作成時に、キー バージョンを手動で更新するようカスタマー マネージド キーを構成するには、この PowerShell のサンプルのように KeyVersion パラメーターを追加します。

# Setup the parameters to create the volume group.
$NewVgArguments        = @{
    Name                         = $EsanVgName
    ElasticSanName               = $EsanName
    ResourceGroupName            = $RgName
    ProtocolType                 = "Iscsi"
    Encryption                   = "EncryptionAtRestWithCustomerManagedKey"
    KeyName                      = $KeyName
    KeyVaultUri                  = $KeyVault.VaultUri
    KeyVersion                   = $Key.Version
    IdentityType                 = "UserAssigned"
    IdentityUserAssignedIdentity = @{$UserIdentity.Id=$UserIdentity}
    EncryptionIdentityEncryptionUserAssignedIdentity = $UserIdentity.Id
}

# Create the volume group.
New-AzElasticSanVolumeGroup @NewVgArguments

次のステップ