Delen via


Verbinding maken Azure Spring Apps naar Key Vault met behulp van beheerde identiteiten

Notitie

Azure Spring Apps is de nieuwe naam voor de Azure Spring Cloud-service. Hoewel de service een nieuwe naam heeft, ziet u de oude naam op sommige plaatsen terwijl we werken aan het bijwerken van assets, zoals schermopnamen, video's en diagrammen.

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.
  • 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.

  1. 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 -
    
  2. Geef uw sleutelkluis op in uw app.

    cd springapp
    vim src/main/resources/application.properties
    
  3. 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.

  4. 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>
    
  1. 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
    
  1. 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
    
  1. 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

Volgende stappen