練習 - 從 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-cloud app identity assign \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application

您也需要使用兩個環境變數來設定 Spring Boot 應用程式。 第一個變數是啟用 Azure Key Vault。 第二個變數是為您的 Azure Key Vault 執行個體提供 URL。

az spring-cloud 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-cloud 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 之祕密的權限。