你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Red Hat OpenShift 上使用客户管理的密钥加密 OS 磁盘

默认情况下,Azure Red Hat OpenShift 群集中虚拟机的 OS 磁盘使用由 Microsoft Azure 管理的自动生成的密钥进行加密。 为了增加安全性,客户可以在部署 Azure Red Hat OpenShift 群集时使用自管理的密钥加密 OS 磁盘。 此功能通过使用客户管理的密钥 (CMK) 加密机密数据,可以实现更多控制。

使用客户管理的密钥创建的群集具有默认存储类(通过其密钥启用)。 因此,OS 磁盘和数据磁盘都通过这些密钥进行加密。 客户管理的密钥存储在 Azure Key Vault 中。

有关使用 Azure Key Vault 创建和维护密钥的详细信息,请参阅 Microsoft Azure 文档中的 Azure 磁盘存储的服务器端加密

使用基于主机的加密,可将存储在 Azure Red Hat OpenShift 代理节点 VM 的 VM 主机上的数据进行静态加密,并以加密形式将其传送到存储服务。 基于主机的加密意味着,临时磁盘将通过平台管理的密钥进行静态加密。

OS 和数据磁盘的缓存将通过平台管理的密钥或客户管理的密钥(具体取决于在这些磁盘上设置的加密类型)进行静态加密。 默认情况下,使用 Azure Red Hat OpenShift 时,OS 和数据磁盘将通过平台管理的密钥进行静态加密,这意味着,这些磁盘的缓存也会默认通过平台管理的密钥进行静态加密。

可以按照下面的加密步骤指定自己的托管密钥。 这些磁盘的缓存也会使用你在此步骤中指定的密钥进行加密。

限制

客户有责任维护 Azure 中的密钥保管库和磁盘加密集。 维护密钥失败将导致 Azure Red Hat OpenShift 群集损坏。 VM 将停止工作,因此,整个 Azure Red Hat OpenShift 群集也将停止运行。

Azure Red Hat OpenShift 工程团队无法访问密钥。 因此,他们也无法备份、复制或检索密钥。

有关使用磁盘加密集管理加密密钥的详细信息,请参阅 Microsoft Azure 文档中的 Azure 磁盘存储的服务器端加密

先决条件

  • 验证权限。 必须具有贡献者和用户访问管理员权限或所有者权限。

  • 如果有多个 Azure 订阅,请注册资源提供程序。 有关注册详细信息,请参阅注册资源提供程序

  • 需要在订阅上启用 EncryptionAtHost 功能。 可以通过运行以下命令启用它:

    az feature register --namespace Microsoft.Compute --name EncryptionAtHost
    
  • 可以通过运行以下命令来检查功能的当前状态:

    az feature show --namespace Microsoft.Compute --name EncryptionAtHost
    

创建包含两个空子网的虚拟网络

创建包含两个空子网的虚拟网络。 如果现有虚拟网络满足你的需求,则可以跳过此步骤。 要查看创建虚拟网络的过程,请参阅创建包含两个空子网的虚拟网络

创建 Azure Key Vault 实例

必须使用 Azure Key Vault 实例来存储密钥。 创建启用了清除保护功能的新 Key Vault。 然后,在 Key Vault 中创建一个新密钥来存储你自己的自定义密钥。

  1. 设置更多环境权限:
    export KEYVAULT_NAME=$USER-enckv
    export KEYVAULT_KEY_NAME=$USER-key
    export DISK_ENCRYPTION_SET_NAME=$USER-des
    
  2. 创建一个 Key Vault 并在 Key Vault 中创建一个密钥:
    az keyvault create -n $KEYVAULT_NAME \
                   -g $RESOURCEGROUP \
                   -l $LOCATION \
                   --enable-purge-protection true
    
    az keyvault key create --vault-name $KEYVAULT_NAME \
                           -n $KEYVAULT_KEY_NAME \
                           --protection software
    
    KEYVAULT_ID=$(az keyvault show --name $KEYVAULT_NAME --query "[id]" -o tsv)
    
    KEYVAULT_KEY_URL=$(az keyvault key show --vault-name $KEYVAULT_NAME \
                                            --name $KEYVAULT_KEY_NAME \
                                            --query "[key.kid]" -o tsv)
    

创建 Azure 磁盘加密集

Azure 磁盘加密集用作 Azure Red Hat OpenShift 群集中磁盘的参考点。 它连接到你在上一步中创建的 Azure 密钥保管库,将从该位置拉取客户管理的密钥。

az disk-encryption-set create -n $DISK_ENCRYPTION_SET_NAME \
                              -l $LOCATION \
                              -g $RESOURCEGROUP \
                              --source-vault $KEYVAULT_ID \
                              --key-url $KEYVAULT_KEY_URL

DES_ID=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g $RESOURCEGROUP --query 'id' -o tsv)

DES_IDENTITY=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME \
                                           -g $RESOURCEGROUP \
                                           --query "[identity.principalId]" \
                                           -o tsv)

授予磁盘加密集访问 Key Vault 的权限

使用在上一步骤中创建的磁盘加密集,并授予磁盘加密集访问和使用 Azure Key Vault 的权限。

az keyvault set-policy -n $KEYVAULT_NAME \
                       -g $RESOURCEGROUP \
                       --object-id $DES_IDENTITY \
                       --key-permissions wrapkey unwrapkey get

创建 Azure Red Hat OpenShift 群集

创建 Azure Red Hat OpenShift 群集来使用客户管理的密钥。

az aro create --resource-group $RESOURCEGROUP \
              --name $CLUSTER  \
              --vnet aro-vnet  \
              --master-subnet master-subnet \
              --worker-subnet worker-subnet \
              --disk-encryption-set $DES_ID

创建 Azure Red Hat OpenShift 群集后,所有 VM 都使用客户管理的加密密钥进行加密。

若要验证是否正确配置了密钥,请运行以下命令:

  1. 获取群集 VM、磁盘等资源所在的群集资源组的名称:
    CLUSTERRESOURCEGROUP=$(az aro show --resource-group $RESOURCEGROUP --name $CLUSTER --query 'clusterProfile.resourceGroupId' -o tsv | cut -d '/' -f 5)
    
  2. 检查磁盘是否附加了正确的磁盘加密集:
    az disk list -g $CLUSTERRESOURCEGROUP --query '[].encryption'
    
    输出中的 diskEncryptionSetId 字段必须指向在创建 Azure Red Hat OpenShift 群集时指定的磁盘加密集。