Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Note
I piani Basic, Standard ed Enterprise sono entrati in un periodo di ritiro il 17 marzo 2025. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.
Questo articolo riguarda:✅ Java ❎ C#
Questo articolo illustra come creare un'identità gestita assegnata dal sistema o assegnata dall'utente per un'app distribuita in Azure Spring Apps e usarla per accedere ad Azure Key Vault.
Azure Key Vault può essere usato per archiviare in modo sicuro e controllare rigorosamente l'accesso a token, password, certificati, chiavi API e altri segreti dell'app. È possibile creare un'identità gestita in Microsoft Entra ID ed eseguire l'autenticazione a qualsiasi servizio che supporti l'autenticazione di Microsoft Entra, incluso Key Vault, senza dover visualizzare le credenziali nel codice.
Il video seguente descrive come gestire i segreti usando Azure Key Vault.
Prerequisiti
- Una sottoscrizione di Azure. Se non si ha già una sottoscrizione, creare un account gratuito prima di iniziare.
- Interfaccia della riga di comando di Azure, versione 2.55.0 o successiva.
- Una sottoscrizione di Azure. Se non si ha già una sottoscrizione, creare un account gratuito prima di iniziare.
- Interfaccia della riga di comando di Azure, versione 2.55.0 o successiva.
Specificare i nomi per ogni risorsa
Creare variabili per contenere i nomi delle risorse usando i comandi seguenti. Assicurarsi di sostituire i segnaposto con i propri valori.
export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>
Creare un gruppo di risorse
Un gruppo di risorse è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite. Creare un gruppo di risorse per contenere sia Key Vault che Spring Cloud usando il comando az group create, come illustrato nell'esempio seguente:
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
Configurare l'insieme di credenziali delle chiavi
Per creare un insieme di credenziali delle chiavi, usare il comando az keyvault create, come illustrato nell'esempio seguente:
Importante
Ogni insieme di credenziali delle chiavi deve avere un nome univoco.
az keyvault create \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT}
Usare il comando seguente per visualizzare l'URL dell'app e quindi prendere nota dell'URL restituito, nel formato https://${KEY_VAULT}.vault.azure.net. Usare questo valore nel seguente passaggio.
az keyvault show \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT} \
--query properties.vaultUri --output tsv
È ora possibile inserire un segreto nell'insieme di credenziali delle chiavi usando il comando az keyvault secret set, come illustrato nell'esempio seguente:
az keyvault secret set \
--vault-name ${KEY_VAULT} \
--name "connectionString" \
--value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"
Creare il servizio e l'app di Azure Spring Apps
Dopo aver installato tutte le estensioni corrispondenti, usare il comando seguente per creare un'istanza di Azure Spring Apps:
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--sku Enterprise \
--name ${SPRING_APPS}
L'esempio seguente crea l'app con un'identità gestita assegnata dal sistema, come richiesto dal parametro --system-assigned:
az spring app create \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--assign-endpoint true \
--system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--query identity.principalId --output tsv)
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--name ${SPRING_APPS}
L'esempio seguente crea un'app denominata springapp con un'identità gestita assegnata dal sistema, come richiesto dal parametro --system-assigned.
az spring app create \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--assign-endpoint true \
--runtime-version Java_17 \
--system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--query identity.principalId --output tsv)
Concedere all'app l'accesso a Key Vault
Usare il seguente comando per concedere l'accesso appropriato in Key Vault per l'app:
az keyvault set-policy \
--name ${KEY_VAULT} \
--object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
--secret-permissions set get list
Note
Per l'identità gestita assegnata dal sistema, usare az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} per rimuovere l'accesso per l'app dopo che l'identità gestita assegnata dal sistema viene disabilitata.
Creare un'app Spring Boot di esempio con Spring Boot Starter
Questa app ha l’autorizzazione di accesso per ottenere segreti da Azure Key Vault. Usare l'utilità di avvio Spring Boot per i segreti di Azure Key Vault. Azure Key Vault viene aggiunto come istanza di Spring PropertySource. È possibile accedere facilmente ai segreti archiviati in Azure Key Vault e usarli come qualsiasi proprietà di configurazione esternalizzata, come le proprietà dei file.
Usare il seguente comando per generare un progetto di esempio da
start.spring.iocon l’utilità di avvio Azure Key Vault Spring.curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault -d baseDir=springapp -d bootVersion=3.2.1 -d javaVersion=17 -d type=maven-project | tar -xzvf -Specificare l'insieme di credenziali delle chiavi nell'app.
cd springapp vim src/main/resources/application.propertiesPer usare l'identità gestita per un'app distribuita in Azure Spring Apps, aggiungere proprietà con il seguente contenuto al file src/main/resources/application.properties.
spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=<your-keyvault-url> spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=trueNote
È necessario aggiungere l'URL dell'insieme di credenziali delle chiavi nel file application.properties, come illustrato in precedenza. In caso contrario, tale URL potrebbe non essere acquisito durante il runtime.
Aggiornare src/main/java/com/example/demo/DemoApplication.java con il seguente esempio di codice. Questo codice recupera il stringa di connessione dall'insieme di credenziali delle chiavi.
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication implements CommandLineRunner { @Value("${connectionString}") private String connectionString; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("get") public String get() { return connectionString; } public void run(String... args) throws Exception { System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString)); } }Se si apre il file pom.xml, è possibile visualizzare la dipendenza
spring-cloud-azure-starter-keyvault, come illustrato nell'esempio seguente:<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
Usare il comando seguente per distribuire l'app in Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path
Usare il comando seguente per distribuire l'app in Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path \ --build-env BP_JVM_VERSION=17
Per testare l'app, accedere all'endpoint pubblico o all'endpoint di test usando il seguente comando:
curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/getIl seguente messaggio viene restituito nel corpo della risposta:
jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.
Pulire le risorse
Per eliminare l'intero gruppo di risorse, inclusa l'istanza del servizio appena creata, usare il comando seguente:
az group delete --name ${RESOURCE_GROUP} --yes