练习 - 从 IT 操作员的角度保护 Java 应用程序
在此单元中,你将使用 Azure CLI 向 Java 应用程序授予对 Azure Key Vault 机密的访问权限。
你具有 IT 操作员的角色,该角色管理这些机密并授予访问这些机密的权限。
将机密存储到 Azure Key Vault
在你的应用程序中,你有两个要存储的机密:
${azureDatabaseName}
是之前在AZ_DATABASE_NAME
环境变量中配置的 PostgreSQL 数据库的名称。 键入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 中的机密。