Share via


Verbinden Azure Spring Apps to Key Vault mithilfe von verwalteten Identitäten

Hinweis

Azure Spring Apps ist der neue Name für den Azure Spring Cloud-Dienst. Obwohl der Dienst umbenannt wurde, wird der alte Name noch an einigen Stellen verwendet, solange wir Ressourcen wie Screenshots, Videos und Diagramme aktualisieren.

Dieser Artikel gilt für: ✔️ Java ❌ C#

In diesem Artikel erfahren Sie, wie Sie eine vom System zugewiesene oder vom Benutzer zugewiesene verwaltete Identität für eine App erstellen, die für Azure Spring Apps bereitgestellt wurde und sie für den Zugriff auf Azure Key Vault verwenden.

Azure Key Vault ermöglicht die sichere Speicherung und präzise Steuerung des Zugriffs auf Token, Kennwörter, Zertifikate, API-Schlüssel und andere Geheimnisse für Ihre App. Sie können eine verwaltete Identität in Microsoft Entra ID erstellen und sich bei jedem Dienst authentifizieren, der die Microsoft Entra-Authentifizierung unterstützt, einschließlich Key Vault, ohne Anmeldeinformationen in Ihrem Code anzeigen zu müssen.

Im folgenden Video wird beschrieben, wie Geheimnisse mit Azure Key Vault verwaltet werden.


Voraussetzungen

  • Ein Azure-Abonnement. Wenn Sie kein Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
  • Azure CLI, Version 2.55.0 oder höher.

Geben Sie einen Namen für jede Ressource an.

Erstellen Sie Variablen zur Aufnahme der Ressourcennamen, indem Sie die folgenden Befehle verwenden. Ersetzen Sie die Platzhalter durch Ihre eigenen Werte.

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

Erstellen einer Ressourcengruppe

Eine Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Erstellen Sie eine Ressourcengruppe, die sowohl den Key Vault als auch die Spring Cloud enthalten soll, indem Sie den Befehl "az group create" verwenden , wie im folgenden Beispiel gezeigt:

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

Einrichten Ihres Key Vault

Verwenden Sie zum Erstellen eines Key Vault den Befehl "az keyvault create ", wie im folgenden Beispiel gezeigt:

Wichtig

Jeder Schlüsseltresor muss einen eindeutigen Namen haben.

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

Verwenden Sie den folgenden Befehl, um die App-URL anzuzeigen und dann die zurückgegebene URL zu notieren, die sich im Format https://${KEY_VAULT}.vault.azure.netbefindet. Verwenden Sie diesen Wert im folgenden Schritt.

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

Sie können jetzt einen geheimen Schlüssel in Ihrem Key Vault platzieren, indem Sie den Befehl "az keyvault secret set " verwenden, wie im folgenden Beispiel gezeigt:

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

Erstellen von Azure Spring Apps-Diensten und -Apps

Verwenden Sie nach der Installation aller entsprechenden Erweiterungen den folgenden Befehl, um eine Azure Spring Apps-Instanz zu erstellen:

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

Im folgenden Beispiel wird die App mit einer vom System zugewiesenen verwalteten Identität erstellt, wie vom --system-assigned Parameter angefordert:

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}

Im folgenden Beispiel wird eine App namens springapp mit einer vom System zugewiesenen verwalteten Identität erstellt. Dies wird vom Parameter --system-assigned angefordert.

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)

Gewähren des Zugriffs auf Key Vault für Ihre App

Verwenden Sie den folgenden Befehl, um ordnungsgemäßen Zugriff in Key Vault für Ihre App zu gewähren:

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

Hinweis

Verwenden Sie az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} für vom System zugewiesene verwaltete Identität den Zugriff für Ihre App, nachdem die vom System zugewiesene verwaltete Identität deaktiviert wurde.

Erstellen einer Spring Boot-Beispiel-App mit Spring Boot Starter

Diese App besitzt Zugriff, um Geheimnisse aus Azure Key Vault abzurufen. Verwenden Sie den Spring Boot Starter für Azure Key Vault-Geheimnisse. Azure Key Vault wird als Instanz von PropertySource von Spring hinzugefügt. Auf die in Azure Key Vault gespeicherten Geheimnisse kann bequem zugegriffen werden, und sie können wie jede externe Konfigurationseigenschaft wie Eigenschaften in Dateien verwendet werden.

  1. Verwenden Sie den folgenden Befehl, um ein Beispielprojekt aus start.spring.io mit dem Spring Boot Starter für Azure Key Vault zu generieren.

    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. Geben Sie Ihren Key Vault in Ihrer App an.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Zum Verwenden der verwalteten Identität für eine App, die in Azure Spring Apps bereitgestellt ist, fügen Sie der Datei src/main/resources/application.properties Eigenschaften mit dem folgenden Inhalt hinzu.

    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
    

    Hinweis

    Sie müssen die URL des Schlüsseltresors in der Datei application.properties wie oben dargestellt hinzufügen. Andernfalls kann die Key Vault-URL während der Runtime nicht erfasst werden.

  4. Aktualisieren Sie src/Standard/java/com/example/demo/DemoApplication.java mit dem folgenden Codebeispiel. Dieser Code ruft die Verbindungszeichenfolge aus dem Key Vault ab.

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

    Wenn Sie die Datei pom.xml öffnen, sehen Sie die Abhängigkeit spring-cloud-azure-starter-keyvault, wie im folgenden Beispiel gezeigt:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Verwenden Sie den folgenden Befehl, um Ihre App in Azure Spring Apps bereitzustellen:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Verwenden Sie den folgenden Befehl, um Ihre App in Azure Spring Apps bereitzustellen:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path \
        --build-env BP_JVM_VERSION=17
    
  1. Um Ihre App zu testen, greifen Sie mit folgendem Befehl auf den öffentlichen Endpunkt oder Testendpunkt zu:

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

    Die folgende Nachricht wird im Antworttext zurückgegeben: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.

Bereinigen von Ressourcen

Verwenden Sie den folgenden Befehl, um die gesamte Ressourcengruppe einschließlich der neu erstellten Dienstinstanz zu löschen:

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

Nächste Schritte