Udostępnij za pośrednictwem


Łączenie usługi Azure Spring Apps z usługą Key Vault przy użyciu tożsamości zarządzanych

Uwaga

Plany Basic, Standardi Enterprise weszły w okres wycofywania 17 marca 2025 r. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.

Plan dotyczący zużycia standardowego oraz dedykowany plan zostały wycofane 30 września 2024 r., z całkowitym zamknięciem do końca marca 2025 r. Aby uzyskać więcej informacji, zobacz Migrowanie usługi Azure Spring Apps z warstwy Standardowa i dedykowanego planu do usługi Azure Container Apps.

Ten artykuł dotyczy:✅ Java ❎ C#

W tym artykule pokazano, jak utworzyć tożsamość zarządzaną przypisaną przez system lub przypisaną przez użytkownika dla aplikacji wdrożonej w usłudze Azure Spring Apps i użyć jej do uzyskiwania dostępu do usługi Azure Key Vault.

Za pomocą usługi Azure Key Vault można bezpiecznie przechowywać i ściśle kontrolować dostęp do tokenów, haseł, certyfikatów, kluczy interfejsu API i innych wpisów tajnych dla aplikacji. Tożsamość zarządzaną można utworzyć w usłudze Microsoft Entra ID i uwierzytelnić w dowolnej usłudze obsługującej uwierzytelnianie firmy Microsoft Entra, w tym w usłudze Key Vault, bez konieczności wyświetlania poświadczeń w kodzie.

W poniższym filmie wideo opisano sposób zarządzania tajemnicami przy użyciu usługi Azure Key Vault.


Wymagania wstępne

  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji, przed rozpoczęciem utwórz bezpłatne konto .
  • Jeśli wdrażasz wystąpienie planu Usługi Azure Spring Apps Enterprise po raz pierwszy w subskrypcji docelowej, zobacz sekcję Wymagania planu przedsiębiorstwa w witrynie Azure Marketplace.
  • Interfejs wiersza polecenia platformy Azure w wersji 2.55.0 lub nowszej.

Podaj nazwy dla każdego zasobu

Utwórz zmienne do przechowywania nazw zasobów przy użyciu następujących poleceń. Pamiętaj, aby zastąpić symbole zastępcze własnymi wartościami.

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

Tworzenie grupy zasobów

Grupa zasobów to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Utwórz grupę zasobów zawierającą zarówno usługę Key Vault, jak i platformę Spring Cloud przy użyciu polecenia az group create , jak pokazano w poniższym przykładzie:

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

Konfigurowanie usługi Key Vault

Aby utworzyć usługę Key Vault, użyj polecenia az keyvault create , jak pokazano w poniższym przykładzie:

Ważne

Każda usługa Key Vault musi mieć unikatową nazwę.

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

Użyj następującego polecenia, aby wyświetlić adres URL aplikacji, a następnie zanotować zwrócony adres URL, który ma format https://${KEY_VAULT}.vault.azure.net. Użyj tej wartości w poniższym kroku.

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

Teraz możesz umieścić tajemnicę w usłudze Key Vault przy użyciu polecenia az keyvault secret set, jak pokazano w poniższym przykładzie:

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

Tworzenie usługi Azure Spring Apps i aplikacji

Po zainstalowaniu wszystkich odpowiednich rozszerzeń użyj następującego polecenia, aby utworzyć wystąpienie usługi Azure Spring Apps:

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

Poniższy przykład tworzy aplikację z tożsamością zarządzaną przypisaną przez system zgodnie z żądaniem 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}

Poniższy przykład tworzy aplikację o nazwie springapp z tożsamością zarządzaną przypisaną przez system zgodnie z żądaniem 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)

Udzielanie aplikacji dostępu do usługi Key Vault

Użyj następującego polecenia, aby udzielić odpowiedniego dostępu w usłudze Key Vault dla aplikacji:

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

Uwaga

W przypadku tożsamości zarządzanej przypisanej przez system użyj polecenia az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} , aby usunąć dostęp do aplikacji po wyłączeniu tożsamości zarządzanej przypisanej przez system.

Tworzenie przykładowej aplikacji Spring Boot przy użyciu szablonu startowego Spring Boot

Ta aplikacja ma dostęp do sekretów w usłudze Azure Key Vault. Użyj startera Azure Key Vault Secrets Spring Boot. Usługa Azure Key Vault jest dodawana jako wystąpienie usługi Spring PropertySource. Dostęp do tajemnic przechowywanych w usłudze Azure Key Vault można wygodnie uzyskiwać i używać jak każda zewnętrzna właściwość konfiguracji, taka jak właściwości w plikach.

  1. Użyj następującego polecenia, aby wygenerować przykładowy projekt z start.spring.io usługi 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. Określ Key Vault w swojej aplikacji.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Aby użyć tożsamości zarządzanej dla aplikacji wdrożonej w usłudze Azure Spring Apps, dodaj właściwości z następującą zawartością do pliku 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
    

    Uwaga

    Musisz dodać adres URL magazynu kluczy w pliku application.properties , jak pokazano wcześniej. W przeciwnym razie adres URL magazynu kluczy może nie być przechwycony w czasie działania.

  4. Zaktualizuj plik src/main/java/com/example/demo/DemoApplication.java przy użyciu poniższego przykładu kodu. Ten kod pobiera parametry połączenia z usługi 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));
        }
    }
    

    Po otwarciu pliku pom.xml można zobaczyć spring-cloud-azure-starter-keyvault zależność, jak pokazano w poniższym przykładzie:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Użyj następującego polecenia, aby wdrożyć aplikację w usłudze Azure Spring Apps:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Użyj następującego polecenia, aby wdrożyć aplikację w usłudze 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. Aby przetestować aplikację, uzyskaj dostęp do publicznego punktu końcowego lub testowego punktu końcowego przy użyciu następującego polecenia:

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

    W treści odpowiedzi zostanie zwrócony następujący komunikat: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.

Czyszczenie zasobów

Użyj następującego polecenia, aby usunąć całą grupę zasobów, w tym nowo utworzone wystąpienie usługi:

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

Następne kroki