练习 - 从 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 中的机密。