Szybki start: ładowanie wpisów tajnych aplikacji przy użyciu usługi Key Vault
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: ❎ Podstawowa/Standardowa ✅ Enterprise
W tym przewodniku Szybki start pokazano, jak bezpiecznie ładować wpisy tajne przy użyciu usługi Azure Key Vault dla aplikacji z planem Azure Spring Apps Enterprise.
Każda aplikacja ma właściwości łączące je ze środowiskiem i usługami pomocniczymi. Te usługi obejmują zasoby, takie jak bazy danych, narzędzia rejestrowania i monitorowania, platformy obsługi komunikatów itd. Każdy zasób wymaga sposobu lokalizowania i uzyskiwania do niego dostępu, często w postaci adresów URL i poświadczeń. Te informacje są często chronione przez prawo i muszą być przechowywane w tajemnicy, aby chronić dane klientów. W usłudze Azure Spring Apps można skonfigurować aplikacje tak, aby bezpośrednio ładowały te wpisy tajne do pamięci z usługi Key Vault przy użyciu tożsamości zarządzanych i kontroli dostępu opartej na rolach platformy Azure.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Zapoznaj się z sekcją Wymagania planu Enterprise w witrynie Azure Marketplace i spełnij je.
- Interfejs wiersza polecenia platformy Azure w wersji 2.45.0 lub nowszej.
- Git.
- jq
- Rozszerzenie planu Usługi Azure Spring Apps Enterprise. Użyj następującego polecenia, aby usunąć poprzednie wersje i zainstalować najnowsze rozszerzenie planu Enterprise. Jeśli wcześniej zainstalowano
spring-cloud
rozszerzenie, odinstaluj je, aby uniknąć niezgodności konfiguracji i wersji.az extension add --upgrade --name spring az extension remove --name spring-cloud
- Wykonaj kroki opisane w następujących przewodnikach Szybki start:
Aprowizuj usługę Key Vault i przechowuj wpisy tajne
Poniższe instrukcje opisują sposób tworzenia usługi Key Vault i bezpiecznego zapisywania wpisów tajnych aplikacji.
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.
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
export RESOURCE_GROUP=<resource-group-name> export KEY_VAULT_NAME=<key-vault-name> export POSTGRES_SERVER_NAME=<postgres-server-name> export POSTGRES_USERNAME=<postgres-username> export POSTGRES_PASSWORD=<postgres-password> export REDIS_CACHE_NAME=<redis-cache-name> export AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME=<Azure-Spring-Apps-service-instance-name>
Użyj następującego polecenia, aby utworzyć magazyn kluczy do przechowywania wpisów tajnych aplikacji:
az keyvault create \ --resource-group ${RESOURCE_GROUP} \ --name ${KEY_VAULT_NAME}
Użyj następującego polecenia, aby zapisać pełną nazwę serwera bazy danych w usłudze Key Vault:
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-SERVER-NAME" \ --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
Użyj następującego polecenia, aby zapisać nazwę bazy danych w usłudze Key Vault dla aplikacji usługi katalogu:
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "CATALOG-DATABASE-NAME" \ --value "acmefit_catalog"
Użyj następujących poleceń, aby przechowywać poświadczenia logowania bazy danych w usłudze Key Vault:
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-LOGIN-NAME" \ --value "${POSTGRES_USERNAME}" az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-LOGIN-PASSWORD" \ --value "${POSTGRES_PASSWORD}"
Użyj następującego polecenia, aby zapisać bazę danych parametry połączenia w usłudze Key Vault dla aplikacji Order Service:
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "ConnectionStrings--OrderContext" \ --value "Server=${POSTGRES_SERVER_NAME};Database=acmefit_order;Port=5432;Ssl Mode=Require;User Id=${POSTGRES_USERNAME};Password=${POSTGRES_PASSWORD};"
Użyj następujących poleceń, aby pobrać właściwości połączenia usługi Redis i zapisać je w usłudze Key Vault:
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
export REDIS_HOST=$(az redis show \ --resource-group ${RESOURCE_GROUP} \ --name ${REDIS_CACHE_NAME} | jq -r '.hostName') export REDIS_PORT=$(az redis show \ --resource-group ${RESOURCE_GROUP} \ --name ${REDIS_CACHE_NAME} | jq -r '.sslPort') export REDIS_PRIMARY_KEY=$(az redis list-keys \ --resource-group ${RESOURCE_GROUP} \ --name ${REDIS_CACHE_NAME} | jq -r '.primaryKey') az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "CART-REDIS-CONNECTION-STRING" \ --value "rediss://:${REDIS_PRIMARY_KEY}@${REDIS_HOST}:${REDIS_PORT}/0"
Jeśli skonfigurowano logowanie jednokrotne, użyj następującego polecenia, aby zapisać identyfikator JSON Web Key (JWK) w usłudze Key Vault:
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "SSO-PROVIDER-JWK-URI" \ --value <jwk-uri>
Udzielanie aplikacjom dostępu do wpisów tajnych w usłudze Key Vault
W poniższych instrukcjach opisano sposób udzielania dostępu do wpisów tajnych usługi Key Vault aplikacjom wdrożonym w planie Usługi Azure Spring Apps Enterprise.
Użyj następującego polecenia, aby włączyć tożsamość przypisaną przez system dla aplikacji Usługi koszyka:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Użyj następujących poleceń, aby ustawić zasady
get list
dostępu w usłudze Key Vault dla aplikacji usługi Cart Service:export CART_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${CART_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
Użyj następującego polecenia, aby włączyć tożsamość przypisaną przez system dla aplikacji Order Service:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name order-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Użyj następujących poleceń, aby ustawić zasady
get list
dostępu w usłudze Key Vault dla aplikacji Order Service:export ORDER_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name order-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${ORDER_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
Użyj następującego polecenia, aby włączyć tożsamość przypisaną przez system dla aplikacji usługi katalogu:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name catalog-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Użyj następujących poleceń, aby ustawić zasady
get list
dostępu w usłudze Key Vault dla aplikacji usługi katalogu:export CATALOG_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name catalog-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${CATALOG_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
Jeśli skonfigurowano logowanie jednokrotne, użyj następującego polecenia, aby włączyć tożsamość przypisaną przez system dla aplikacji usługi tożsamości tożsamości:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Jeśli skonfigurowano logowanie jednokrotne, użyj następujących poleceń, aby ustawić zasady
get list
dostępu w usłudze Key Vault dla aplikacji usługi Identity Service:export IDENTITY_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${IDENTITY_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
Aktualizowanie aplikacji w celu załadowania wpisów tajnych usługi Key Vault
Po udzieleniu dostępu do odczytu wpisów tajnych z usługi Key Vault wykonaj następujące kroki, aby zaktualizować aplikacje do używania nowych wartości wpisów tajnych w ich konfiguracjach.
Użyj następującego polecenia, aby pobrać identyfikator URI dla usługi Key Vault, który ma być używany w aktualizowaniu aplikacji:
export KEYVAULT_URI=$(az keyvault show --name ${KEY_VAULT_NAME} --resource-group ${RESOURCE_GROUP} | jq -r '.properties.vaultUri')
Użyj następującego polecenia, aby pobrać adres URL usługi Spring Cloud Gateway do użycia w aktualizowaniu aplikacji:
export GATEWAY_URL=$(az spring gateway show \ --resource-group ${RESOURCE_GROUP} \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
Użyj następującego polecenia, aby usunąć powiązanie łącznika usługi z aplikacją Order Service i serwerem elastycznym usługi Azure Database for PostgreSQL:
az spring connection delete \ --resource-group ${RESOURCE_GROUP} \ --app order-service \ --connection order_service_db \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --deployment default \ --yes
Użyj następującego polecenia, aby zaktualizować środowisko usługi Order Service za pomocą identyfikatora URI w celu uzyskania dostępu do usługi Key Vault:
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name order-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --env "ConnectionStrings__KeyVaultUri=${KEYVAULT_URI}" "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}" "DatabaseProvider=Postgres"
Użyj następującego polecenia, aby usunąć powiązanie łącznika usługi katalogu aplikacji usługi i serwera elastycznego usługi Azure Database for PostgreSQL:
az spring connection delete \ --resource-group ${RESOURCE_GROUP} \ --app catalog-service \ --connection catalog_service_db \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --deployment default \ --yes
Użyj następującego polecenia, aby zaktualizować środowisko usługi katalogu i wzorzec konfiguracji w celu uzyskania dostępu do usługi Key Vault:
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name catalog-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --config-file-pattern catalog/default,catalog/key-vault \ --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
Użyj następującego polecenia, aby usunąć powiązanie łącznika usług z aplikacją Cart Service i usługą Azure Cache for Redis:
az spring connection delete \ --resource-group ${RESOURCE_GROUP} \ --app cart-service \ --connection cart_service_cache \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --deployment default \ --yes
Użyj następującego polecenia, aby zaktualizować środowisko usługi Cart Service w celu uzyskania dostępu do usługi Key Vault:
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --env "CART_PORT=8080" "KEYVAULT_URI=${KEYVAULT_URI}" "AUTH_URL=https://${GATEWAY_URL}"
Jeśli skonfigurowano logowanie jednokrotne, użyj następującego polecenia, aby zaktualizować środowisko usługi tożsamości i wzorzec konfiguracji w celu uzyskania dostępu do usługi Key Vault:
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --config-file-pattern identity/default,identity/key-vault \ --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
Użyj następujących poleceń, aby pobrać adres URL bramy Spring Cloud Gateway:
export GATEWAY_URL=$(az spring gateway show \ --resource-group ${RESOURCE_GROUP} \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url') echo "https://${GATEWAY_URL}"
Możesz otworzyć adres URL danych wyjściowych w przeglądarce, aby eksplorować zaktualizowaną aplikację.
Czyszczenie zasobów
Jeśli planujesz kontynuować pracę z kolejnymi przewodnikami Szybki start i samouczkami, możesz pozostawić te zasoby na miejscu. Gdy grupa zasobów nie będzie już potrzebna, usuń grupę zasobów, która usuwa zasoby w grupie zasobów. Aby usunąć grupę zasobów przy użyciu interfejsu wiersza polecenia platformy Azure, użyj następujących poleceń:
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."
Następne kroki
Przejdź do dowolnego z następujących opcjonalnych przewodników Szybki start: