演習 - IT オペレーターの観点から Java アプリケーションをセキュリティで保護する

完了

このユニットでは、Azure CLI を使用して、Java アプリケーションに Azure Key Vault シークレットへのアクセス権を付与します。

あなたは、それらのシークレットを管理し、それらへのアクセス権を付与する IT オペレーターの役割を担います。

シークレットを Azure Key Vault に格納する

アプリケーションには、以下を格納するための 2 つのシークレットがありました。

  • ${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 ID を割り当てる必要があります。

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

また、2 つの環境変数を使用して Spring Boot アプリケーションを構成する必要もあります。 最初の変数では、Azure Key Vault を有効にします。 2 つ目の変数では、Azure Key Vault インスタンスへの URL を指定します。 このコマンドが完了までに数分かかる場合があります。

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 に格納されているシークレットにアクセスするためのアクセス許可がアプリケーションに与えられるはずです。