Guida introduttiva: Caricare i segreti dell'applicazione con Key Vault

Nota

Azure Spring Apps è il nuovo nome del servizio Azure Spring Cloud. Anche se il servizio ha un nuovo nome, il nome precedente verrà visualizzato in alcune posizioni per un po' mentre si lavora per aggiornare gli asset, ad esempio screenshot, video e diagrammi.

Questo articolo si applica a:❌ Basic/Standard ✔️ Enterprise

Questa guida introduttiva illustra come caricare in modo sicuro i segreti usando Azure Key Vault per le app che eseguono il piano Azure Spring Apps Enterprise.

Ogni applicazione ha proprietà che lo connettono al proprio ambiente e ai servizi di supporto. Questi servizi includono risorse come database, strumenti di registrazione e monitoraggio, piattaforme di messaggistica e così via. Ogni risorsa richiede un modo per individuare e accedervi, spesso sotto forma di URL e credenziali. Queste informazioni sono spesso protette dalla legge e devono essere mantenute segrete per proteggere i dati dei clienti. In Azure Spring Apps è possibile configurare le applicazioni per caricare direttamente questi segreti in memoria da Key Vault usando le identità gestite e il controllo degli accessi in base al ruolo di Azure.

Prerequisiti

Effettuare il provisioning di Key Vault e archiviare i segreti

Le istruzioni seguenti descrivono come creare un insieme di credenziali delle chiavi e salvare in modo sicuro i segreti dell'applicazione.

  1. Creare variabili per contenere i nomi delle risorse usando i comandi seguenti. Assicurarsi di sostituire i segnaposto con i propri valori.

    export RESOURCE_GROUP=<resource-group-name>
    export KEY_VAULT_NAME=<key-vault-name>
    export POSTGRES_SERVER_NAME=<postgres-server-name>
    export POSTGRES_USERNAME=<postgres-username>
    export POSTGRES_PASSWORD=<postgres-password>
    export REDIS_CACHE_NAME=<redis-cache-name>
    export AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME=<Azure-Spring-Apps-service-instance-name>
    
  2. Usare il comando seguente per creare un insieme di credenziali delle chiavi per archiviare i segreti dell'applicazione:

    az keyvault create \
        --resource-group ${RESOURCE_GROUP} \
        --name ${KEY_VAULT_NAME}
    
  3. Usare il comando seguente per archiviare il nome completo del server di database in Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-SERVER-NAME" \
        --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
    
  4. Usare il comando seguente per archiviare il nome del database in Key Vault per l'applicazione del servizio catalogo:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "CATALOG-DATABASE-NAME" \
        --value "acmefit_catalog"
    
  5. Usare i comandi seguenti per archiviare le credenziali di accesso al database in Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-LOGIN-NAME" \
        --value "${POSTGRES_USERNAME}"
    
    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-LOGIN-PASSWORD" \
        --value "${POSTGRES_PASSWORD}"
    
  6. Usare il comando seguente per archiviare il stringa di connessione di database in Key Vault per l'applicazione order service:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "ConnectionStrings--OrderContext" \
        --value "Server=${POSTGRES_SERVER_NAME};Database=acmefit_order;Port=5432;Ssl Mode=Require;User Id=${POSTGRES_USERNAME};Password=${POSTGRES_PASSWORD};"
    
  7. Usare i comandi seguenti per recuperare le proprietà di connessione Redis e archiviarle in Key Vault:

    export REDIS_HOST=$(az redis show \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.hostName')
    
    export REDIS_PORT=$(az redis show \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.sslPort')
    
    export REDIS_PRIMARY_KEY=$(az redis list-keys \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.primaryKey')
    
    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "CART-REDIS-CONNECTION-STRING" \
        --value "rediss://:${REDIS_PRIMARY_KEY}@${REDIS_HOST}:${REDIS_PORT}/0"
    
  8. Se è stato configurato l'accesso Single Sign-On, usare il comando seguente per archiviare l'URI JWK (JSON Web Key) in Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "SSO-PROVIDER-JWK-URI" \
        --value <jwk-uri>
    

Concedere alle applicazioni l'accesso ai segreti in Key Vault

Le istruzioni seguenti descrivono come concedere l'accesso ai segreti di Key Vault alle applicazioni distribuite nel piano Azure Spring Apps Enterprise.

  1. Usare il comando seguente per abilitare un'identità assegnata dal sistema per l'applicazione del servizio carrello:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  2. Usare i comandi seguenti per impostare un criterio di accesso di get list in Key Vault per l'applicazione del servizio carrello:

    export CART_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${CART_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  3. Usare il comando seguente per abilitare un'identità assegnata dal sistema per l'applicazione order service:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  4. Usare i comandi seguenti per impostare un criterio di accesso di get list in Key Vault per l'applicazione Order Service:

    export ORDER_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${ORDER_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  5. Usare il comando seguente per abilitare un'identità assegnata dal sistema per l'applicazione del servizio catalogo:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  6. Usare i comandi seguenti per impostare un criterio di accesso di get list in Key Vault per l'applicazione del servizio catalogo:

    export CATALOG_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${CATALOG_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  7. Se è stato configurato l'accesso Single Sign-On, usare il comando seguente per abilitare un'identità assegnata dal sistema per l'applicazione del servizio di gestione delle identità:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  8. Se è stato configurato l'accesso Single Sign-On, usare i comandi seguenti per impostare un criterio di accesso di get list in Key Vault per l'applicazione del servizio di gestione delle identità:

    export IDENTITY_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${IDENTITY_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    

Aggiornare le applicazioni per caricare i segreti di Key Vault

Dopo aver concesso l'accesso per leggere i segreti da Key Vault, seguire questa procedura per aggiornare le applicazioni in modo da usare i nuovi valori dei segreti nelle configurazioni.

  1. Usare il comando seguente per recuperare l'URI per Key Vault da usare nelle applicazioni ad aggiornamento:

    export KEYVAULT_URI=$(az keyvault show --name ${KEY_VAULT_NAME} --resource-group ${RESOURCE_GROUP} | jq -r '.properties.vaultUri')
    
  2. Usare il comando seguente per recuperare l'URL per Spring Cloud Gateway da usare nelle applicazioni ad aggiornamento:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
    
  3. Usare il comando seguente per rimuovere il Connessione or del servizio di associazione dell'applicazione Order Service e il server flessibile Database di Azure per PostgreSQL:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app order-service \
        --connection order_service_db \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  4. Usare il comando seguente per aggiornare l'ambiente del servizio ordini con l'URI per accedere a Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --env "ConnectionStrings__KeyVaultUri=${KEYVAULT_URI}" "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}" "DatabaseProvider=Postgres"
    
  5. Usare il comando seguente per rimuovere l'associazione del servizio Connessione or all'applicazione del servizio di catalogo e al server flessibile Database di Azure per PostgreSQL:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app catalog-service \
        --connection catalog_service_db \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  6. Usare il comando seguente per aggiornare l'ambiente del servizio catalogo e il modello di configurazione per accedere a Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --config-file-pattern catalog/default,catalog/key-vault \
        --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
    
  7. Usare il comando seguente per rimuovere l'associazione del servizio Connessione or all'applicazione servizio carrello e al cache di Azure per Redis:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app cart-service \
        --connection cart_service_cache \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  8. Usare il comando seguente per aggiornare l'ambiente del servizio carrello per accedere a Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --env "CART_PORT=8080" "KEYVAULT_URI=${KEYVAULT_URI}" "AUTH_URL=https://${GATEWAY_URL}"
    
  9. Se è stato configurato l'accesso Single Sign-On, usare il comando seguente per aggiornare l'ambiente del servizio identità e il modello di configurazione per accedere a Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --config-file-pattern identity/default,identity/key-vault \
        --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
    
  10. Usare i comandi seguenti per recuperare l'URL per Spring Cloud Gateway:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
    
    echo "https://${GATEWAY_URL}"
    

    È possibile aprire l'URL di output in un browser per esplorare l'applicazione aggiornata.

Pulire le risorse

Se si prevede di usare le guide di avvio rapido e le esercitazioni successive, è consigliabile non cancellare le risorse create. Quando non è più necessario, eliminare il gruppo di risorse per eliminare tutte le risorse contenute al suo interno. Per eliminare il gruppo di risorse usando l'interfaccia della riga di comando di Azure, usare i comandi seguenti:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Passaggi successivi

Continuare con uno degli argomenti di avvio rapido facoltativi seguenti: