为 Service Fabric 托管群集节点启用磁盘加密
Service Fabric 托管群集支持使用两种磁盘加密选项来帮助保护数据,使组织能够信守在安全性与合规性方面所做的承诺。 建议的选项是“主机上加密”,但也支持“Azure 磁盘加密”。 查看磁盘加密选项,并确保所选的选项符合需求。
在主机上启用加密
此加密方法在 Azure 磁盘加密的基础上做了改进,它可以通过加密 Azure 存储服务中的数据,来支持 VM 的所有 OS 类型和映像(包括自定义映像)。 此方法不使用 VM CPU,也不影响 VM 的性能,从而使工作负载能够利用所有可用的 VM SKU 资源。
注意
无法对现有节点类型启用此方法。 必须预配新节点类型并迁移工作负载。
注意
使用主机上加密时,Azure 安全中心磁盘加密状态目前会显示为“不正常”
请遵循这些步骤并参考此示例模板来部署启用了主机加密的新 Service Fabric 托管群集。
查看以下限制,以验证这些群集是否符合要求。
在部署群集之前设置所需的必备组件。
需要在托管群集模板中为每种节点类型的磁盘加密配置
enableEncryptionAtHost
属性。 该示例已经过预先配置。- Service Fabric 托管群集资源 apiVersion 必须为 2021-11-01-preview 或更高版本。
{ "apiVersion": "[variables('sfApiVersion')]", "type": "Microsoft.ServiceFabric/managedclusters/nodetypes", "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]", "location": "[resourcegroup().location]", "properties": { "enableEncryptionAtHost": true ... } }
部署和验证
部署已配置的并已启用主机加密的托管群集。
$clusterName = "<clustername>" $resourceGroupName = "<rg-name>" New-AzResourceGroupDeployment -Name $resourceGroupName -ResourceGroupName $resourceGroupName -TemplateFile .\azuredeploy.json -TemplateParameterFile .\azuredeploy.parameters.json -Debug -Verbose
你可使用
Get-AzVmss
命令来检查某个节点类型的底层规模集上的磁盘加密状态。 首先,需要找到托管群集的支持资源组(包含底层虚拟网络、负载均衡器、公共 IP、NSG、规模集和存储帐户)的名称。 确保将NodeTypeNAme
修改为要检查的任何群集节点类型名称(在部署模板中指定)。$NodeTypeName = "NT2" $clustername = <clustername> $resourceGroupName = "<rg-name>" $supportResourceGroupName = "SFC_" + (Get-AzServiceFabricManagedCluster -ResourceGroupName $resourceGroupName -Name $clustername).ClusterId $VMSS = Get-AzVmss -ResourceGroupName $supportResourceGroupName -Name $NodeTypeName $VMSS.VirtualMachineProfile.SecurityProfile.EncryptionAtHost
返回的输出应如下所示:
$VMSS.VirtualMachineProfile.SecurityProfile.EncryptionAtHost True
启用 Azure 磁盘加密
Azure 磁盘加密通过使用 Linux 中的 DM-Crypt 功能或 Windows 中的 BitLocker 功能,为 Azure 虚拟机 (VM) 的 OS 和数据磁盘提供卷加密。 ADE 与 Azure Key Vault 集成,用于控制和管理磁盘加密密钥与机密。
本指南介绍如何使用适用于虚拟机规模集的 Azure 磁盘加密功能,在 Windows 中通过 Azure 资源管理器 (ARM) 模板在 Service Fabric 托管群集节点上启用磁盘加密。
注册 Azure 磁盘加密
针对虚拟机规模集的磁盘加密预览版需要自我注册。 运行下面的命令:
Register-AzProviderFeature -FeatureName "UnifiedDiskEncryption" -ProviderNamespace "Microsoft.Compute"
运行以下命令,检查注册状态:
Get-AzProviderFeature -ProviderNamespace "Microsoft.Compute" -FeatureName "UnifiedDiskEncryption"
状态更改为“已注册”后,即可执行后续操作。
为密钥保管库预配磁盘加密
Azure 磁盘加密需要 Azure Key Vault 来控制和管理磁盘加密密钥和机密。 密钥保管库和 Service Fabric 托管群集必须位于同一个 Azure 区域和订阅中。 满足这些要求后,就可为新的或现有的密钥保管库启用磁盘加密,然后使用它们。
创建启用了磁盘加密的密钥保管库
运行以下命令,创建启用磁盘加密的新密钥保管库。 确保密钥保管库与群集位于同一区域。
$resourceGroupName = "<rg-name>" $keyvaultName = "<kv-name>" New-AzResourceGroup -Name $resourceGroupName -Location chinaeast2 New-AzKeyVault -ResourceGroupName $resourceGroupName -Name $keyvaultName -Location chinaeast2 -EnabledForDiskEncryption
更新现有密钥保管库,以启用磁盘加密
运行以下命令,为现有密钥保管库启用磁盘加密。
Set-AzKeyVaultAccessPolicy -ResourceGroupName $resourceGroupName -VaultName $keyvaultName -EnabledForDiskEncryption
更新用于磁盘加密的模板和参数文件
以下步骤将指导你完成所需的模板更改,以便在现有托管群集上启用磁盘加密。 或者,也可使用以下模板部署启用磁盘加密的新 Service Fabric 托管群集: https://github.com/Azure-Samples/service-fabric-cluster-templates/tree/master/SF-Managed-Standard-SKU-1-NT-DiskEncryption
将以下参数添加到模板,并在
keyVaultResourceId
下替换你自己的订阅、资源组名称和保管库名称:"parameters": { "keyVaultResourceId": { "type": "string", "defaultValue": "/subscriptions/########-####-####-####-############/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<kv-name>", "metadata": { "description": "Full resource id of the Key Vault used for disk encryption." } }, "volumeType": { "type": "string", "defaultValue": "All", "metadata": { "description": "Type of the volume OS or Data to perform encryption operation" } } },
接下来,将
AzureDiskEncryption
VM 扩展添加到模板中的托管群集节点类型:"properties": { "vmExtensions": [ { "name": "AzureDiskEncryption", "properties": { "publisher": "Microsoft.Azure.Security", "type": "AzureDiskEncryption", "typeHandlerVersion": "2.2", "autoUpgradeMinorVersion": true, "settings": { "EncryptionOperation": "EnableEncryption", "KeyVaultURL": "[reference(parameters('keyVaultResourceId'),'2016-10-01').vaultUri]", "KeyVaultResourceId": "[parameters('keyVaultResourceID')]", "VolumeType": "[parameters('volumeType')]" } } } ] }
最后,更新参数文件,在 keyVaultResourceId 中替换你自己的订阅、资源组和密钥保管库名称:
"parameters": { ... "keyVaultResourceId": { "value": "/subscriptions/########-####-####-####-############/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<kv-name>" }, "volumeType": { "value": "All" } }
部署并验证更改
准备就绪后,部署这些更改,在托管群集上启用磁盘加密。
$clusterName = "<clustername>" New-AzResourceGroupDeployment -Name $resourceGroupName -ResourceGroupName $resourceGroupName .\azuredeploy.json -TemplateParameterFile .\azuredeploy.parameters.json -Debug -Verbose
你可使用
Get-AzVmssDiskEncryption
命令来检查某个节点类型的底层规模集上的磁盘加密状态。 首先,需要找到托管群集的支持资源组(包含底层虚拟网络、负载均衡器、公共 IP、NSG、规模集和存储帐户)的名称。 确保将VmssName
修改为要检查的任何群集节点类型名称(在部署模板中指定)。$VmssName = "NT1" $clustername = <clustername> $supportResourceGroupName = "SFC_" + (Get-AzServiceFabricManagedCluster -ResourceGroupName $resourceGroupName -Name $clustername).ClusterId Get-AzVmssDiskEncryption -ResourceGroupName $supportResourceGroupName -VMScaleSetName $VmssName
输出应如下所示:
ResourceGroupName : SFC_########-####-####-####-############ VmScaleSetName : NT1 EncryptionEnabled : True EncryptionExtensionInstalled : True