Ejercicio: Protección de una aplicación de Java desde la perspectiva de un operador de TI

Completado

En esta unidad, usará la CLI de Azure para conceder a la aplicación de Java acceso a los secretos de Azure Key Vault.

Desempeñará el rol de operador de TI, que administra esos secretos y permite acceder a ellos.

Almacenamiento de secretos en Azure Key Vault

En la aplicación, tenía dos secretos para almacenar:

  • ${azureDatabaseName} es el nombre de la base de datos PostgreSQL que se ha configurado antes en la variable de entorno AZ_DATABASE_NAME. Escriba echo $AZ_DATABASE_NAME para verla.
  • ${azureDatabaseUsername} es el nombre del usuario de base de datos que se ha configurado antes en la variable de entorno AZ_DATABASE_USERNAME. Escriba echo $AZ_DATABASE_USERNAME para verlo.
  • ${azureDatabasePassword} es el nombre de la contraseña de base de datos que se ha configurado antes en la variable de entorno AZ_DATABASE_PASSWORD. Escriba echo $AZ_DATABASE_PASSWORD para verla.

Ahora se creará una instancia de Azure Key Vault y se almacenarán esos secretos en ella:

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}

Concesión a la aplicación de acceso a Azure Key Vault

Para acceder a Azure Key Vault, la aplicación de Spring Boot debe tener asignada una identidad de Azure.

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

También tendrá que configurar la aplicación de Spring Boot con dos variables de entorno. La primera variable es para habilitar Azure Key Vault. La segunda variable es para proporcionar la dirección URL a la instancia de Azure Key Vault. Este comando puede tardar varios minutos en ejecutarse.

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/

Después, tendrá que conceder a la aplicación acceso a la instancia de 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

Ahora la aplicación debe tener los permisos para acceder a los secretos almacenados en Azure Key Vault.