您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

配置客户管理的密钥以加密 Azure 事件中心静态数据

Azure 事件中心提供了通过 Azure 存储服务加密 (Azure SSE) 对静态数据进行加密的功能。 事件中心服务使用 Azure 存储来存储数据。 使用 Azure 存储存储的所有数据都使用 Microsoft 托管密钥进行加密。 如果你使用自己的密钥(也称为创建自己的密钥 (BYOK) 或客户管理的密钥),则仍使用 Microsoft 托管密钥对数据进行加密,但另外,将使用客户管理的密钥对 Microsoft 托管密钥进行加密。 使用此功能可以创建、轮换、禁用用于加密 Microsoft 托管密钥的客户管理的密钥,以及撤销对这些密钥的访问权限。 启用 BYOK 功能是在命名空间中执行的一次性设置过程。

重要

  • 事件中心高级层和专用层支持 BYOK 功能 。
  • 只能为新的或空的命名空间启用加密。 如果命名空间包含事件中心,则加密操作将会失败。

可以使用 Azure Key Vault 管理密钥并审核密钥使用情况。 可以创建自己的密钥并将其存储在 Key Vault 中,或者使用 Azure Key Vault API 来生成密钥。 有关 Azure 密钥保管库的详细信息,请参阅什么是 Azure 密钥保管库?

本文介绍了如何使用 Azure 门户配置包含客户管理的密钥的密钥保管库。 若要了解如何使用 Azure 门户创建 Key Vault,请参阅快速入门:使用 Azure 门户创建 Azure Key Vault

启用客户管理的密钥(Azure 门户)

若要在 Azure 门户中启用客户管理的密钥,请执行以下步骤。 如果使用的是专用层,请首先导航到事件中心专用层群集。

  1. 选择要在其上启用 BYOK 的命名空间。

  2. 在事件中心命名空间的“设置”页上,选择“加密”。

  3. 选择“客户管理的密钥加密(静态)”,如下图所示。

    启用客户管理的密钥

设置密钥保管库与密钥

启用客户管理的密钥后,需要将客户管理的密钥关联到 Azure 事件中心命名空间。 事件中心仅支持 Azure Key Vault。 如果启用了上一部分所述的“使用客户管理的密钥进行加密”选项,则需要将密钥导入 Azure Key Vault。 此外,必须为密钥配置“软删除”和“不清除”。 可以使用 PowerShellCLI 配置这些设置。

  1. 若要创建新的密钥保管库,请遵循 Azure Key Vault 快速入门。 有关导入现有密钥的详细信息,请参阅关于密钥、机密和证书

    重要

    为 Azure 事件中心使用客户管理的密钥需要为 Key Vault 配置两个必需的属性。 它们具有以下特点:“软删除”和“不清除”。 在 Azure 门户中创建新的 Key Vault 时,默认会启用这些属性。 但是,如果需要针对现有的 Key Vault 启用这些属性,必须使用 PowerShell 或 Azure CLI。

  2. 若要在创建保管库时启用“软删除”和“清除保护”,请使用 az keyvault create 命令。

    az keyvault create --name ContosoVault --resource-group ContosoRG --location westus --enable-soft-delete true --enable-purge-protection true
    
  3. 若要向现有保管库(已启用“软删除”)添加“清除保护”,请使用 az keyvault update 命令。

    az keyvault update --name ContosoVault --resource-group ContosoRG --enable-purge-protection true
    
  4. 遵循以下步骤创建密钥:

    1. 若要创建新密钥,请从“设置” 下的“密钥” 菜单中选择“生成/导入” 。

      选择“生成/导入”按钮

    2. 将“选项” 设置为“生成” 并提供密钥名称。

      创建密钥

    3. 现在,可以从下拉列表中选择要与事件中心命名空间关联以用于加密的密钥。

      从密钥保管库中选择密钥

      备注

      最多可以添加 3 个密钥来实现冗余。 如果某个密钥已过期或不可访问,则会使用其他密钥进行加密。

    4. 填写密钥详细信息,然后单击“选择”。 这将允许使用密钥(客户管理的密钥)来加密 Microsoft 托管密钥。

托管标识

可以向事件中心命名空间分配两种类型的托管标识。

  • 系统分配:可以直接在事件中心命名空间上启用托管标识。 启用系统分配的托管标识时,Azure AD 中会创建一个与相应事件中心命名空间的生命周期相关联的标识。 因此,命名空间被删除时,Azure 会自动删除标识。 按照设计,只有该 Azure 资源(命名空间)可以使用此标识从 Azure AD 请求令牌。

  • 用户分配:也可以将托管标识创建为独立的 Azure 资源,称为用户分配的标识。 可以创建用户分配的托管标识,并将其分配给一个或多个事件中心命名空间。 对于用户分配的托管标识,标识与使用它的资源分开管理。 它们不与命名空间的生命周期相关联。 可以显式删除不再需要的用户分配的标识。

    有关详细信息,请参阅什么是 Azure 资源的托管标识?

使用系统分配的标识进行加密(模板)

本部分介绍了如何使用 Azure 资源管理器模板 执行以下任务。

  1. 使用托管服务标识创建“事件中心命名空间”。
  2. 创建 密钥保管库 并向服务标识授予对密钥保管库的访问权限。
  3. 使用密钥保管库信息(密钥/值)更新事件中心命名空间。

使用托管服务标识创建事件中心群集和命名空间

本部分介绍了如何使用 Azure 资源管理器模板和 PowerShell 创建具有托管服务标识的 Azure 事件中心命名空间。

  1. 创建 Azure 资源管理器模板,以创建具有托管服务标识的事件中心命名空间。 为文件命名:CreateEventHubClusterAndNamespace.json:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "clusterName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Event Hub cluster."
             }
          },
          "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."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.EventHub/clusters",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('clusterName')]",
             "location":"[parameters('location')]",
             "sku":{
                "name":"Dedicated",
                "capacity":1
             }
          },
          {
             "type":"Microsoft.EventHub/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Standard",
                "tier":"Standard",
                "capacity":1
             },
             "properties":{
                "isAutoInflateEnabled":false,
                "maximumThroughputUnits":0,
                "clusterArmId":"[resourceId('Microsoft.EventHub/clusters', parameters('clusterName'))]"
             },
             "dependsOn":[
                "[resourceId('Microsoft.EventHub/clusters', parameters('clusterName'))]"
             ]
          }
       ],
       "outputs":{
          "EventHubNamespaceId":{
             "type":"string",
             "value":"[resourceId('Microsoft.EventHub/namespaces',parameters('namespaceName'))]"
          }
       }
    }
    
  2. 创建一个模板参数文件,名为:CreateEventHubClusterAndNamespaceParams.json。

    备注

    请替换以下值:

    • <EventHubsClusterName> - 事件中心群集的名称
    • <EventHubsNamespaceName> - 事件中心命名空间的名称
    • <Location> - 事件中心命名空间的位置
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "clusterName":{
             "value":"<EventHubsClusterName>"
          },
          "namespaceName":{
             "value":"<EventHubsNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          }
       }
    }
    
    
  3. 运行以下 PowerShell 命令以部署用于创建事件中心命名空间的模板。 然后检索该事件中心命名空间的 ID 供稍后使用。 在运行该命令之前,请将 {MyRG} 替换为资源组的名称。

    $outputs = New-AzResourceGroupDeployment -Name CreateEventHubClusterAndNamespace -ResourceGroupName {MyRG} -TemplateFile ./CreateEventHubClusterAndNamespace.json -TemplateParameterFile ./CreateEventHubClusterAndNamespaceParams.json
    
    $EventHubNamespaceId = $outputs.Outputs["eventHubNamespaceId"].value
    

向事件中心命名空间标识授予对密钥保管库的访问权限

  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. 设置密钥保管库访问策略,使事件中心命名空间的托管标识可以访问密钥保管库中的密钥值。 使用在上一部分创建的事件中心命名空间的 ID。

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

使用密钥保管库中客户管理的密钥加密事件中心命名空间中的数据

到目前为止,你已完成以下步骤:

  1. 创建了具有托管标识的高级命名空间。
  2. 创建了密钥保管库,并向托管标识授予了对该密钥保管库的访问权限。

在此步骤中,将使用密钥保管库信息更新事件中心命名空间。

  1. 创建包含以下内容的名为 CreateEventHubClusterAndNamespace.json 的 JSON 文件:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "clusterName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Event Hub cluster."
             }
          },
          "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.EventHub/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Standard",
                "tier":"Standard",
                "capacity":1
             },
             "properties":{
                "isAutoInflateEnabled":false,
                "maximumThroughputUnits":0,
                "clusterArmId":"[resourceId('Microsoft.EventHub/clusters', parameters('clusterName'))]",
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                      {
                         "keyName":"[parameters('keyName')]",
                         "keyVaultUri":"[parameters('keyVaultUri')]"
                      }
                   ]
                }
             }
          }
       ]
    }
    
  2. 创建一个模板参数文件:UpdateEventHubClusterAndNamespaceParams.json。

    备注

    请替换以下值:

    • <EventHubsClusterName> - 事件中心群集的名称。
    • <EventHubsNamespaceName> - 事件中心命名空间的名称
    • <Location> - 事件中心命名空间的位置
    • <KeyVaultName> - 你的密钥保管库的名称
    • <KeyName> - 密钥保管库中密钥的名称
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "clusterName":{
             "value":"<EventHubsClusterName>"
          },
          "namespaceName":{
             "value":"<EventHubsNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          }
       }
    }
    
  3. 运行以下 PowerShell 命令以部署资源管理器模板。 在运行该命令之前,请将 {MyRG} 替换为你的资源组名称。

    New-AzResourceGroupDeployment -Name UpdateEventHubNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./UpdateEventHubClusterAndNamespace.json -TemplateParameterFile ./UpdateEventHubClusterAndNamespaceParams.json 
    

使用用户分配的标识进行加密(模板)

  1. 创建用户分配的标识。
  2. 创建密钥保管库,并通过访问策略向用户分配的标识授予访问权限。
  3. 使用托管用户标识和密钥保管库信息创建事件中心命名空间。

创建用户分配的标识

按照创建用户分配的托管标识文章中的说明创建用户分配的标识。 也可使用 CLIPowerShellAzure 资源管理器模板REST 创建用户分配标识。

备注

最多可以将 4 个用户标识分配给命名空间。 删除命名空间或将模板中的 identity -> type 传递到 None 时,将删除这些关联。

创建密钥保管库并授予对用户分配标识的访问权限

  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。 在示例中,ud1 是用户分配的标识,用于加密。

    $servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"    
    
  3. 通过分配访问策略,向用户分配的标识授予对密钥保管库的访问权限。

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

    备注

    可以添加最多 3 个密钥,但对于所有密钥,用于加密的用户标识应相同。 目前,仅支持单个加密标识。

使用用户标识和密钥保管库信息创建事件中心命名空间

本部分举例说明如何使用 Azure 资源管理器模板执行以下任务。

  • 将用户托管标识分配给事件中心命名空间。

                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "[parameters('identity').userAssignedIdentity]": {}
                    }
                },
    
  • 通过指定密钥保管库中的密钥和用于访问该密钥的用户托管标识,对命名空间启用加密。

                    "encryption":{
                       "keySource":"Microsoft.KeyVault",
                       "keyVaultProperties":[
                            {
                                "keyName": "[parameters('keyName')]",
                                "keyVaultUri": "[parameters('keyVaultUri')]",
                                "identity": {
                                    "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                                }
                            }
                       ]
                    }
    
  1. 创建包含以下内容的名为 CreateEventHubsNamespaceWithUserIdentityAndEncryption.json 的 JSON 文件:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
        "clusterName":{
            "type":"string",
             "metadata":{
                "description":"Name for the Event Hub cluster."
             }
          },
          "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.EventHub/clusters",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('clusterName')]",
             "location":"[parameters('location')]",
             "sku":{
                "name":"Dedicated",
                "capacity":1
             }
          },
          {
             "type":"Microsoft.EventHub/namespaces",
             "apiVersion":"2021-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "sku":{
                "name":"Standard",
                "tier":"Standard",
                "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. 创建模板参数文件:CreateEventHubsNamespaceWithUserIdentityAndEncryptionParams.json。

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<EventHubsNamespaceName>"
          },
          "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>"
            }
         }
       }
    }
    

    在参数文件中,将占位符替换为相应的值。

    占位符
    <EventHubsNamespaceName> 事件中心命名空间的名称。
    <Location> 要创建命名空间的位置。
    <KeyVaultName> 密钥保管库的名称。
    <KeyName> 密钥保管库中密钥的名称。
    <AZURE SUBSCRIPTION ID> Azure 订阅 ID。
    <RESOURCE GROUP NAME> 用户托管标识的资源组。
    <USER MANAGED IDENTITY NAME> 用户托管标识的名称。
  3. 运行以下 PowerShell 命令以部署资源管理器模板。 在运行该命令之前,请将 {MyRG} 替换为你的资源组名称。

    New-AzResourceGroupDeployment -Name CreateEventHubsNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./ CreateEventHubsNamespaceWithUserIdentityAndEncryption.json -TemplateParameterFile ./ CreateEventHubsNamespaceWithUserIdentityAndEncryptionParams.json        
    

同时使用用户分配的标识和系统分配的标识

一个命名空间可同时具有系统分配的标识和用户分配的标识。 在这种情况下,type 属性将为 SystemAssignedUserAssigned,如下例所示。

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

在此方案中,可以选择系统分配的标识或用户分配的标识来加密静态数据。

在资源管理器模板中,如果未指定 identity 属性,则使用系统托管标识。 下面是一个示例片段。

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

参见以下使用用户托管标识进行加密的示例。 请注意,identity 属性设置为用户托管标识。

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

对数据启用基础结构(或双重)加密

如果需要更高级别的数据安全保证,则可以启用基础结构级别的加密(也称为双重加密)。

启用基础结构加密后,将对事件中心命名空间中的数据进行两次加密,分别在服务级别和基础架构级别使用两种不同的加密算法和两个不同的密钥。 因此,事件中心数据的基础结构加密可以在其中一种加密算法或密钥可能受到安全威胁的情况下提供保护。

可以通过使用上述 CreateEventHubClusterAndNamespace.json 中的 requireInfrastructureEncryption 属性更新 Azure 资源管理器模板来启用基础架构加密,如下所示。

"properties":{
   "isAutoInflateEnabled":false,
   "maximumThroughputUnits":0,
   "clusterArmId":"[resourceId('Microsoft.EventHub/clusters', parameters('clusterName'))]",
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "requireInfrastructureEncryption":true,
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

轮换、撤销和缓存加密密钥

轮换加密密钥

可以使用 Azure Key Vault 轮换机制来轮换密钥保管库中的密钥。 还可以设置激活和过期日期以自动轮换密钥。 事件中心服务将检测新密钥版本,并自动开始使用新版本。

撤销对密钥的访问权限

撤销对加密密钥的访问权限不会从事件中心中清除数据。 但是,将无法从事件中心命名空间访问数据。 可以通过使用访问策略或删除密钥来撤销加密密钥。 在保护对密钥保管库的访问中详细了解访问策略以及如何保护密钥保管库。

撤销加密密钥后,已加密的命名空间中的事件中心服务将无法正常运行。 如果启用了对密钥的访问或者还原了已删除的密钥,则事件中心服务将选取密钥,使你能够从已加密的事件中心命名空间访问数据。

缓存密钥

事件中心实例(事件中心)每 5 分钟轮询一次列出的加密密钥。 服务总线将缓存加密密钥并使用,直到下一次轮询(5 分钟后)。 只要至少有一个密钥可用,事件中心就可访问。 如果所有列出的密钥在轮询时均无法访问,则所有事件中心都将变为不可用。

下面是更多详细信息:

  • 事件中心服务每隔 5 分钟就会轮询命名空间记录中列出的所有客户管理的密钥:
    • 如果已经旋转了某个密钥,则使用新密钥更新该记录。
    • 如果密钥已被撤销,则从记录中删除该密钥。
    • 如果所有密钥均被撤销,则会将命名空间的加密状态设置为“已撤销”。 无法从事件中心命名空间访问数据。

使用异地灾难恢复时的注意事项

重要

要在使用 BYOK 加密的命名空间上启用异地灾难恢复,用于配对的辅助命名空间必须在该命名空间上启用系统分配或用户分配的托管标识。

异地灾难恢复 - 使用系统分配的标识进行加密

为了将客户管理的密钥用于 Microsoft 管理的密钥的加密,已在指定的 Azure KeyVault 上为系统分配的托管标识设置了一个访问策略。 这可确保能够控制从 Azure 事件中心命名空间对 Azure KeyVault 的访问。

因此:

  • 如果已对事件中心命名空间启用了异地灾难恢复,并且希望启用客户管理的密钥,则
    • 断开配对。
    • 为密钥保管库的主命名空间和辅助命名空间的系统分配的托管标识设置访问策略
    • 在主要命名空间上设置加密。
    • 将主要和辅助命名空间重新配对。
  • 如果想要对已设置客户管理的密钥的事件中心命名空间启用异地灾难恢复,请执行以下步骤:

异地灾难恢复 - 使用用户分配的标识进行加密

以下是一些建议:

  1. 创建托管标识,并向托管标识分配密钥保管库权限。
  2. 将该标识添加为用户分配的标识,并启用两个命名空间上的标识加密。
  3. 将命名空间配对在一起

使用用户分配的标识启用异地灾难恢复和加密的条件:

  1. 如果辅助命名空间要与启用了加密的主命名空间配对,则其必须已使用用户分配的标识启用加密。
  2. 即使辅助命名空间具有与已配对的主命名空间关联的用户分配的标识,也无法在此主命名空间上启用加密。

设置诊断日志

为启用了 BYOK 的命名空间设置诊断日志可提供有关操作所需的信息。 可以启用这些日志,稍后将其流式传输到事件中心,或通过 log analytics 进行分析或流式传输到存储,以执行自定义分析。 要了解有关诊断日志的详细信息,请参阅 Azure 诊断日志概述。 有关架构,请参阅监视数据引用

后续步骤

请参阅以下文章: