Szybki start: ładowanie wpisów tajnych aplikacji przy użyciu usługi Key Vault

Uwaga

Azure Spring Apps to nowa nazwa usługi Azure Spring Cloud. Mimo że usługa ma nową nazwę, stara nazwa będzie widoczna w niektórych miejscach przez pewien czas, ponieważ pracujemy nad aktualizowaniem zasobów, takich jak zrzuty ekranu, filmy wideo i diagramy.

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

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.

  1. 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 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>
    
  2. 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}
    
  3. 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"
    
  4. 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"
    
  5. Użyj następujących poleceń, aby przechowywać poświadczenia logowania bazy danych w usłudze Key Vault:

    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}"
    
  6. Użyj następującego polecenia, aby zapisać bazę danych parametry połączenia w usłudze Key Vault dla aplikacji Order Service:

    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};"
    
  7. 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:

    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"
    
  8. 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.

  1. 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}
    
  2. 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
    
  3. 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}
    
  4. 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
    
  5. 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}
    
  6. 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
    
  7. 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}
    
  8. 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.

  1. 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')
    
  2. 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')
    
  3. Użyj następującego polecenia, aby usunąć powiązanie usługi Połączenie or 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
    
  4. 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:

    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"
    
  5. Użyj następującego polecenia, aby usunąć powiązanie usługi Połączenie or z aplikacją usługi katalogu i serwerem elastycznym 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
    
  6. 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"
    
  7. Użyj następującego polecenia, aby usunąć powiązanie usługi service Połączenie or 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
    
  8. 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}"
    
  9. 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"
    
  10. 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: