Freigeben über


Verbinden von Azure Spring Apps mit Key Vault mithilfe verwalteter Identitäten

Hinweis

Die Pläne Basic, Standard und Enterprise gelten ab Mitte März 2025 als veraltet und werden über einen Zeitraum von drei Jahren eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie in der Ankündigung zur Einstellung von Azure Spring Apps.

Der Plan Standardverbrauch und dediziert gilt ab dem 30. September 2024 als veraltet und wird nach sechs Monaten vollständig eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie unter Migrieren des Plans „Standardverbrauch und dediziert“ von Azure Spring Apps zu Azure Container Apps.

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

In diesem Artikel erfahren Sie, wie Sie eine systemseitig oder benutzerseitig zugewiesene verwaltete Identität für eine App erstellen, die in Azure Spring Apps bereitgestellt ist, und wie Sie damit auf Azure Key Vault zugreifen können.

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 Microsoft Entra-Authentifizierung unterstützt (einschließlich Key Vault), ohne dass Sie Anmeldeinformationen in Ihrem Code anzeigen 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 mit dem Befehl az group create eine Ressourcengruppe, die sowohl Key Vault als auch Spring Cloud enthält, wie im folgenden Beispiel gezeigt:

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

Einrichten Ihres Key Vault

Verwenden Sie den Befehl az keyvault create, um eine Key Vault-Instanz zu erstellen, 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 notieren Sie dann die zurückgegebene URL im Format https://${KEY_VAULT}.vault.azure.net. Verwenden Sie diesen Wert im folgenden Schritt.

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

Nun können Sie mithilfe des Befehls az keyvault secret set ein Geheimnis in Key Vault platzieren, 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 systemseitig 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 \
    --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 bei der systemseitig zugewiesenen verwalteten Identität az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID}, um nach dem Deaktivieren der systemseitig zugewiesenen verwalteten Identität den Zugriff für Ihre App zu entfernen.

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/main/java/com/example/demo/DemoApplication.java mit dem folgenden Codebeispiel. Dieser Code ruft die Verbindungszeichenfolge aus 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 Meldung wird im Antworttext zurückgegeben: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.

Bereinigen von Ressourcen

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

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

Nächste Schritte