Упражнение. Защита приложения Java с точки зрения ИТ-оператора

Завершено

В этом уроке вы используете Azure CLI для предоставления приложению Java доступа к секретам Azure Key Vault.

Вы играете роль ИТ-оператора, который управляет этими секретами и предоставляет им доступ.

Хранение секретов в Azure Key Vault

В вашем приложении имелось два секрета для хранения:

  • ${azureDatabaseName} — имя базы данных PostgreSQL, которое было настроено ранее в переменной среды AZ_DATABASE_NAME. Введите echo $AZ_DATABASE_NAME, чтобы отобразить его.
  • ${azureDatabaseUsername} — имя пользователя базы данных, которое было настроено ранее в переменной среды AZ_DATABASE_USERNAME. Введите echo $AZ_DATABASE_USERNAME, чтобы отобразить его.
  • ${azureDatabasePassword} — пароль базы данных, который был настроен ранее в переменной среды AZ_DATABASE_PASSWORD. Введите echo $AZ_DATABASE_PASSWORD, чтобы отобразить его.

Давайте создадим экземпляр Azure Key Vault и сохраним эти секреты:

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}

Предоставление приложению доступ к Azure Key Vault

Чтобы получить доступ к Azure Key Vault, приложению Spring Boot сначала необходимо назначить удостоверение Azure.

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

Кроме того, необходимо настроить приложение Spring Boot с двумя переменными среды. Первая переменная — для включения Azure Key Vault. Вторая переменная — для предоставления URL-адреса экземпляру Azure Key Vault. Эта команда может занять несколько минут.

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/

Затем необходимо предоставить приложению доступ к экземпляру 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

Теперь у приложения имеются разрешения на доступ к секретам, хранящимся в Azure Key Vault.