Esercizio - Proteggere un'applicazione Java dal punto di vista dell'operatore IT

Completato

In questa unità si usa l'interfaccia della riga di comando di Azure per concedere all'applicazione Java l'accesso ai segreti di Azure Key Vault.

Si ha il ruolo di un operatore IT, che gestirà e concederà l'accesso ai segreti.

Archiviare segreti in Azure Key Vault

Nell'applicazione erano presenti due segreti da archiviare:

  • ${azureDatabaseName} è il nome del database PostgreSQL configurato in precedenza nella variabile di ambiente AZ_DATABASE_NAME. Digitare echo $AZ_DATABASE_NAME per visualizzarlo.
  • ${azureDatabaseUsername} è il nome del nome utente del database configurato in precedenza nella variabile di ambiente AZ_DATABASE_USERNAME. Digitare echo $AZ_DATABASE_USERNAME per visualizzarlo.
  • ${azureDatabasePassword} è il nome della password di database configurata in precedenza nella variabile di ambiente AZ_DATABASE_PASSWORD. Digitare echo $AZ_DATABASE_PASSWORD per visualizzarlo.

Creiamo un'istanza di Azure Key Vault e archiviamo in essa questi segreti:

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}

Concedere l'accesso dell'applicazione ad Azure Key Vault

Per accedere ad Azure Key Vault, l'applicazione Spring Boot deve prima avere un'identità di Azure assegnata.

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

È anche necessario configurare l'applicazione Spring Boot con due variabili di ambiente. La prima variabile consiste nell'abilitare Azure Key Vault. La seconda variabile consiste nell'assegnare l'URL all'istanza di Azure Key Vault. L'esecuzione di questo comando può richiedere alcuni minuti.

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/

È necessario, quindi, concedere all'applicazione l'accesso all'istanza di Azure Key Vault.

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

L'applicazione dovrebbe ora disporre delle autorizzazioni per accedere ai segreti archiviati in Azure Key Vault.