設定客戶自控金鑰來加密 Azure 事件中樞待用資料
Azure 事件中樞透過 Azure 儲存體服務加密 (Azure SSE) 提供待用資料加密功能。 事件中樞服務使用 Azure 儲存體來儲存資料。 以 Azure 儲存體儲存的所有資料,均使用 Microsoft 受控金鑰加密。 如果使用自己的金鑰 (也稱為攜帶您自己的金鑰 (BYOK) 或客戶自控金鑰),則仍使用 Microsoft 受控金鑰來加密資料,但除此之外,Microsoft 受控金鑰會使用客戶自控金鑰進行加密。 此功能可供使用者建立、輪替、停用和撤銷用於加密 Microsoft 受控金鑰的客戶自控金鑰的存取權。 啟用 BYOK 功能是在命名空間上的一次性設定流程。
重要
- 事件中樞的進階和專用層支援 BYOK 功能。
- 只能針對新的或空白命名空間啟用加密。 如果命名空間包含事件中樞,加密作業會失敗。
您可以使用 Azure Key Vault (包括 Azure Key Vault 受控 HSM) 來管理金鑰和稽核金鑰使用方式。 您可以建立自己的金鑰並將其儲存在金鑰保存庫中,或是使用 Azure Key Vault API 來產生金鑰。 如需 Azure 金鑰保存庫的詳細資訊,請參閱 什麼是 Azure 金鑰保存庫?
本文說明如何使用 Azure 入口網站將客戶自控金鑰設定給金鑰保存庫。 若要了解如何使用 Azure 入口網站建立金鑰保存庫,請參閱快速入門:使用 Azure 入口網站建立 Azure Key Vault。
啟用客戶自控金鑰 (Azure 入口網站)
若要在 Azure 入口網站中啟用客戶自控金鑰,請遵循下列步驟。 如果您使用專用層,請先瀏覽至事件中樞專用叢集。
選取您要啟用 BYOK 的命名空間。
在事件中樞命名空間的 [設定] 頁面上,選取 [加密]。
選取 [客戶自控金鑰待用加密],如下圖所示。
注意
目前您無法透過入口網站設定 Azure Key Vault 受控 HSM。
提供金鑰給金鑰保存庫
啟用客戶自控金鑰之後,您必須將客戶自控金鑰與 Azure 事件中樞命名空間建立關聯。 事件中樞僅支援 Azure Key Vault。 如果您在上一節啟用 [使用客戶自控金鑰來加密] 選項,則必須將金鑰匯入 Azure Key Vault。 此外,金鑰必須設定為虛刪除和不要清除。 您可以使用 PowerShell 或 CLI 來完成這些設定。
若要建立新的金鑰保存庫,請遵循 Azure Key Vault 快速入門。 如需有關匯入現有金鑰的詳細資訊,請參閱關於金鑰、祕密和憑證。
重要
如果要對 Azure 事件中樞使用客戶自控金鑰,金鑰保存庫需要設定兩個必要屬性。 分別是虛刪除和不要清除。 當您在 Azure 入口網站中建立新的金鑰保存庫時,預設會啟用這些屬性。 但是,如果您需要在現有的金鑰保存庫上啟用這些屬性,則必須使用 PowerShell 或 Azure CLI。
若要在建立保存庫時開啟虛刪除和清除保護,請使用 az keyvault create 命令。
az keyvault create --name ContosoVault --resource-group ContosoRG --location westus --enable-soft-delete true --enable-purge-protection true
若要將現有的保存庫 (已啟用虛刪除) 加上清除保護,請使用 az keyvault update 命令。
az keyvault update --name ContosoVault --resource-group ContosoRG --enable-purge-protection true
- 遵循下列步驟來建立金鑰:
若要建立新的金鑰,從 [設定] 下方的 [金鑰] 功能表中選取 [產生/匯入]。
將 [選項] 設定為 [產生],並為金鑰提供名稱。
您現在可以從下拉式清單選取此金鑰,以便與要加密的事件中樞命名空間建立關聯。
注意
您最多可以新增 3 個金鑰作為備援。 如果其中一個金鑰過期或無法存取,則會使用其他金鑰來加密。
填入金鑰的詳細資料,然後按一下 [選取]。 這樣會以您的金鑰 (客戶自控金鑰) 來加密 Microsoft 受控金鑰。
受控識別
有兩種受控識別可以指派給事件中樞命名空間。
系統指派:您可以直接在事件中樞命名空間上啟用受控識別。 當您啟用系統指派的受控識別時,Microsoft Entra 中會建立身分識別,而且只在該事件中樞命名空間的生命週期內存在。 因此,刪除命名空間時,Azure 會自動為您刪除身分識別。 預設只有 Azure 資源 (命名空間) 可以使用此身分識別向 Microsoft Entra ID 要求權杖。
使用者指派:受控識別也可以建立為獨立的 Azure 資源,稱為使用者指派的身分識別。 您可以建立使用者指派的受控識別,並指派給一個或多個事件中樞命名空間。 若是使用者指派的受控識別,則會分開管理身分識別與使用身分識別的資源。 與命名空間的生命週期無關。 不再需要使用者指派的身分識別時,即可明確刪除。
如需詳細資訊,請參閱什麼是適用於 Azure 資源的受控識別?。
使用系統指派的身分識別來加密 (範本)
本節說明如何使用 Azure Resource Manager 範本來執行下列工作。
- 建立具有受控服務識別的事件中樞命名空間。
- 建立金鑰保存庫,並授權服務識別存取金鑰保存庫。
- 使用金鑰保存庫資訊 (金鑰/值) 更新事件中樞命名空間。
建立事件中樞叢集和具有受控服務識別的命名空間
本節說明如何使用 Azure Resource Manager 範本和 PowerShell,以建立具有受控服務識別的 Azure 事件中樞命名空間。
建立 Azure Resource Manager 範本,以建立具有受控服務識別的事件中樞命名空間。 將檔案命名為 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'))]" } } }
建立名為 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>" } } }
執行下列 PowerShell 命令來部署範本,以建立事件中樞命名空間。 然後,擷取事件中樞命名空間的識別碼,供稍後使用。 執行命令之前,將
{MyRG}
換成資源群組的名稱。$outputs = New-AzResourceGroupDeployment -Name CreateEventHubClusterAndNamespace -ResourceGroupName {MyRG} -TemplateFile ./CreateEventHubClusterAndNamespace.json -TemplateParameterFile ./CreateEventHubClusterAndNamespaceParams.json $EventHubNamespaceId = $outputs.Outputs["eventHubNamespaceId"].value
授權事件中樞命名空間身分識別存取金鑰保存庫
設定金鑰保存庫存取原則,讓事件中樞命名空間的受控識別可以存取金鑰保存庫中的金鑰值。 使用上一節的事件中樞命名空間識別碼。
$identity = (Get-AzureRmResource -ResourceId $EventHubNamespaceId -ExpandProperties).Identity
Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $identity.PrincipalId -PermissionsToKeys get,wrapKey,unwrapKey,list
使用金鑰保存庫中的客戶自控金鑰,加密事件中樞命名空間中的資料
您目前為止已完成下列步驟:
- 建立具有受控識別的進階命名空間。
- 建立金鑰保存庫,並授權受控識別存取金鑰保存庫。
在此步驟中,您將使用金鑰保存庫資訊來更新事件中樞命名空間。
建立名為 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')]" } ] } } } ] }
建立範本參數檔案: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" } } }
執行下列 PowerShell 命令,以部署 Resource Manager 範本。 執行命令之前,將
{MyRG}
換成您的資源群組名稱。New-AzResourceGroupDeployment -Name UpdateEventHubNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./UpdateEventHubClusterAndNamespace.json -TemplateParameterFile ./UpdateEventHubClusterAndNamespaceParams.json
利用使用者指派的身分識別來加密 (範本)
- 建立使用者指派的身分識別。
- 建立金鑰保存庫,並透過存取原則將存取權授與使用者指派的身分識別。
- 建立具有受控使用者身分識別和金鑰保存庫資訊的事件中樞命名空間。
建立使用者指派的身分識別
依照建立使用者指派的受控識別一文中的指示,建立使用者指派的身分識別。 您也可以使用 CLI、PowerShell、Azure Resource Manager 範本和 REST,建立使用者指派的身分識別。
注意
您最多可以將 4 個使用者身分識別指派給命名空間。 刪除命名空間時,或當您將範本中的 identity -> type
傳遞至 None
時,就會刪除這些關聯。
授予使用者指派身分識別的存取權
使用下列 PowerShell 命令,以取得使用者身分識別的服務主體識別碼。 在範例中,
ud1
是使用者指派用於加密的身分識別。$servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"
指派存取原則,以授權使用者指派的身分識別存取金鑰保存庫。
Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $servicePrincipal.Id -PermissionsToKeys get,wrapKey,unwrapKey,list
注意
您最多可以新增 3 個金鑰,但就所有金鑰而言,用於加密的使用者身分識別都應該相同。 目前僅支援單一加密身分識別。
建立具有使用者身分識別和金鑰保存庫資訊的事件中樞命名空間
本節舉例說明如何使用 Azure Resource Manager 範本來執行下列工作。
將使用者受控識別指派給事件中樞命名空間。
"identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('identity').userAssignedIdentity]": {} } },
指定金鑰保存庫中的金鑰和用於存取金鑰的使用者受控識別,以在命名空間上啟用加密。
"encryption":{ "keySource":"Microsoft.KeyVault", "keyVaultProperties":[ { "keyName": "[parameters('keyName')]", "keyVaultUri": "[parameters('keyVaultUri')]", "identity": { "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]" } } ] }
建立名為 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]" } } ] } } } ] }
建立範本參數檔案: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>" } } } }
在參數檔案中,將預留位置換成適當的值。
預留位置 value <EventHubsNamespaceName>
事件中樞命名空間的名稱。 <Location>
您要建立命名空間的位置。 <KeyVaultName>
金鑰保存庫的名稱。 <KeyName>
金鑰保存庫中的金鑰名稱。 <AZURE SUBSCRIPTION ID>
您的 Azure 訂用帳戶識別碼。 <RESOURCE GROUP NAME>
使用者受控識別的資源群組。 <USER MANAGED IDENTITY NAME>
使用者受控識別的名稱。 執行下列 PowerShell 命令,以部署 Resource Manager 範本。 執行命令之前,將
{MyRG}
換成您的資源群組名稱。New-AzResourceGroupDeployment -Name CreateEventHubsNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./ CreateEventHubsNamespaceWithUserIdentityAndEncryption.json -TemplateParameterFile ./ CreateEventHubsNamespaceWithUserIdentityAndEncryptionParams.json
使用者指派和系統指派的身分識別一起使用
一個命名空間可以同時有系統指派和使用者指派的身分識別。 在此情況下,type
屬性為 SystemAssigned
, UserAssigned
,如下列範例所示。
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userIdentity1>" : {}
}
}
在此情節中,您可以選擇系統指派的身分識別或使用者指派的身分識別來加密待用資料。
在 Resource Manager 範本中,如果您未指定 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 Resource Manager 範本,以啟用基礎結構加密,如下所示。
"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。
因此:
- 如果事件中樞命名空間已啟用異地災害復原,而且您想要啟用客戶自控金鑰,請遵循下列步驟:
- 解除配對。
- 設定存取原則,讓主要和次要命名空間都能以系統指派的受控識別來存取金鑰保存庫。
- 在主要命名空間上設定加密。
- 將主要和次要命名空間重新配對。
- 如果您要在已設定客戶自控金鑰的事件中樞命名空間上啟用異地災害復原,請遵循下列步驟:
- 設定存取原則,讓次要命名空間以受控識別來存取金鑰保存庫。
- 將主要和次要命名空間配對。
異地災害復原 - 利用使用者指派的身分識別來加密
以下是一些建議:
- 建立受控識別,並將 Key Vault 權限指派給受控識別。
- 將身分識別新增為使用者指派的身分識別,並在這兩個命名空間上都以此身分識別啟用加密。
- 將命名空間配對在一起
以使用者指派的身分識別啟用異地災害復原和加密的條件:
- 次要命名空間必須已啟用以使用者指派的身分識別來加密,才能與已啟用加密的主要命名空間配對。
- 即使次要命名空間與使用者指派的身分識別相關聯,也無法在已配對的主要命名空間上啟用加密。
設定診斷記錄
針對已啟用 BYOK 的命名空間,設定診斷記錄可提供作業的必要資訊。 這些記錄可以啟用並於稍後串流至事件中樞、透過記錄分析來分析,或串流至儲存體來執行自訂分析。 若要深入了解診斷記錄,請參閱 Azure 診斷記錄的概觀。 關於結構描述,請參閱監視資料參考。
下一步
請參閱以下文章: