Início Rápido: Carregar segredos do aplicativo usando Key Vault
Observação
Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.
O plano Standard de consumo e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.
Este artigo se aplica ao:❌ nível Básico/Standard ✔️ nível Enterprise
Este início rápido mostra como carregar segredos com segurança usando a Azure Key Vault para aplicativos que executam o plano Enterprise dos Aplicativos Spring do Azure.
Cada aplicativo tem propriedades que o conectam ao ambiente e aos serviços de suporte. Esses serviços incluem recursos como bancos de dados, ferramentas de registro em log e monitoramento, plataformas de mensagens e assim por diante. Cada recurso requer uma maneira de localizá-lo e acessá-lo, muitas vezes na forma de URLs e credenciais. Essas informações geralmente são protegidas por lei e devem ser mantidas em segredo para proteger os dados do cliente. No Azure Spring Apps, você pode configurar aplicativos para carregar diretamente esses segredos na memória de Key Vault usando identidades gerenciadas e controle de acesso baseado em função do Azure.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Entenda e atenda a seção Requisitos do plano Enterprise no Azure Marketplace.
- A CLI do Azure, versão 2.45.0 ou superior.
- Git.
- jq
- A extensão do plano Enterprise dos Aplicativos Spring do Azure. Use o comando a seguir para remover as versões anteriores e instalar a extensão do plano Enterprise mais recente. Se você instalou a extensão
spring-cloud
anteriormente, desinstale-a para evitar incompatibilidades de configuração e versão.az extension add --upgrade --name spring az extension remove --name spring-cloud
- Conclua as etapas nos seguintes guias de início rápido:
Provisionar o Key Vault e armazenar segredos
As instruções a seguir descrevem como criar um Key Vault e salvar segredos do aplicativo com segurança.
Crie variáveis para manter os nomes dos recursos usando os comandos a seguir. Substitua os espaços reservados pelos seus valores.
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>
Use o seguinte comando para criar um Key Vault para armazenar segredos do aplicativo:
az keyvault create \ --resource-group ${RESOURCE_GROUP} \ --name ${KEY_VAULT_NAME}
Use o seguinte comando para armazenar o nome completo do servidor de banco de dados no Key Vault:
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-SERVER-NAME" \ --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
Use o seguinte comando para armazenar o nome do banco de dados no Key Vault para o aplicativo serviço de catálogo:
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "CATALOG-DATABASE-NAME" \ --value "acmefit_catalog"
Use os seguintes comandos para armazenar as credenciais de logon do banco de dados no 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}"
Use o seguinte comando para armazenar a cadeia de conexão de banco de dados no Key Vault para o aplicativo 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};"
Use os seguintes comandos para recuperar as propriedades de conexão do Redis e armazená-las no 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"
Se você tiver configurado o logon único, use o seguinte comando para armazenar o URI JWK (JSON Web Key) no Key Vault:
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "SSO-PROVIDER-JWK-URI" \ --value <jwk-uri>
Conceder aos aplicativos acesso a segredos no Key Vault
As instruções a seguir descrevem como conceder acesso a segredos do Key Vault para aplicativos implantados no plano Enterprise dos Aplicativos Spring do Azure.
Use o seguinte comando para habilitar uma identidade atribuída pelo sistema para o aplicativo de Serviço de Carrinho:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Use os seguintes comandos para definir uma política de acesso de
get list
no Key Vault para o aplicativo de Serviço de Carrinho: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
Use o seguinte comando para habilitar uma identidade atribuída pelo sistema para o aplicativo do Serviço de Pedido:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name order-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Use os seguintes comandos para definir uma política de acesso de
get list
no Key Vault para o aplicativo Serviço de Pedido: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
Use o seguinte comando para habilitar uma identidade atribuída pelo sistema para o aplicativo de Serviço de Catálogo:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name catalog-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Use os seguintes comandos para definir uma política de acesso de
get list
no Key Vault para o aplicativo de Serviço de Catálogo: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
Se você tiver configurado o logon único, use o seguinte comando para habilitar uma Identidade Atribuída ao Sistema para o aplicativo do Serviço de Identidade:
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Se você configurou o logon único, use os seguintes comandos para definir uma política de acesso de
get list
no Key Vault para o aplicativo Serviço de Identidade: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
Atualizar aplicativos para carregar segredos Key Vault
Depois de conceder acesso a segredos de leitura de Key Vault, use as etapas a seguir para atualizar os aplicativos para usar os novos valores secretos em suas configurações.
Use o seguinte comando para recuperar o URI para Key Vault a ser usado na atualização de aplicativos:
export KEYVAULT_URI=$(az keyvault show --name ${KEY_VAULT_NAME} --resource-group ${RESOURCE_GROUP} | jq -r '.properties.vaultUri')
Use o seguinte comando para recuperar a URL do Spring Cloud Gateway a ser usada na atualização de aplicativos:
export GATEWAY_URL=$(az spring gateway show \ --resource-group ${RESOURCE_GROUP} \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
Use o seguinte comando para remover a associação do Service Connector ao aplicativo Order Service e ao servidor flexível Banco de Dados do Azure para 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
Use o seguinte comando para atualizar o ambiente do Serviço de Pedido com o URI para acessar 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"
Use o seguinte comando para remover a associação do Service Connector ao aplicativo Serviço de Catálogo e ao servidor flexível Banco de Dados do Azure para 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
Use o seguinte comando para atualizar o ambiente e o padrão de configuração do Serviço de Catálogo para acessar 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"
Use o seguinte comando para remover a associação do Service Connector ao aplicativo Serviço de Carrinho e ao Cache do Azure para 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
Use o seguinte comando para atualizar o ambiente do Serviço de Carrinho para acessar o 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}"
Se você configurou o logon único, use o seguinte comando para atualizar o ambiente e o padrão de configuração do Serviço de Identidade para acessar o 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"
Use os seguintes comandos para recuperar a URL no 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}"
Você pode abrir a URL de saída em um navegador para explorar o aplicativo atualizado.
Limpar os recursos
Se planejar continuar trabalhando com os tutoriais e inícios rápidos subsequentes, deixe esses recursos onde estão. Quando não for mais necessário, exclua o grupo de recursos, que excluirá os recursos no grupo de recursos. Para excluir o grupo de recursos usando a CLI do Azure, use os seguintes comandos:
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."
Próximas etapas
Continue com qualquer um dos seguintes guias de início rápido opcionais: