Ćwiczenie — zabezpieczanie aplikacji Java z perspektywy operatora IT

Ukończone

W tej lekcji użyjesz interfejsu wiersza polecenia platformy Azure, aby udzielić aplikacji Java dostępu do wpisów tajnych usługi Azure Key Vault.

Odgrywasz rolę operatora IT, który zarządza tymi wpisami tajnymi i udziela im dostępu.

Przechowywanie wpisów tajnych w usłudze Azure Key Vault

W aplikacji masz dwa wpisy tajne do przechowywania:

  • ${azureDatabaseName} to nazwa bazy danych PostgreSQL, która została skonfigurowana wcześniej w zmiennej środowiskowej AZ_DATABASE_NAME . Wpisz echo $AZ_DATABASE_NAME , aby go wyświetlić.
  • ${azureDatabaseUsername} to nazwa nazwy użytkownika bazy danych, która została skonfigurowana wcześniej w zmiennej środowiskowej AZ_DATABASE_USERNAME . Wpisz echo $AZ_DATABASE_USERNAME , aby go wyświetlić.
  • ${azureDatabasePassword} to nazwa hasła bazy danych, która została skonfigurowana wcześniej w zmiennej środowiskowej AZ_DATABASE_PASSWORD . Wpisz echo $AZ_DATABASE_PASSWORD , aby go wyświetlić.

Utwórzmy wystąpienie usługi Azure Key Vault i zapiszmy w nim te wpisy tajne:

AZ_KEY_VAULT_NAME=kv-${AZ_RESOURCE_GROUP}

az keyvault create \
    --name $AZ_KEY_VAULT_NAME \
    --resource-group $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION

az keyvault secret set \
    --vault-name $AZ_KEY_VAULT_NAME \
    --name azureDatabaseName \
    --value ${AZ_DATABASE_NAME}

az keyvault secret set \
    --vault-name $AZ_KEY_VAULT_NAME \
    --name azureDatabaseUsername \
    --value ${AZ_DATABASE_USERNAME}

az keyvault secret set \
    --vault-name $AZ_KEY_VAULT_NAME \
    --name azureDatabasePassword \
    --value ${AZ_DATABASE_PASSWORD}

Udzielanie aplikacji dostępu do usługi Azure Key Vault

Aby uzyskać dostęp do usługi Azure Key Vault, aplikacja Spring Boot musi najpierw mieć przypisaną tożsamość platformy Azure.

az spring app identity assign \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --system-assigned

Należy również skonfigurować aplikację Spring Boot z dwiema zmiennymi środowiskowymi. Pierwszą zmienną jest włączenie usługi Azure Key Vault. Druga zmienna to nadanie adresu URL wystąpieniu usługi Azure Key Vault. Uruchomienie tego polecenia może potrwać kilka minut.

az spring app update \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --env \
   AZURE_KEYVAULT_ENABLED=true \
   AZURE_KEYVAULT_URI=https://$AZ_KEY_VAULT_NAME.vault.azure.net/

Następnie należy udzielić aplikacji dostępu do wystąpienia usługi Azure Key Vault.

AZ_SPRING_CLOUD_PRINCIPAL_ID=$(az spring app identity show --resource-group $AZ_RESOURCE_GROUP --service $AZ_SPRING_CLOUD --name application | jq --raw-output '.principalId')

az keyvault set-policy \
    --name $AZ_KEY_VAULT_NAME \
    --resource-group $AZ_RESOURCE_GROUP \
    --object-id $AZ_SPRING_CLOUD_PRINCIPAL_ID \
    --secret-permissions get list

Aplikacja powinna teraz mieć uprawnienia dostępu do wpisów tajnych przechowywanych w usłudze Azure Key Vault.