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