Esercizio - Proteggere un'applicazione Java dal punto di vista dell'operatore IT
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 ambienteAZ_DATABASE_NAME
. Digitareecho $AZ_DATABASE_NAME
per visualizzarlo.${azureDatabaseUsername}
è il nome del nome utente del database configurato in precedenza nella variabile di ambienteAZ_DATABASE_USERNAME
. Digitareecho $AZ_DATABASE_USERNAME
per visualizzarlo.${azureDatabasePassword}
è il nome della password di database configurata in precedenza nella variabile di ambienteAZ_DATABASE_PASSWORD
. Digitareecho $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.