Besturingssysteemschijven versleutelen met een door de klant beheerde sleutel in Azure Red Hat OpenShift

Standaard gebruikt Microsoft Azure automatisch gegenereerde sleutels om de besturingssysteemschijven van de virtuele machines (VM's) in een Azure Red Hat OpenShift-cluster te versleutelen. Voor extra beveiliging kunt u de besturingssysteemschijven versleutelen met behulp van zelfbeheerde sleutels wanneer u een cluster implementeert. Met deze functie hebt u meer controle over het versleutelen van vertrouwelijke gegevens met door de klant beheerde sleutels.

Clusters met door de klant beheerde sleutels hebben een standaardopslagklasse ingeschakeld met hun sleutels. Daarom versleutelen deze sleutels zowel besturingssysteemschijven als gegevensschijven. Azure Key Vault slaat de door de klant beheerde sleutels op. Zie Azure Key Vault basisconcepten voor meer informatie over het gebruik van Key Vault om sleutels te maken en te onderhouden.

Met hostversleuteling worden de gegevens die zijn opgeslagen op de host van de virtuele machine van uw Azure Red Hat OpenShift-knooppunt-VM's in rust versleuteld. Deze gegevens worden versleuteld naar Azure Storage. Versleuteling op basis van een host betekent dat de tijdelijke schijven in rust worden versleuteld met behulp van door het platform beheerde sleutels.

De cache van besturingssysteem- en gegevensschijven wordt in rust versleuteld met door het platform beheerde sleutels of door de klant beheerde sleutels. Het type sleutels is afhankelijk van het versleutelingstype dat u op deze schijven hebt ingesteld. Wanneer u Azure Red Hat OpenShift gebruikt, worden besturingssysteem- en gegevensschijven standaard versleuteld met door het platform beheerde sleutels. Deze standaardinstelling betekent dat de caches voor deze schijven ook standaard in rust worden versleuteld met door het platform beheerde sleutels.

U kunt uw eigen beheerde sleutels opgeven door de versleutelingsstappen in de volgende sectie te volgen. De sleutels die u in deze stap opgeeft, versleutelen ook de cache voor deze schijven.

Beperking

Klanten moeten de sleutelkluis en schijfversleuteling in Azure onderhouden. Als u de sleutels niet onderhoudt, worden Azure Red Hat OpenShift clusters verbroken. De VM's werken niet meer en daardoor werkt het hele Azure Red Hat OpenShift cluster niet meer.

Het Azure Red Hat OpenShift technische team heeft geen toegang tot de sleutels. Daarom kunnen ze geen back-ups maken, repliceren of de sleutels ophalen.

Zie Versleuteling aan de serverzijde van Azure Disk Storage voor meer informatie over het gebruik van schijfversleutelingssets om uw versleutelingssleutels te beheren.

Vereiste voorwaarden

  • Controleer uw machtigingen. U moet gemachtigd zijn om een Azure Red Hat OpenShift-cluster, een sleutelkluis en een schijfversleutelingsset te maken.

  • Controleer of u de rol van Key Vault Crypto Officer hebt. Deze rol heeft machtigingen om een sleutel te maken.

  • Als u meerdere Azure-abonnementen hebt, registreert u de resourceproviders. Zie De resourceproviders registreren voor registratiedetails.

  • Controleer of de EncryptionAtHost functie is ingeschakeld voor uw abonnement. U kunt dit inschakelen door het volgende uit te voeren:

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

    U kunt de huidige status van de functie controleren door het volgende uit te voeren:

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

Een exemplaar van Key Vault maken

U moet een exemplaar van Key Vault gebruiken om uw sleutels op te slaan. Maak een nieuwe sleutelkluis waarvoor opschoningsbeveiliging is ingeschakeld. Maak vervolgens een nieuwe sleutel in de sleutelkluis om uw eigen aangepaste sleutel op te slaan.

  1. Omgevingsvariabelen instellen:

    export KEYVAULT_NAME=aro-enckv
    export KEYVAULT_KEY_NAME=aro-key
    export DISK_ENCRYPTION_SET_NAME=aro-des
    export LOCATION=<location-name>
    export RESOURCEGROUP=<resource-group-name>
    
  2. Een sleutelkluis maken:

    az keyvault create \
        --name $KEYVAULT_NAME \
        --resource-group $RESOURCEGROUP \
        --location $LOCATION \
        --enable-purge-protection true
    

    Opmerking

    U moet opschoonbeveiliging inschakelen. Zie Set up your Azure Key Vault.

    Optioneel: omdat beveiliging tegen opschonen is ingeschakeld, kunt u de naam van de sleutelkluis niet onmiddellijk opnieuw gebruiken na verwijdering. Door de --retention-days <NUMBER_OF_DAYS>-specificatie toe te voegen, kunt u bepalen hoe lang de kluis in de status 'soft delete' behouden blijft. De standaardwaarde is 90 dagen, maar als u deze instelt op een lagere waarde (minimaal 7 dagen), kunt u de naam sneller vrijmaken.

  3. Maak een sleutel in de sleutelkluis:

    az keyvault key create \
        --vault-name $KEYVAULT_NAME \
        --name $KEYVAULT_KEY_NAME \
        --protection software
    
  4. Stel de resource-id en sleutel-URL-variabelen voor de sleutelkluis in:

    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)
    

Een schijfversleutelingsset maken

Gebruik de Azure schijfversleutelingsset als referentiepunt voor schijven in Azure Red Hat OpenShift clusters. Deze is verbonden met de sleutelkluis die u in de vorige stap hebt gemaakt en haalt daar de door de klant beheerde sleutels op.

  1. Maak de schijfversleutelingsset:

    az disk-encryption-set create \
        --name $DISK_ENCRYPTION_SET_NAME \
        --location $LOCATION \
        --resource-group $RESOURCEGROUP \
        --source-vault $KEYVAULT_ID \
        --key-url $KEYVAULT_KEY_URL
    
  2. Geef de resource-id en identiteitsvariabelen van de schijfversleutelingsset op:

    DES_ID=$(az disk-encryption-set show --name $DISK_ENCRYPTION_SET_NAME --resource-group $RESOURCEGROUP --query 'id' -o tsv)
    
    DES_IDENTITY=$(az disk-encryption-set show --name $DISK_ENCRYPTION_SET_NAME --resource-group $RESOURCEGROUP --query "[identity.principalId]" -o tsv)
    

Machtigingen verlenen voor de schijfversleutelingsset voor toegang tot de sleutelkluis

U wilt dat de beheerde identiteit van de schijfversleuteling is ingesteld op het gebruik van de versleutelingssleutel. Wijs een ingebouwde rol toe die de vereiste sleutelmachtigingen biedt, zoals Key Vault Crypto Service Encryption User of Key Vault Crypto User. U kunt ook een aangepaste rol gebruiken, zolang deze de benodigde machtigingen (wrapkey, unwrapkeyen get) bevat om sleutelbewerkingen uit te voeren die vereist zijn voor schijfversleutelingssets.

az role assignment create \
    --assignee $DES_IDENTITY \
    --role "Key Vault Crypto Service Encryption User" \
    --scope $KEYVAULT_ID

Een Azure Red Hat OpenShift-cluster maken

Wanneer u een cluster maakt, kunt u door de klant beheerde sleutels inschakelen door de schijfversleutelingsset op te geven. Gebruik de --disk-encryption-set parameter. Bijvoorbeeld: --disk-encryption-set $DES_ID.

Als u een cluster wilt maken met een service-principal, volgt u de instructies in Maak een Azure Red Hat OpenShift-cluster.

Hier volgt een voorbeeld van het maken van een cluster met de --disk-encryption-set parameter:

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

Opmerking

U kunt alleen door de klant beheerde sleutels inschakelen op bestaande clusters voor werkknooppunten, niet hoofdknooppunten. Het is mogelijk om deze configuratie te bereiken. Zie de Red Hat-documentatie voor meer informatie, waaronder het inschakelen van door de klant beheerde versleutelingssleutels voor een machineset en het wijzigen van een rekenmachineset.

Als u een Azure Red Hat OpenShift-cluster wilt maken met beheerde identiteiten, moet u de machine-api identiteit en identiteit disk-csi-driver verlenen voordat u het cluster maakt. U moet ook de Azure Red Hat OpenShift machtigingen voor de service-principal Microsoft.Compute/diskEncryptionSets/read van de eerste partij verlenen voor de schijfversleutelingsset.

Voorbeelden van roltoewijzingen voor de identiteit machine-api, de identiteit disk-csi-driver en de interne ARO-service-principal:

az role assignment create \
  --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name disk-csi-driver --query principalId -o tsv)" \
  --assignee-principal-type ServicePrincipal \
  --role <ROLE> \
  --scope $DES_ID"

az role assignment create \
  --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name machine-api --query principalId -o tsv)" \
  --assignee-principal-type ServicePrincipal \
  --role <ROLE> \
  --scope $DES_ID

az role assignment create \
  --assignee-object-id "$(az ad sp list --display-name "Azure Red Hat OpenShift RP" --query '[0].id' -o tsv)" \
  --assignee-principal-type ServicePrincipal \
  --role <ROLE> \
  --scope $DES_ID

Nadat u het Azure Red Hat OpenShift-cluster hebt gemaakt, worden alle VM's versleuteld met de door de klant beheerde versleutelingssleutels.

Voer de volgende opdrachten uit om te controleren of u de sleutels correct hebt geconfigureerd:

  1. Haal de naam op van de clusterresourcegroep waar de VM's, schijven en andere infrastructuur van het cluster zich bevinden:

    CLUSTERRESOURCEGROUP=$(az aro show --resource-group $RESOURCEGROUP --name $CLUSTER --query 'clusterProfile.resourceGroupId' -o tsv | cut -d '/' -f 5)
    
  2. Controleer of aan de schijven de juiste schijfversleutelingsset is gekoppeld:

    az disk list --resource-group $CLUSTERRESOURCEGROUP --query '[].encryption'
    

Het veld diskEncryptionSetId in de uitvoer moet verwijzen naar de schijfversleutelingsset die u hebt opgegeven tijdens het maken van het Azure Red Hat OpenShift-cluster.

Ondersteuning toevoegen voor beheerde HSM (mHSM) voor door de klant beheerde sleutels en afdwinging van Azure Policy

U kunt ook beheerde HSM-ondersteuning (mHSM) toevoegen voor door de klant beheerde sleutels en bepaalde versleutelingskenmerken vereisen en weigeren. Voor deze ondersteuning zijn API- en Azure Policy wijzigingen vereist.

Volg deze stappen om een Azure Red Hat OpenShift-cluster te maken met mHSM en door de klant beheerde sleutels:

  1. Richt een beheerde HSM in en activeer deze met behulp van de Azure CLI.

  2. Omgevingsvariabelen uit de vorige stap exporteren:

    export HSM_NAME=<hsm-name>
    export RESOURCE_GROUP=<resource-group>
    
  3. Schakel beveiliging tegen opschonen en sleutelbeheer in via Azure Resource Manager:

    az keyvault update-hsm \
      --hsm-name $HSM_NAME \
      --resource-group $RESOURCE_GROUP \
      --enable-purge-protection true
    
    az keyvault setting update \
      --hsm-name $HSM_NAME \
      --name AllowKeyManagementOperationsThroughARM \
      --value true 
    
  4. Voer de resterende stappen uit om de mHSM te activeren: Activeer uw beheerde HSM.

  5. Verleen uzelf de Managed HSM Crypto User rol zodat u sleutels in de mHSM kunt maken.

    oid=$(az ad signed-in-user show --query id -o tsv)
    az keyvault role assignment create \        
      --hsm-name $HSM_NAME \ 
      --role "Managed HSM Crypto User" \ 
      --assignee $oid \ 
      --scope /keys 
    
  6. Maak een mHSM-sleutel.

  7. Maak een beheerde identiteit en verleen deze de Managed HSM Crypto Service Encryption User rol via de mHSM.

    export UA_IDENTITY=<new-ua-identity>
    
    HSM_ID="https://${HSM_NAME}.managedhsm.azure.net"
    
    az identity create \
      --resource-group $RESOURCE_GROUP \
      --name $UA_IDENTITY
    
    IDENTITY_OBJECT_ID=$(az identity show \ 
      --resource-group $RESOURCE_GROUP \ 
      --name $UA_IDENTITY \ 
      --query principalId -o tsv) 
    
    az keyvault role assignment create \ 
      --id "$HSM_ID" \ 
      --role "Managed HSM Crypto Service Encryption User" \ 
      --assignee-object-id "$IDENTITY_OBJECT_ID" \ 
      --scope "/keys/byok-key"
    
  8. Maak een schijfversleutelingsset, rekening houdend met:

    1. Het versleutelingstype instellen op Encryption at-rest with a customer-managed key.

    2. Gebruik de door de gebruiker toegewezen identiteit die u in de vorige stap hebt gemaakt.

    3. Voltooi de roltoewijzing voordat u de schijfversleutelingsset maakt.

  9. Omgevingsvariabelen uit de vorige stap exporteren:

    export LOCATION=<yourLocation>
    export CLUSTER=<yourNewClusterName> 
    export VIRTUAL_NETWORK=<yourVirtualNetwork>
    export KEYVAULT_NAME=<yourKeyvaultName>
    export KEYVAULT_KEY_NAME=byok-key 
    export DISK_ENCRYPTION_SET_NAME=<yourDiskEncryptionSetName>
    
  10. Maak een cluster met uw nieuwe schijfversleutelingsset:

    DES_ID=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g $RESOURCE_GROUP --query 'id' -o tsv) 
    
    az aro create --resource-group $RESOURCE_GROUP \ 
      --name $CLUSTER  \ 
      --vnet $VIRTUAL_NETWORK  \ 
      --master-subnet master-subnet \ 
      --worker-subnet worker-subnet \ 
      --disk-encryption-set $DES_ID 
    
  11. Nadat het cluster beschikbaar is gekomen, controleert u de versleuteling:

    az disk list -g $VIRTUAL_NETWORK --query "[].{DiskName:name, VM:managedBy, EncryptionType:encryption.type, DiskEncryptionSet:encryption.diskEncryptionSetId}" -o table 
    

    Om de versleuteling te controleren, zoekt u naar EncryptionAtRestWithCustomerKey in de kolom EncryptionType.