Azure Spring Apps verbinden met Key Vault met behulp van beheerde identiteiten
Notitie
De Basic-, Standard- en Enterprise-abonnementen worden afgeschaft vanaf medio maart 2025, met een pensioenperiode van 3 jaar. We raden u aan om over te stappen naar Azure Container Apps. Zie de aankondiging over buitengebruikstelling van Azure Spring Apps voor meer informatie.
Het standaardverbruik en het speciale abonnement worden vanaf 30 september 2024 afgeschaft, met een volledige afsluiting na zes maanden. We raden u aan om over te stappen naar Azure Container Apps. Zie Azure Spring Apps Standard-verbruik en toegewezen abonnement migreren naar Azure Container Apps voor meer informatie.
Dit artikel is van toepassing op:✅ Java ❎ C#
In dit artikel leest u hoe u een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit maakt voor een app die is geïmplementeerd in Azure Spring Apps en deze gebruikt voor toegang tot Azure Key Vault.
Met Azure Key Vault kunt u veilig de toegang tot tokens, wachtwoorden, certificaten, API-sleutels en andere geheimen voor uw app opslaan en strikt beheren. U kunt een beheerde identiteit maken in Microsoft Entra-id en verifiëren bij elke service die ondersteuning biedt voor Microsoft Entra-verificatie, inclusief Key Vault, zonder dat u referenties in uw code hoeft weer te geven.
In de volgende video wordt beschreven hoe u geheimen beheert met behulp van Azure Key Vault.
Vereisten
- Een Azure-abonnement. Als u geen abonnement hebt, maakt u een gratis account voordat u begint.
- Als u voor het eerst een Azure Spring Apps Enterprise-planexemplaren implementeert in het doelabonnement, raadpleegt u de sectie Vereisten van het Enterprise-plan in Azure Marketplace.
- Azure CLI, versie 2.55.0 of hoger.
- Een Azure-abonnement. Als u geen abonnement hebt, maakt u een gratis account voordat u begint.
- Azure CLI, versie 2.55.0 of hoger.
Namen opgeven voor elke resource
Maak variabelen voor het opslaan van de resourcenamen met behulp van de volgende opdrachten. Vervang de tijdelijke aanduidingen door uw eigen waarden.
export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>
Een brongroep maken
Een resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd. Maak een resourcegroep die zowel de Key Vault als Spring Cloud bevat met behulp van de opdracht az group create , zoals wordt weergegeven in het volgende voorbeeld:
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
Uw sleutelkluis instellen
Als u een sleutelkluis wilt maken, gebruikt u de opdracht az keyvault create , zoals wordt weergegeven in het volgende voorbeeld:
Belangrijk
Elke sleutelkluis moet een unieke naam hebben.
az keyvault create \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT}
Gebruik de volgende opdracht om de APP-URL weer te geven en noteer vervolgens de geretourneerde URL, die de indeling heeft https://${KEY_VAULT}.vault.azure.net
. Gebruik deze waarde in de volgende stap.
az keyvault show \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT} \
--query properties.vaultUri --output tsv
U kunt nu een geheim in uw Key Vault plaatsen met behulp van de opdracht az keyvault secret set , zoals wordt weergegeven in het volgende voorbeeld:
az keyvault secret set \
--vault-name ${KEY_VAULT} \
--name "connectionString" \
--value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"
Azure Spring Apps-service en -app maken
Nadat u alle bijbehorende extensies hebt geïnstalleerd, gebruikt u de volgende opdracht om een Azure Spring Apps-exemplaar te maken:
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--sku Enterprise \
--name ${SPRING_APPS}
In het volgende voorbeeld wordt de app gemaakt met een door het systeem toegewezen beheerde identiteit, zoals aangevraagd door de --system-assigned
parameter:
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}
In het volgende voorbeeld wordt een app met de naam springapp
gemaakt met een door het systeem toegewezen beheerde identiteit, zoals is gevraagd met de parameter --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)
Uw app toegang verlenen tot Key Vault
Gebruik de volgende opdracht om de juiste toegang te verlenen in Key Vault voor uw app:
az keyvault set-policy \
--name ${KEY_VAULT} \
--object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
--secret-permissions set get list
Notitie
Gebruik voor door het systeem toegewezen beheerde identiteit az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID}
de toegang voor uw app te verwijderen nadat door het systeem toegewezen beheerde identiteit is uitgeschakeld.
Een voorbeeld van een Spring Boot-app bouwen met een Spring Boot-starter
Deze app heeft toegang tot het ophalen van geheimen uit Azure Key Vault. Gebruik de Spring Boot-starter van Azure Key Vault Secrets. Azure Key Vault is als een exemplaar van Spring PropertySource toegevoegd. Geheimen die in Azure Key Vault zijn opgeslagen, kunnen eenvoudig worden geopend en gebruikt, net als elke externe configuratie-eigenschap, zoals eigenschappen in bestanden.
Gebruik de volgende opdracht om een voorbeeldproject te genereren met
start.spring.io
Azure Key Vault Spring Starter.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 -
Geef uw sleutelkluis op in uw app.
cd springapp vim src/main/resources/application.properties
Als u beheerde identiteit wilt gebruiken voor een app die is geïmplementeerd in Azure Spring Apps, voegt u eigenschappen met de volgende inhoud toe aan het bestand 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=true
Notitie
U moet de URL van de sleutelkluis toevoegen aan het bestand application.properties , zoals eerder is weergegeven. Anders wordt de URL van de sleutelkluis mogelijk niet vastgelegd tijdens runtime.
Werk src/main/java/com/example/demo/DemoApplication.java bij met het volgende codevoorbeeld. Met deze code wordt de verbindingsreeks opgehaald uit de Sleutelkluis.
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)); } }
Als u het bestand pom.xml opent, ziet u de
spring-cloud-azure-starter-keyvault
afhankelijkheid, zoals wordt weergegeven in het volgende voorbeeld:<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
Gebruik de volgende opdracht om uw app te implementeren in Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path
Gebruik de volgende opdracht om uw app te implementeren 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
Als u uw app wilt testen, opent u het openbare eindpunt of testeindpunt met behulp van de volgende opdracht:
curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
Het volgende bericht wordt geretourneerd in de hoofdtekst van het antwoord:
jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;
.
Resources opschonen
Gebruik de volgende opdracht om de hele resourcegroep te verwijderen, inclusief het zojuist gemaakte service-exemplaar:
az group delete --name ${RESOURCE_GROUP} --yes