第 3 章 为 Azure 启用用户管理的加密
在 OpenShift Container Platform 版本 4.15 中,您可以在 Azure 中使用用户管理的加密密钥安装集群。要启用此功能,您可以在安装前准备 Azure DiskEncryptionSet,修改 install-config.yaml
文件,然后完成安装。
3.1. 准备 Azure 磁盘加密集
OpenShift Container Platform 安装程序可以使用带有用户管理的密钥的现有磁盘加密集。要启用此功能,您可以在 Azure 中创建磁盘加密集,并为安装程序提供密钥。
流程
运行以下命令,为 Azure 资源组设置以下环境变量:
$ export RESOURCEGROUP="<resource_group>" \1 LOCATION="<location>" 2
运行以下命令,为 Azure Key Vault 和 Disk Encryption Set 设置以下环境变量:
$ export KEYVAULT_NAME="<keyvault_name>" \1 KEYVAULT_KEY_NAME="<keyvault_key_name>" \2 DISK_ENCRYPTION_SET_NAME="<disk_encryption_set_name>" 3
运行以下命令,为您的 Azure Service Principal 设置环境变量:
$ export CLUSTER_SP_ID="<service_principal_id>" 1
- 1
- 指定用于此安装的服务主体的 ID。
运行以下命令,在 Azure 中启用主机级别加密:
$ az feature register --namespace "Microsoft.Compute" --name "EncryptionAtHost"
$ az feature show --namespace Microsoft.Compute --name EncryptionAtHost
$ az provider register -n Microsoft.Compute
运行以下命令,创建一个 Azure 资源组来保存磁盘加密集和相关资源:
$ az group create --name $RESOURCEGROUP --location $LOCATION
运行以下命令来创建 Azure 密钥库:
$ az keyvault create -n $KEYVAULT_NAME -g $RESOURCEGROUP -l $LOCATION \ --enable-purge-protection true
运行以下命令,在密钥 vault 中创建加密密钥:
$ az keyvault key create --vault-name $KEYVAULT_NAME -n $KEYVAULT_KEY_NAME \ --protection software
运行以下命令捕获密钥 vault 的 ID:
$ KEYVAULT_ID=$(az keyvault show --name $KEYVAULT_NAME --query "[id]" -o tsv)
运行以下命令,捕获密钥 vault 中的密钥 URL:
$ KEYVAULT_KEY_URL=$(az keyvault key show --vault-name $KEYVAULT_NAME --name \ $KEYVAULT_KEY_NAME --query "[key.kid]" -o tsv)
运行以下命令来创建磁盘加密集:
$ az disk-encryption-set create -n $DISK_ENCRYPTION_SET_NAME -l $LOCATION -g \ $RESOURCEGROUP --source-vault $KEYVAULT_ID --key-url $KEYVAULT_KEY_URL
运行以下命令,为 DiskEncryptionSet 资源授予对密钥 vault 的访问权限:
$ DES_IDENTITY=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g \ $RESOURCEGROUP --query "[identity.principalId]" -o tsv)
$ az keyvault set-policy -n $KEYVAULT_NAME -g $RESOURCEGROUP --object-id \ $DES_IDENTITY --key-permissions wrapkey unwrapkey get
运行以下命令,授予 Azure Service Principal 权限来读取 DiskEncryptionSet:
$ DES_RESOURCE_ID=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g \ $RESOURCEGROUP --query "[id]" -o tsv)
$ az role assignment create --assignee $CLUSTER_SP_ID --role "<reader_role>" \1 --scope $DES_RESOURCE_ID -o jsonc
- 1
- 指定对磁盘加密集的读取权限的 Azure 角色。您可以使用
Owner
角色或具有所需权限的自定义角色。