Verschlüsseln von Betriebssystemdatenträgern mit einem kundenseitig verwalteten Schlüssel in Azure Red Hat OpenShift

Standardmäßig verwendet Microsoft Azure automatisch generierte Schlüssel, um die Betriebssystemdatenträger der virtuellen Computer (VMs) in einem Azure Red Hat OpenShift Cluster zu verschlüsseln. Für zusätzliche Sicherheit können Sie die Betriebssystemdatenträger mithilfe von selbstverwalteten Schlüsseln verschlüsseln, wenn Sie einen Cluster bereitstellen. Dieses Feature bietet Ihnen mehr Kontrolle, indem vertrauliche Daten mit vom Kunden verwalteten Schlüsseln verschlüsselt werden.

Cluster mit vom Kunden verwalteten Schlüsseln verfügen über eine Standardspeicherklasse, die mit ihren Schlüsseln aktiviert ist. Daher verschlüsseln diese Schlüssel sowohl Betriebssystemdatenträger als auch Datenträger. Azure Key Vault speichert die vom Kunden verwalteten Schlüssel. Weitere Informationen zur Verwendung von Key Vault zum Erstellen und Verwalten von Schlüsseln finden Sie unter Azure Key Vault grundlegenden Konzepten.

Bei hostbasierter Verschlüsselung werden die auf dem Hostcomputer der virtuellen Maschine Ihrer Azure Red Hat OpenShift-Knoten-VMs gespeicherten Daten im Ruhezustand verschlüsselt. Diese Daten werden in Azure Storage verschlüsselt. Hostbasierte Verschlüsselung bedeutet, dass die temporären Datenträger mit plattformverwalteten Schlüsseln verschlüsselt werden.

Der Cache von Betriebssystem- und Datenspeicherdatenträgern wird im Ruhezustand mit plattformverwalteten Schlüsseln oder vom Kunden verwalteten Schlüsseln verschlüsselt. Der Schlüsseltyp hängt vom Verschlüsselungstyp ab, den Sie auf diesen Datenträgern festgelegt haben. Standardmäßig werden bei der Verwendung von Azure Red Hat OpenShift Betriebssystem- und Datenträger im Ruhezustand mit plattformverwalteten Schlüsseln verschlüsselt. Diese Standardeinstellung bedeutet, dass die Caches für diese Datenträger auch standardmäßig mit plattformverwalteten Schlüsseln verschlüsselt werden.

Sie können Ihre eigenen verwalteten Schlüssel angeben, indem Sie die Verschlüsselungsschritte im nächsten Abschnitt ausführen. Die in diesem Schritt angegebenen Schlüssel verschlüsseln auch den Cache für diese Datenträger.

Einschränkung

Kunden müssen den Schlüsseltresor und die Datenträgerverschlüsselung in Azure verwalten. Wenn die Schlüssel nicht beibehalten werden, führt dies zu fehlerhaften Azure Red Hat OpenShift Clustern. Die virtuellen Computer funktionieren nicht mehr, und infolgedessen funktioniert der gesamte Azure Red Hat OpenShift Cluster nicht mehr.

Das Azure Red Hat OpenShift Engineering-Team kann nicht auf die Schlüssel zugreifen. Daher kann es die Schlüssel nicht sichern, replizieren oder abrufen.

Ausführliche Informationen zur Verwendung von Datenträgerverschlüsselungssätzen zum Verwalten Ihrer Verschlüsselungsschlüssel finden Sie unter serverseitige Verschlüsselung von Azure Disk Storage.

Voraussetzungen

  • Überprüfen von Berechtigungen. Sie müssen über Berechtigungen zum Erstellen eines Azure Red Hat OpenShift Clusters, eines Schlüsseltresors und eines Datenträgerverschlüsselungssatzes verfügen.

  • Vergewissern Sie sich, dass Sie über die Rolle Key Vault Crypto Officer verfügen. Diese Rolle verfügt über Berechtigungen zum Erstellen eines Schlüssels.

  • Registrieren Sie die Ressourcenanbieter, wenn Sie über mehrere Azure-Abonnements verfügen. Registrierungsdetails finden Sie unter Registrieren der Ressourcenanbieter.

  • Vergewissern Sie sich, dass das EncryptionAtHost Feature für Ihr Abonnement aktiviert ist. Sie können es aktivieren, indem Sie Folgendes ausführen:

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

    Sie können den aktuellen Status des Features überprüfen, indem Sie Folgendes ausführen:

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

Erstellen einer Instanz von Key Vault

Sie müssen eine Instanz von Key Vault verwenden, um Ihre Schlüssel zu speichern. Erstellen Sie eine neue Key Vault-Instanz mit aktiviertem Löschschutz. Erstellen Sie dann einen neuen Schlüssel im Schlüsseltresor, um Ihren eigenen benutzerdefinierten Schlüssel zu speichern.

  1. Festlegen von Umgebungsvariablen:

    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. Erstellen Sie einen Schlüsseltresor:

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

    Hinweis

    Sie müssen den Löschschutz aktivieren. Siehe Setup your Azure Key Vault.

    Optional: Da der Löschschutz aktiviert ist, können Sie den Namen des Schlüsseltresors nach dem Löschen nicht sofort wiederverwenden. Durch Hinzufügen der Spezifikation --retention-days <NUMBER_OF_DAYS> können Sie steuern, wie lange die Key Vault-Instanz im Zustand „Vorläufiges Löschen“ verbleibt. Der Standardwert ist 90 Tage, das Festlegen auf einen niedrigeren Wert (mindestens 7 Tage) bedeutet jedoch, dass Sie den Namen schneller zurückfordern können.

  3. Erstellen Sie einen Schlüssel im Schlüsseltresor:

    az keyvault key create \
        --vault-name $KEYVAULT_NAME \
        --name $KEYVAULT_KEY_NAME \
        --protection software
    
  4. Legen Sie die Key Vault-Ressourcen-ID und Schlüssel-URL-Variablen fest:

    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)
    

Erstellen eines Datenträgerverschlüsselungssatzes

Verwenden Sie die Azure Datenträgerverschlüsselung als Referenzpunkt für Datenträger in Azure Red Hat OpenShift Clustern. Sie ist mit dem Schlüsseltresor verbunden, den Sie im vorherigen Schritt erstellt haben, und ruft die vom Kunden verwalteten Schlüssel von diesem Speicherort ab.

  1. Erstellen Sie den Datenträgerverschlüsselungssatz:

    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. Geben Sie die Ressourcen-ID des Disk Encryption Set sowie die Identitätsvariablen an:

    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)
    

Erteilen von Berechtigungen für die Datenträgerverschlüsselung, die für den Zugriff auf den Schlüsseltresor festgelegt ist

Sie möchten, dass die verwaltete Identität des Datenträgerverschlüsselungssatzes zum Verwenden des Verschlüsselungsschlüssels verwendet wird. Weisen Sie eine integrierte Rolle zu, die die erforderlichen Schlüsselberechtigungen bereitstellt, z. B. Key Vault Crypto Service Encryption User oder Key Vault Crypto User. Verwenden Sie alternativ eine benutzerdefinierte Rolle, sofern sie die erforderlichen Berechtigungen (wrapkey, und unwrapkey) enthält, um wichtige Vorgänge auszuführen, getdie von Datenträgerverschlüsselungssätzen benötigt werden.

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

Erstellen eines Azure Red Hat OpenShift-Clusters

Wenn Sie einen Cluster erstellen, können Sie vom Kunden verwaltete Schlüssel aktivieren, indem Sie den Datenträgerverschlüsselungssatz angeben. Verwenden Sie den Parameter --disk-encryption-set. Beispiel: --disk-encryption-set $DES_ID

Um einen Cluster mit einem Dienstprinzipal zu erstellen, befolgen Sie die Anweisungen in Create an Azure Red Hat OpenShift cluster.

Hier ist ein Beispiel für das Erstellen eines Clusters mit dem --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

Hinweis

Sie können nur vom Kunden verwaltete Schlüssel auf vorhandenen Clustern für Arbeitsknoten aktivieren, nicht masterknoten. Es ist möglich, diese Konfiguration zu erreichen. Weitere Informationen finden Sie in der Dokumentation zu Red Hat, einschließlich der Aktivierung von vom Kunden verwalteten Verschlüsselungsschlüsseln für einen Computersatz und ändern eines Computersatzes.

Um einen Azure Red Hat OpenShift Cluster mit verwalteten Identitäten zu erstellen, müssen Sie vor dem Erstellen des Clusters die machine-api Identität und die disk-csi-driver Identität erteilen. Sie müssen dem Azure Red Hat OpenShift-Erstanbieter-Dienstprinzipal außerdem Microsoft.Compute/diskEncryptionSets/read-Berechtigungen für den Datenträgerverschlüsselungssatz erteilen.

Beispiele für Rollenzuweisungen für die machine-api-Identität, die disk-csi-driver-Identität und den ARO-Erstanbieter-Dienstprinzipal:

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

Nachdem Sie den Azure Red Hat OpenShift-Cluster erstellt haben, werden alle VMs mit den kundenseitig verwalteten Verschlüsselungsschlüsseln verschlüsselt.

Führen Sie die folgenden Befehle aus, um zu überprüfen, ob Sie die Schlüssel ordnungsgemäß konfiguriert haben:

  1. Rufen Sie den Namen der Clusterressourcengruppe ab, in der sich die VMs, Datenträger und andere Infrastruktur des Clusters befinden:

    CLUSTERRESOURCEGROUP=$(az aro show --resource-group $RESOURCEGROUP --name $CLUSTER --query 'clusterProfile.resourceGroupId' -o tsv | cut -d '/' -f 5)
    
  2. Überprüfen Sie, ob die Datenträger über den richtigen Datenträgerverschlüsselungssatz verfügen:

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

Das Feld diskEncryptionSetId in der Ausgabe muss auf den Datenträgerverschlüsselungssatz verweisen, den Sie beim Erstellen des Azure Red Hat OpenShift Clusters angegeben haben.

Hinzufügen der Unterstützung für verwaltetes HSM (mHSM) für kundenseitig verwaltete Schlüssel und Azure Policy-Erzwingung

Sie können auch verwaltete HSM-Unterstützung (mHSM) für vom Kunden verwaltete Schlüssel hinzufügen und bestimmte Verschlüsselungsattribute erfordern und verweigern. Für diese Unterstützung sind API- und Azure Policy Änderungen erforderlich.

Führen Sie die folgenden Schritte aus, um einen Azure Red Hat OpenShift Cluster mit mHSM und vom Kunden verwalteten Schlüsseln zu erstellen:

  1. Bereitstellen und Aktivieren eines verwalteten HSM mithilfe des Azure CLI.

  2. Exportieren von Umgebungsvariablen aus dem vorherigen Schritt:

    export HSM_NAME=<hsm-name>
    export RESOURCE_GROUP=<resource-group>
    
  3. Aktivieren Sie den Löschschutz und die Schlüsselverwaltung über 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. Führen Sie die verbleibenden Schritte aus, um mHSM zu aktivieren: Aktivieren Sie Ihr verwaltetes HSM.

  5. Gewähren Sie sich die Managed HSM Crypto User Rolle, damit Sie Schlüssel im mHSM erstellen können.

    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. Erstellen Sie einen mHSM-Schlüssel.

  7. Erstellen Sie eine verwaltete Identität , und gewähren Sie ihr die Managed HSM Crypto Service Encryption User Rolle über 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. Erstellen Sie einen Datenträgerverschlüsselungssatz, wobei Folgendes berücksichtigt wird:

    1. Festlegen des Verschlüsselungstyps auf Encryption at-rest with a customer-managed key.

    2. Verwenden Sie die vom Benutzer zugewiesene Identität, die Sie im vorherigen Schritt erstellt haben.

    3. Schließen Sie die Rollenzuweisung ab, bevor Sie den Datenträgerverschlüsselungssatz erstellen.

  9. Exportieren von Umgebungsvariablen aus dem vorherigen Schritt:

    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. Erstellen Sie einen Cluster mit ihrem neuen Datenträgerverschlüsselungssatz:

    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. Nachdem der Cluster angezeigt wurde, bestätigen Sie die Verschlüsselung:

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

    Um die Verschlüsselung zu überprüfen, suchen Sie EncryptionAtRestWithCustomerKey unter der EncryptionType Spalte nach.