Łączenie usługi Azure Spring Apps z usługą Key Vault przy użyciu tożsamości zarządzanych
Uwaga
Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.
Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie 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 wpisami tajnymi 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.
- Subskrypcja Azure. Jeśli nie masz subskrypcji, przed rozpoczęciem utwórz bezpłatne konto .
- 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ć wpis tajny 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 uzyskiwania wpisów tajnych z usługi Azure Key Vault. Użyj szablonu startowego Spring Boot wpisów tajnych usługi Azure Key Vault. Usługa Azure Key Vault jest dodawana jako wystąpienie usługi Spring PropertySource. Dostęp do wpisów tajnych przechowywanych w usłudze Azure Key Vault można wygodnie uzyskiwać i używać jak dowolna zewnętrzna właściwość konfiguracji, taka jak właściwości w plikach.
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 -
Określ usługę Key Vault w aplikacji.
cd springapp vim src/main/resources/application.properties
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ć przechwytywany podczas wykonywania.
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>
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
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
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
- Jak uzyskać dostęp do obiektu blob usługi Storage przy użyciu tożsamości zarządzanej w usłudze Azure Spring Apps
- Włączanie tożsamości zarządzanej przypisanej przez system dla aplikacji w usłudze Azure Spring Apps
- Co to są tożsamości zarządzane dla zasobów platformy Azure?
- Uwierzytelnianie usługi Azure Spring Apps za pomocą usługi Key Vault w funkcji GitHub Actions