Azure Service Bus の保存データを暗号化するためにカスタマー マネージド キーを構成する

Azure Service Bus Premium では、Azure Storage Service Encryption (Azure SSE) による保存データの暗号化が提供されます。 Service Bus Premium では、データを格納するために Azure Storage が使用されます。 Azure Storage に格納されているすべてのデータは、Microsoft マネージド キーを使用して暗号化されます。 独自のキー (別名: Bring Your Own Key (BYOK) またはカスタマー マネージド キー) を使用する場合、データは引き続き Microsoft マネージド キーを使用して暗号化されますが、さらに、Microsoft マネージド キーがカスタマー マネージド キーを使用して暗号化されます。 この機能を使用して、Microsoft マネージド キーの暗号化に使用されるカスタマー マネージド キーへの作成、ローテーション、無効化、およびアクセスの取り消しを実行できます。 BYOK 機能の有効化は、名前空間での 1 回限りのセットアップ プロセスです。

カスタマー マネージド キーには、サービス側の暗号化に関するいくつかの注意事項があります。

  • この機能は Azure Service Bus Premium レベルでサポートされます。 これは、Standard レベルの Service Bus 名前空間に対して有効にすることはできません。
  • 暗号化は、新規または空の名前空間に対してのみ有効にすることができます。 名前空間にキューまたはトピックが含まれている場合、暗号化操作は失敗します。

キーの管理およびキーの使用状況の監査には、Azure Key Vault を使用できます。 独自のキーを作成してキー コンテナーに格納することも、Azure Key Vault API を使ってキーを生成することもできます。 Azure Key Vault の詳細については、「 What is Azure Key Vault? (Azure Key Vault とは)

カスタマー マネージド キーを有効にする (Azure portal)

Azure portal でカスタマー マネージド キーを有効にするには、次の手順のようにします。

  1. お使いの Service Bus Premium 名前空間に移動します。

  2. Service Bus 名前空間の [設定] ページで、 [暗号化] を選択します。

  3. 次の図に示すように、カスタマー マネージド キーによる保存中の暗号化を選択します。

    Enable customer managed key

キーを使用したキー コンテナーの設定

カスタマー マネージド キーを有効にした後、カスタマー マネージド キーを Azure Service Bus 名前空間に関連付ける必要があります。 Service Bus では Azure Key Vault のみがサポートされます。 前のセクションでカスタマー マネージド キーによる暗号化のオプションを有効にした場合は、キーが Azure Key Vault にインポートされている必要があります。 また、キーに対して [論理的な削除][Do Not Purge](消去しない) が構成されている必要があります。 これらの設定は、PowerShell または CLI を使用して構成できます。

  1. 新しいキー コンテナーを作成するには、Azure Key Vault のクイック スタートに従ってください。 既存のキーをインポートする方法については、「キー、シークレット、証明書について」を参照してください。

    重要

    Azure Service Bus でカスタマー マネージド キーを使うには、キー コンテナーに 2 つの必須プロパティが構成されている必要があります。 それらは、[論理的な削除][Do Not Purge](消去しない) です。 Soft Delete プロパティは、Azure portal で新しいキーボールトを作成したときにデフォルトで有効になりますが、パージ プロテクションはオプションですので、キーボールトを作成するときに必ず選択してください。 また、既存のキー コンテナーでこれらのプロパティを有効にする必要がある場合は、PowerShell または Azure CLI を使う必要があります。

  2. コンテナーの作成時、論理的な削除と消去保護の両方をオンにするには、az keyvault create コマンドを使用します。

    az keyvault create --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --location westus --enable-soft-delete true --enable-purge-protection true
    
  3. 既存のコンテナー (論理的な削除が既に有効になっている) に消去保護を追加するには、az keyvault update コマンドを使用します。

    az keyvault update --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --enable-purge-protection true
    
  4. 次の手順に従ってキーを作成します。

    1. 新しいキーを作成するには、 [設定] の下にある [キー] メニューから [生成/インポート] を選択します。

      Select Generate/Import button

    2. [オプション][生成] に設定し、キーの名前を付けます。

      Create a key

    3. 次に、ドロップダウン リストからこのキーを選択して、暗号化用の Service Bus 名前空間に関連付けることができます。

      Select key from key vault

      Note

      冗長性を確保するために、最大 3 つのキーを追加できます。 いずれかのキーの有効期限が切れた場合、またはアクセスできない場合は、他のキーが暗号化に使用されます。

    4. キーの詳細を入力し、 [選択] をクリックします。 これにより、Microsoft マネージド キーを自分のキー (カスタマー マネージド キー) で暗号化できます。

    重要

    カスタマー マネージド キー を geo ディザスター リカバリーと共に使用する場合は、このセクションを確認してください。

    カスタマー マネージド キーを使用した Microsoft マネージド キーの暗号化を有効にするために、指定した Azure KeyVault の Service Bus のマネージド ID に対してアクセス ポリシーが設定されます。 これにより、Azure Service Bus 名前空間から Azure Key Vault へのアクセスが制御されます。

    これにより:

    • Service Bus 名前空間に対して geo ディザスター リカバリーが既に有効になっているときに、カスタマー マネージド キーを有効化する場合は、以下を行います。

      • ペアリングを解除します。
      • キー コンテナーに対して、プライマリとセカンダリの名前空間の両方のマネージド ID を対象とするアクセス ポリシー を設定します。
      • プライマリ名前空間に暗号化を設定します。
      • プライマリとセカンダリの名前空間を再びペアリングします。
    • カスタマー マネージド キーが既に設定されている Service Bus 名前空間で Geo DR を有効にする場合は、以下を実行します。

      • キー コンテナーに対して、セカンダリ名前空間のマネージド ID を対象とするアクセス ポリシー を設定します。
      • プライマリとセカンダリの名前空間をペアリングします。
    • ペアリングされると、プライマリ名前空間用に構成されたキー コンテナーがセカンダリ名前空間によって使用されます。 両方の名前空間のキー コンテナーが異なる場合は、Geo DR ペアリングの前に、プライマリ名前空間に関連付けられているキー コンテナー内のセカンダリ名前空間のマネージド ID に対して、ユーザーがアクセス ポリシーまたは RBAC ロールを委任する必要があります。

マネージド ID

1 つの Service Bus 名前空間に割り当て可能なマネージド ID は 2 種類あります。

  • システム割り当て: Service Bus 名前空間でマネージド ID を直接有効にできます。 システム割り当てマネージド ID を有効にすると、その Service Bus 名前空間のライフサイクルに関連付けられた ID が Microsoft Entra に作成されます。 そのため、名前空間が削除されると、Azure によってその ID が自動的に削除されます。 設計上、この ID を使用して Microsoft Entra ID からトークンを要求できるのは、その Azure リソース (名前空間) だけです。

  • ユーザー割り当て: スタンドアロンの Azure リソースとしてマネージド ID を自分で作成することもできます。これがユーザー割り当て ID と呼ばれます。 ユーザー割り当てマネージド ID を作成して、それを 1 つ以上の Service Bus 名前空間に割り当てることができます。 ユーザー割り当てマネージド ID を使用する場合、ID は、それを使用するリソースとは別に管理されます。 これらは、名前空間のライフサイクルに関連付けられていません。 ユーザー割り当て ID は、不要になったときに明示的に削除できます。

    詳細については、「Azure リソースのマネージド ID とは」を参照してください。

システム割り当て ID を使用して暗号化する (テンプレート)

このセクションでは、以下のタスクを実行する方法を示します。

  1. マネージド サービス ID がある Premium Service Bus 名前空間を作成する。
  2. キー コンテナーを作成し、サービス ID にキー コンテナーへのアクセス権を付与する。
  3. キー コンテナー情報 (キー/値) を使用して、Service Bus 名前空間を更新します。

マネージド サービス ID がある Premium Service Bus 名前空間を作成する

このセクションでは、Azure Resource Manager テンプレートと PowerShell を使用して、マネージド サービス ID がある Azure Service Bus 名前空間を作成する方法について説明します。

  1. マネージド サービス ID がある Service Bus Premium レベルの名前空間を作成するための Azure Resource Manager テンプレートを作成します。 ファイルに次の名前を付けます。CreateServiceBusPremiumNamespace.json

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
    
             }
          }
       ],
       "outputs":{
          "ServiceBusNamespaceId":{
             "type":"string",
             "value":"[resourceId('Microsoft.ServiceBus/namespaces',parameters('namespaceName'))]"
          }
       }
    }
    
  2. 次の名前のテンプレート パラメーター ファイルを作成します。CreateServiceBusPremiumNamespaceParams.json

    注意

    次の値を置き換えます。

    • <ServiceBusNamespaceName> - お使いの Service Bus 名前空間の名前
    • <Location> - お使いの Service Bus 名前空間の場所
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          }
       }
    }
    
  3. 次の PowerShell コマンドを実行して、Premium Service Bus 名前空間を作成するテンプレートをデプロイします。 次に、後で使用するために Service Bus 名前空間の ID を取得します。 コマンドを実行する前に、{MyRG} をリソース グループの名前に置き換えます。

    $outputs = New-AzResourceGroupDeployment -Name CreateServiceBusPremiumNamespace -ResourceGroupName {MyRG} -TemplateFile ./CreateServiceBusPremiumNamespace.json -TemplateParameterFile ./CreateServiceBusPremiumNamespaceParams.json
    
    $ServiceBusNamespaceId = $outputs.Outputs["serviceBusNamespaceId"].value
    

Service Bus 名前空間の ID にキー コンテナーへのアクセス権を付与する

  1. 次のコマンドを実行して、消去保護論理的な削除が有効なキー コンテナーを作成します。

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName}  -Location "{location}" -EnableSoftDelete -EnablePurgeProtection    
    

    (または)

    次のコマンドを実行して、既存のキー コンテナーを更新します。 コマンドを実行する前に、リソース グループとキー コンテナー名の値を指定します。

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force
    
  2. キー コンテナーのアクセス ポリシーを設定して、Service Bus 名前空間のマネージド ID で、キー コンテナー内のキー値にアクセスできるようにします。 前のセクションの Service Bus 名前空間の ID を使用します。

    $identity = (Get-AzureRmResource -ResourceId $ServiceBusNamespaceId -ExpandProperties).Identity
    
    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $identity.PrincipalId -PermissionsToKeys get,wrapKey,unwrapKey,list
    

Service Bus 名前空間のデータをキー コンテナーのユーザーが管理するキーを使用して暗号化する

ここまで、次の手順を実行しました。

  1. マネージド ID がある Premium 名前空間を作成しました。
  2. キー コンテナーを作成し、マネージド ID にキー コンテナーへのアクセス権を付与しました。

この手順では、キー コンテナー情報を使用して、Service Bus 名前空間を更新します。

  1. 次の内容の UpdateServiceBusNamespaceWithEncryption.json という名前の JSON ファイルを作成します。

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                      {
                         "keyName":"[parameters('keyName')]",
                         "keyVaultUri":"[parameters('keyVaultUri')]"
                      }
                   ]
                }
             }
          }
       ]
    }
    
  2. 次のテンプレート パラメーター ファイルを作成します。UpdateServiceBusNamespaceWithEncryptionParams.json

    注意

    次の値を置き換えます。

    • <ServiceBusNamespaceName> - お使いの Service Bus 名前空間の名前
    • <Location> - お使いの Service Bus 名前空間の場所
    • <KeyVaultName> - お使いのキー コンテナーの名前
    • <KeyName> - キー コンテナー内のキーの名前
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          }
       }
    }
    
  3. 次の PowerShell コマンドを実行して、Resource Manager テンプレートをデプロイします。 コマンドを実行する前に、{MyRG} をお使いのリソース グループの名前に置き換えます。

    New-AzResourceGroupDeployment -Name UpdateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./UpdateServiceBusNamespaceWithEncryption.json -TemplateParameterFile ./UpdateServiceBusNamespaceWithEncryptionParams.json
    

ユーザー割り当て ID を使用して暗号化する (テンプレート)

  1. ユーザー割り当て ID を作成します。
  2. キー コンテナーを作成し、アクセス ポリシーによってユーザー割り当て ID へのアクセスを付与します。
  3. マネージド ユーザー ID とキー コンテナーの情報を使用して、Premium Service Bus 名前空間を作成します。

ユーザー割り当て ID を作成する

記事「ユーザー割り当てマネージド ID を作成する」の手順に従ってユーザー割り当て ID を作成します。 ユーザー割り当て ID は、CLIPowerShellAzure Resource Manager テンプレートREST を使用して作成することもできます。

注意

1 つの名前空間には、ユーザー ID を 4 つまで割り当てることができます。 これらの関連付けは、名前空間が削除されたとき、またはテンプレート内で identity -> typeNone に渡されたときに削除されます。

キー コンテナーを作成し、ユーザー割り当て ID へのアクセスを付与する

  1. 次のコマンドを実行して、消去保護と論理的な削除が有効なキー コンテナーを作成します。

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName} -Location "{location}" -EnableSoftDelete -EnablePurgeProtection           
    

    (または)

    次のコマンドを実行して、既存のキー コンテナーを更新します。 コマンドを実行する前に、リソース グループとキー コンテナー名の値を指定します。

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force            
    
  2. 次の PowerShell コマンドを使用して、ユーザー ID のサービス プリンシパル ID を取得します。 この例では ud1 が、暗号化に使用されるユーザー割り当て ID です。

    $servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"    
    
  3. アクセス ポリシーを割り当てることで、ユーザー割り当て ID に、キー コンテナーへのアクセスを付与します。

    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $servicePrincipal.Id -PermissionsToKeys get,wrapKey,unwrapKey,list    
    

    注意

    キーは 3 つまで追加できますが、暗号化に使用されるユーザー ID は、すべてのキーで同じである必要があります。 現時点では、1 つの暗号化 ID だけがサポートされています。

ユーザー ID とキー コンテナーの情報を使用して Premium Service Bus 名前空間を作成する

このセクションでは、Azure Resource Manager テンプレートを使用して以下のタスクを実行する方法を示す例を紹介します。

  • Service Bus 名前空間にユーザー マネージド ID を割り当てます。

                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "[parameters('identity').userAssignedIdentity]": {}
                    }
                },
    
  • キー コンテナーのキーと、キーにアクセスするためのユーザー マネージド ID を指定して、名前空間での暗号化を有効にします。

                    "encryption":{
                       "keySource":"Microsoft.KeyVault",
                       "keyVaultProperties":[
                            {
                                "keyName": "[parameters('keyName')]",
                                "keyVaultUri": "[parameters('keyVaultUri')]",
                                "identity": {
                                    "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                                }
                            }
                       ]
                    }
    
  1. 以下の内容の、CreateServiceBusNamespaceWithUserIdentityAndEncryption.json という名前の JSON ファイルを作成します。

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             },
         "identity": {
            "type": "Object",
            "defaultValue": {
                "userAssignedIdentity": ""
            },
            "metadata": {
                "description": "user-assigned identity."
            }
         }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2021-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
            "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                    "[parameters('identity').userAssignedIdentity]": {}
                }
            },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                        {
                            "keyName": "[parameters('keyName')]",
                            "keyVaultUri": "[parameters('keyVaultUri')]",
                            "identity": {
                                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                            }
                        }
                   ]
                }
             }
          }
       ]
    }        
    
  2. テンプレート パラメーター ファイル CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json を作成します。

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "identity": {
            "value": {
                "userAssignedIdentity": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER MANAGED IDENTITY NAME>"
            }
         }
       }
    }
    

    パラメーター ファイル内で、プレースホルダーを適切な値に置き換えます。

    プレースホルダー value
    <ServiceBusNamespaceName> Service Bus 名前空間の名前。
    <Location> 名前空間を作成する場所。
    <KeyVaultName> キー コンテナーの名前。
    <KeyName> キー コンテナー内のキーの名前。
    <AZURE SUBSCRIPTION ID> Azure のサブスクリプション ID。
    <RESOURCE GROUP NAME> ユーザー マネージド ID のリソース グループ。
    <USER MANAGED IDENTITY NAME> ユーザー マネージド ID の名前。
  3. 次の PowerShell コマンドを実行して、Resource Manager テンプレートをデプロイします。 コマンドを実行する前に、{MyRG} をお使いのリソース グループの名前に置き換えます。

    New-AzResourceGroupDeployment -Name CreateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryption.json -TemplateParameterFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json        
    

ユーザー割り当て ID とシステム割り当て ID の両方を使用する

名前空間は、システム割り当て ID とユーザー割り当て ID の両方を同時に持つことができます。 この場合 type プロパティは、次の例に示すように、SystemAssigned, UserAssigned になります。

"identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userIdentity1>" : {}
    }
}

このシナリオでは、保存データを暗号化するために、システム割り当て ID またはユーザー割り当て ID のいずれかを選択できます。

Resource Manager テンプレートでは、identity 属性を指定しない場合、システム マネージド ID が使用されます。 次にスニペットの例を示します。

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

暗号化のためにユーザー マネージド ID を使用することについては、次の例を参照してください。 identity 属性が、ユーザー マネージド ID に設定されていることに注目してください。

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]",
            "identity": {
                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
            }
         }
      ]
   }
}

データのインフラストラクチャの (二重) 暗号化を有効にする

データがセキュリティで保護されていることについて、より高いレベルの保証が必要な場合は、インフラストラクチャ レベルの暗号化 (二重暗号化とも呼ばれます) を有効にできます。

インフラストラクチャ暗号化が有効な場合、Azure Service Bus 内のデータは、2 つの異なる暗号化アルゴリズムと 2 つの異なるキーを使用して、2 回 (サービス レベルで 1 回とインフラストラクチャ レベルで 1 回) 暗号化されます。 このため、Azure Service Bus データのインフラストラクチャ暗号化によって、暗号化アルゴリズムまたはキーのいずれかが侵害される可能性があるシナリオから保護されます。

上記の UpdateServiceBusNamespaceWithEncryption.jsonrequireInfrastructureEncryption プロパティを下に示すように指定して Azure Resource Manager テンプレートを更新することで、インフラストラクチャの暗号化を有効にできます。

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",    
      "requireInfrastructureEncryption":true,         
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

キーのローテーション、取り消し、キャッシュ

暗号化キーのローテーション

Azure Key Vault のローテーション メカニズムを使用して、キー コンテナー内のキーをローテーションできます。 アクティブ化と有効期限の日付を設定してキー ローテーションを自動化することもできます。 Service Bus サービスによって新しいキーのバージョンが検出され、それらの使用が自動的に開始されます。

キーへのアクセスの取り消し

暗号化キーへのアクセスを取り消しても、Service Bus からデータが消去されることはありません。 ただし、Service Bus 名前空間からデータにアクセスすることはできません。 暗号化キーは、アクセス ポリシーを使用して、またはキーを削除することで取り消すことができます。 アクセス ポリシーと、キー コンテナーのセキュリティ保護の詳細については、「キー コンテナーへのアクセスをセキュリティで保護する」を参照してください。

暗号化キーを取り消すと、暗号化されている名前空間で Service Bus サービスが機能しなくなります。 キーへのアクセスを有効にするか、削除済みのキーを復元すると、Service Bus サービスによってキーが選択され、暗号化された Service Bus 名前空間からデータにアクセスできるようになります。

キーのキャッシュ

Service Bus インスタンスでは、そのリストされた暗号化キーが 5 分ごとにポーリングされます。 それらは、次のポーリング (5 分後) までキャッシュされて使用されます。 少なくとも 1 つのキーが使用できる限り、キューとトピックにアクセスできます。 リストされたすべてのキーがポーリング時にアクセスできない場合は、すべてのキューとトピックが使用できなくなります。

詳細を次に示します。

  • Service Bus サービスは、5 分ごとに名前空間のレコードに記載されているすべてのカスタマー マネージド キーをポーリングします。
    • キーがローテーションされている場合、このレコードは新しいキーで更新されます。
    • キーが取り消されている場合、そのキーはレコードから削除されます。
    • すべてのキーが取り消されている場合は、名前空間の暗号化状態が [取り消し済み] に設定されます。 その Service Bus 名前空間からはデータにアクセスできません。

geo ディザスター リカバリー使用時の考慮事項

geo ディザスター リカバリー - システム割り当て ID を使用した暗号化

カスタマー マネージド キーを使用した Microsoft マネージド キーの暗号化を有効にするために、指定した Azure キー コンテナー上のシステム割り当てマネージド ID に対してアクセス ポリシーが設定されます。 この手順により、Azure Service Bus 名前空間から Azure KeyVault へのアクセスが制御されます。 そのため、次の手順に従う必要があります。

  • Service Bus 名前空間に対して geo ディザスター リカバリーが既に有効になっているときに、カスタマー マネージド キーを有効化する場合は、以下を行います。
    • ペアリングを解除します。
    • プライマリとセカンダリの両方の名前空間について、キー コンテナーに、システム割り当てマネージド ID 用のアクセス ポリシーを設定します。
    • プライマリ名前空間に暗号化を設定します。
    • プライマリとセカンダリの名前空間を再びペアリングします。
  • カスタマー マネージド キーが既に設定されている Service Bus 名前空間で Geo DR を有効にしようとしている場合は、次の手順に従います。
    • キー コンテナーに対して、セカンダリ名前空間のマネージド ID を対象とするアクセス ポリシー を設定します。
    • プライマリとセカンダリの名前空間をペアリングします。

geo ディザスター リカバリー - ユーザー割り当て ID を使用した暗号化

以下に、推奨事項をいくつか示します。

  1. マネージド ID を作成し、マネージド ID に Key Vault のアクセス許可を割り当てます。
  2. ID をユーザー割り当て ID として追加し、両方の名前空間で、その ID を使用した暗号化を有効にします。
  3. 名前空間をペアにします。

ユーザー割り当て ID を使用して Geo DR と暗号化を有効にするための条件:

  1. セカンダリ名前空間を、暗号化が有効になっているプライマリ名前空間とペアにする必要がある場合は、ユーザー割り当て ID を使用してセカンダリ名前空間で既に暗号化が有効になっている必要があります。
  2. セカンダリに、名前空間に関連付けられているユーザー割り当て ID がある場合でも、既にペアになっているプライマリで暗号化を有効にすることはできません。

トラブルシューティング

症状

暗号化キーが無効になったため Service Bus 名前空間が無効になっていることを示すエラーが表示されます。

原因

resource_id または version を使用している可能性があります。これは、有効期限が切れている可能性のある特定のバージョンのキーにリンクしています。 特定のバージョンが指定されている場合、Service Bus では、キーがローテーションされた場合でも、そのバージョンのキーが使用されます。

解像度

resource_id または version を使用する代わりに、resource__versionless_id または versionless_id を使用します。

次のステップ

次の記事をご覧ください。