Anslut Azure Spring Apps till Key Vault med hanterade identiteter

Kommentar

Azure Spring Apps är det nya namnet på Azure Spring Cloud-tjänsten. Även om tjänsten har ett nytt namn ser du det gamla namnet på vissa platser ett tag medan vi arbetar med att uppdatera tillgångar som skärmbilder, videor och diagram.

Den här artikeln gäller för: ✔️ Java ❌ C#

Den här artikeln visar hur du skapar en systemtilldelad eller användartilldelad hanterad identitet för en app som distribueras till Azure Spring Apps och använder den för att få åtkomst till Azure Key Vault.

Azure Key Vault kan användas för att lagra och kontrollera åtkomsten till token, lösenord, certifikat, API-nycklar och andra hemligheter för din app på ett säkert sätt. Du kan skapa en hanterad identitet i Microsoft Entra-ID och autentisera till alla tjänster som stöder Microsoft Entra-autentisering, inklusive Key Vault, utan att behöva visa autentiseringsuppgifter i koden.

I följande video beskrivs hur du hanterar hemligheter med Hjälp av Azure Key Vault.


Förutsättningar

  • En Azure-prenumeration. Om du inte har någon prenumeration skapar du ett kostnadsfritt konto innan du börjar.
  • Om du distribuerar en Azure Spring Apps Enterprise-planinstans för första gången i målprenumerationen läser du avsnittet Krav i Enterprise-plan på Azure Marketplace.
  • Azure CLI, version 2.55.0 eller senare.
  • En Azure-prenumeration Om du inte har någon prenumeration skapar du ett kostnadsfritt konto innan du börjar.
  • Azure CLI, version 2.55.0 eller senare.

Ange namn för varje resurs

Skapa variabler för att lagra resursnamnen med hjälp av följande kommandon. Se till att ersätta platshållarna med dina egna värden.

export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>

Skapa en resursgrupp

En resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. Skapa en resursgrupp som ska innehålla både Key Vault och Spring Cloud med kommandot az group create , som du ser i följande exempel:

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

Konfigurera ditt Key Vault

Om du vill skapa ett Key Vault använder du kommandot az keyvault create , som du ser i följande exempel:

Viktigt!

Varje Key Vault måste ha ett unikt namn.

az keyvault create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT}

Använd följande kommando för att visa appens URL och anteckna sedan den returnerade URL:en, som är i formatet https://${KEY_VAULT}.vault.azure.net. Använd det här värdet i följande steg.

az keyvault show \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT} \
    --query properties.vaultUri --output tsv

Nu kan du placera en hemlighet i ditt Key Vault med hjälp av kommandot az keyvault secret set , som du ser i följande exempel:

az keyvault secret set \
    --vault-name ${KEY_VAULT} \
    --name "connectionString" \
    --value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"

Skapa Azure Spring Apps-tjänst och -app

När du har installerat alla motsvarande tillägg använder du följande kommando för att skapa en Azure Spring Apps-instans:

az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --sku Enterprise \
    --name ${SPRING_APPS}

I följande exempel skapas appen med en systemtilldelad hanterad identitet enligt parametern --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}

I följande exempel skapas en app med namnet springapp med en systemtilldelad hanterad identitet, enligt parameterns --system-assigned begäran.

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)

Ge din app åtkomst till Key Vault

Använd följande kommando för att bevilja korrekt åtkomst i Key Vault för din app:

az keyvault set-policy \
    --name ${KEY_VAULT} \
    --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
    --secret-permissions set get list

Kommentar

För systemtilldelad hanterad identitet använder du az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} för att ta bort åtkomsten för din app när systemtilldelad hanterad identitet har inaktiverats.

Skapa en Spring Boot-exempelapp med Spring Boot Starter

Den här appen har åtkomst till att hämta hemligheter från Azure Key Vault. Använd Startstarten för Azure Key Vault Secrets Spring. Azure Key Vault läggs till som en instans av Spring PropertySource. Hemligheter som lagras i Azure Key Vault kan enkelt nås och användas som valfri externaliserad konfigurationsegenskap, till exempel egenskaper i filer.

  1. Använd följande kommando för att generera ett exempelprojekt från start.spring.io med 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. Ange ditt Key Vault i din app.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Om du vill använda hanterad identitet för en app som distribuerats till Azure Spring Apps lägger du till egenskaper med följande innehåll i filen 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
    

    Kommentar

    Du måste lägga till url:en för nyckelvalvet i filen application.properties som du visade tidigare. Annars kanske inte url:en för nyckelvalvet registreras under körningen.

  4. Uppdatera src/main/java/com/example/demo/DemoApplication.java med följande kodexempel. Den här koden hämtar anslutningssträng från Key Vault.

    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));
        }
    }
    

    Om du öppnar filen pom.xml kan du se spring-cloud-azure-starter-keyvault beroendet, som du ser i följande exempel:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Använd följande kommando för att distribuera din app till Azure Spring Apps:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Använd följande kommando för att distribuera din app till 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. Om du vill testa din app får du åtkomst till den offentliga slutpunkten eller testslutpunkten med hjälp av följande kommando:

    curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
    

    Följande meddelande returneras i svarstexten: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.

Rensa resurser

Använd följande kommando för att ta bort hela resursgruppen, inklusive den nyligen skapade tjänstinstansen:

az group delete --name ${RESOURCE_GROUP} --yes

Nästa steg