Připojení Azure Spring Apps do služby Key Vault s využitím spravovaných identit

Poznámka:

Azure Spring Apps je nový název služby Azure Spring Cloud. Přestože má služba nový název, na některých místech uvidíte starý název, protože pracujeme na aktualizaci prostředků, jako jsou snímky obrazovky, videa a diagramy.

Tento článek se vztahuje na: ✔️ Java ❌ C#

V tomto článku se dozvíte, jak vytvořit spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro aplikaci nasazenou do Azure Spring Apps a jak ji použít pro přístup ke službě Azure Key Vault.

Azure Key Vault se dá použít k bezpečnému ukládání a těsnému řízení přístupu k tokenům, heslům, certifikátům, klíčům rozhraní API a dalším tajným kódům pro vaši aplikaci. Spravovanou identitu můžete vytvořit v ID Microsoft Entra a ověřit ji ve všech službách, které podporují ověřování Microsoft Entra, včetně key Vaultu, aniž byste museli v kódu zobrazovat přihlašovací údaje.

Následující video popisuje, jak spravovat tajné kódy pomocí služby Azure Key Vault.


Požadavky

  • Předplatné Azure. Pokud předplatné nemáte, vytvořte si před zahájením bezplatný účet .
  • Pokud nasazujete instanci plánu Azure Spring Apps Enterprise poprvé v cílovém předplatném, přečtěte si část Požadavky plánu Enterprise na Azure Marketplace.
  • Azure CLI verze 2.55.0 nebo vyšší.
  • Předplatné Azure. Pokud předplatné nemáte, vytvořte si před zahájením bezplatný účet .
  • Azure CLI verze 2.55.0 nebo vyšší.

Zadejte názvy jednotlivých prostředků.

Pomocí následujících příkazů vytvořte proměnné, které budou obsahovat názvy prostředků. Zástupné symboly nezapomeňte nahradit vlastními hodnotami.

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

Vytvoření skupiny zdrojů

Skupina prostředků je logický kontejner, ve kterém se nasazují a spravují prostředky Azure. Pomocí příkazu az group create vytvořte skupinu prostředků, která bude obsahovat key Vault i Spring Cloud, jak je znázorněno v následujícím příkladu:

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

Nastavení služby Key Vault

Pokud chcete vytvořit službu Key Vault, použijte příkaz az keyvault create , jak je znázorněno v následujícím příkladu:

Důležité

Každý trezor klíčů musí mít jedinečný název.

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

Pomocí následujícího příkazu zobrazte adresu URL aplikace a poznamenejte si vrácenou adresu URL, která je ve formátu https://${KEY_VAULT}.vault.azure.net. Tuto hodnotu použijte v následujícím kroku.

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

Teď můžete do služby Key Vault umístit tajný klíč pomocí příkazu az keyvault secret set , jak je znázorněno v následujícím příkladu:

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

Vytvoření služby a aplikace Azure Spring Apps

Po instalaci všech odpovídajících rozšíření pomocí následujícího příkazu vytvořte instanci Azure Spring Apps:

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

Následující příklad vytvoří aplikaci se spravovanou identitou přiřazenou systémem podle požadavku parametru --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}

Následující příklad vytvoří aplikaci springapp s spravovanou identitou přiřazenou systémem podle požadavku parametru --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)

Udělení přístupu aplikace ke službě Key Vault

K udělení správného přístupu ve službě Key Vault pro vaši aplikaci použijte následující příkaz:

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

Poznámka:

U spravované identity přiřazené systémem odeberte az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} přístup k aplikaci po zakázání spravované identity přiřazené systémem.

Vytvoření ukázkové aplikace Spring Boot s úvodní aplikací Spring Boot

Tato aplikace má přístup k získání tajných kódů ze služby Azure Key Vault. Použijte úvodní sadu Spring Boot tajných kódů služby Azure Key Vault. Azure Key Vault se přidá jako instance Spring PropertySource. Tajné kódy uložené ve službě Azure Key Vault se dají pohodlně přistupovat a používat jako jakákoli externě nakonfigurovaná vlastnost, například vlastnosti v souborech.

  1. Pomocí následujícího příkazu vygenerujte ukázkový projekt pomocí spring starteru služby start.spring.io Azure Key Vault.

    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. Zadejte v aplikaci službu Key Vault.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Pokud chcete použít spravovanou identitu pro aplikaci nasazenou do Azure Spring Apps, přidejte do souboru src/main/resources/application.properties vlastnosti s následujícím obsahem.

    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
    

    Poznámka:

    Adresu URL trezoru klíčů musíte přidat do souboru application.properties , jak je znázorněno výše. Jinak se adresa URL trezoru klíčů nemusí zachytávat během běhu.

  4. Aktualizujte soubor src/main/java/com/example/demo/DemoApplication.java následujícím příkladem kódu. Tento kód načte připojovací řetězec ze služby 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));
        }
    }
    

    Pokud otevřete soubor pom.xml , uvidíte závislost spring-cloud-azure-starter-keyvault , jak je znázorněno v následujícím příkladu:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Pomocí následujícího příkazu nasaďte aplikaci do Azure Spring Apps:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Pomocí následujícího příkazu nasaďte aplikaci do 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. Aplikaci otestujete tak, že pomocí následujícího příkazu přejdete k veřejnému koncovému bodu nebo testovacímu koncovému bodu:

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

    V textu odpovědi se vrátí následující zpráva: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.

Vyčištění prostředků

Pomocí následujícího příkazu odstraňte celou skupinu prostředků, včetně nově vytvořené instance služby:

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

Další kroky