Übung: Schützen einer Java-Anwendung aus der Perspektive von IT-Operator*innen

Abgeschlossen

In dieser Lerneinheit verwenden Sie die Azure CLI, um Ihrer Java-Anwendung Zugriff auf die Azure Key Vault-Geheimnisse zu gewähren.

Sie spielen die Rolle eines IT-Operators bzw. einer IT-Operatorin, der bzw. die diese Geheimnisse verwaltet und Zugriff auf diese gewährt.

Speichern von Geheimnissen in Azure Key Vault

In Ihrer Anwendung mussten zwei Geheimnisse gespeichert werden:

  • ${azureDatabaseName} ist der Name der PostgreSQL-Datenbank, die zuvor in der Umgebungsvariablen AZ_DATABASE_NAME konfiguriert wurde. Geben Sie echo $AZ_DATABASE_NAME ein, um diesen anzuzeigen.
  • ${azureDatabaseUsername} ist der Datenbank-Benutzername, die zuvor in der Umgebungsvariablen AZ_DATABASE_USERNAME konfiguriert wurde. Geben Sie echo $AZ_DATABASE_USERNAME ein, um diesen anzuzeigen.
  • ${azureDatabasePassword} ist das Datenbankkennwort, das zuvor in der Umgebungsvariablen AZ_DATABASE_PASSWORD konfiguriert wurde. Geben Sie echo $AZ_DATABASE_PASSWORD ein, um dieses anzuzeigen.

Erstellen Sie eine Azure Key Vault-Instanz, und speichern Sie diese Geheimnisse darin:

AZ_KEY_VAULT_NAME=kv-${AZ_RESOURCE_GROUP}

az keyvault create \
    --name $AZ_KEY_VAULT_NAME \
    --resource-group $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION

az keyvault secret set \
    --vault-name $AZ_KEY_VAULT_NAME \
    --name azureDatabaseName \
    --value ${AZ_DATABASE_NAME}

az keyvault secret set \
    --vault-name $AZ_KEY_VAULT_NAME \
    --name azureDatabaseUsername \
    --value ${AZ_DATABASE_USERNAME}

az keyvault secret set \
    --vault-name $AZ_KEY_VAULT_NAME \
    --name azureDatabasePassword \
    --value ${AZ_DATABASE_PASSWORD}

Gewähren von Zugriff auf Azure Key Vault

Um auf Azure Key Vault zugreifen zu können, muss Ihrer Spring Boot-Anwendung zunächst eine Azure-Identität zugewiesen werden.

az spring app identity assign \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --system-assigned

Außerdem müssen Sie Ihre Spring Boot-Anwendung mit zwei Umgebungsvariablen konfigurieren. Mit der ersten Variable wird Azure Key Vault aktiviert. Mit der zweiten Variable wird die URL an Ihre Azure Key Vault-Instanz übergeben. Die Ausführung dieses Befehls kann mehrere Minuten dauern.

az spring app update \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --env \
   AZURE_KEYVAULT_ENABLED=true \
   AZURE_KEYVAULT_URI=https://$AZ_KEY_VAULT_NAME.vault.azure.net/

Anschließend müssen Sie Ihrer Anwendung Zugriff auf die Azure Key Vault-Instanz gewähren.

AZ_SPRING_CLOUD_PRINCIPAL_ID=$(az spring app identity show --resource-group $AZ_RESOURCE_GROUP --service $AZ_SPRING_CLOUD --name application | jq --raw-output '.principalId')

az keyvault set-policy \
    --name $AZ_KEY_VAULT_NAME \
    --resource-group $AZ_RESOURCE_GROUP \
    --object-id $AZ_SPRING_CLOUD_PRINCIPAL_ID \
    --secret-permissions get list

Ihre Anwendung sollte jetzt über die Berechtigungen für den Zugriff auf die in Azure Key Vault gespeicherten Geheimnisse verfügen.