Självstudie: Säker Cognitive Service-anslutning från PHP App Service med Key Vault
Azure App Service kan använda hanterade identiteter för att ansluta till serverdelstjänster utan anslutningssträng, vilket eliminerar anslutningshemligheter för att hantera och håller serverdelsanslutningen säker i en produktionsmiljö. För serverdelstjänster som inte stöder hanterade identiteter och fortfarande kräver anslutningshemligheter kan du använda Key Vault för att hantera anslutningshemligheter. I den här självstudien används Azure AI-tjänster som ett exempel för att visa hur det går till i praktiken. När du är klar har du en app som gör programmatiska anrop till Azure AI-tjänster, utan att lagra några anslutningshemligheter i App Service.
Dricks
Azure AI-tjänster stöder autentisering via hanterade identiteter, men i den här självstudien används prenumerationsnyckelautentisering för att visa hur du kan ansluta till en Azure-tjänst som inte stöder hanterade identiteter från App Services.
Med den här arkitekturen:
- Anslutningen till Key Vault skyddas av hanterade identiteter
- App Service kommer åt hemligheterna med key vault-referenser som appinställningar.
- Åtkomsten till nyckelvalvet är begränsad till appen. Appdeltagare, till exempel administratörer, kan ha fullständig kontroll över App Service-resurserna och har samtidigt ingen åtkomst till Key Vault-hemligheterna.
- Om programkoden redan har åtkomst till anslutningshemligheter med appinställningar krävs ingen ändring.
Vad du kommer att lära dig:
- Aktivera hanterade identiteter
- Använda hanterade identiteter för att ansluta till Key Vault
- Använda Key Vault-referenser
- Få åtkomst till Azure AI-tjänster
Förutsättningar
Förbered din miljö för Azure CLI.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Skapa en app med anslutning till Azure AI-tjänster
Skapa en resursgrupp som ska innehålla alla dina resurser:
# Save resource group name as variable for convenience groupName=myKVResourceGroup region=westeurope az group create --name $groupName --location $region
Skapa en Azure AI-tjänstresurs. Ersätt <cs-resource-name> med ett unikt namn som du väljer.
# Save resource name as variable for convenience. csResourceName=<cs-resource-name> az cognitiveservices account create --resource-group $groupName --name $csResourceName --location $region --kind TextAnalytics --sku F0 --custom-domain $csResourceName
Kommentar
--sku F0
skapar en azure AI-tjänstresurs på den kostnadsfria nivån. Varje prenumeration är begränsad till en kvot för en resurs på den kostnadsfria nivånTextAnalytics
. Om du redan överskrider kvoten använder du--sku S
i stället.
Konfigurera PHP-app
Klona exempellagringsplatsen lokalt och distribuera exempelprogrammet till App Service. Ersätt <appnamn> med ett unikt namn.
# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/php
zip default.zip index.php
# Save app name as variable for convenience
appName=<app-name>
az appservice plan create --resource-group $groupName --name $appName --sku FREE --location $region
az webapp create --resource-group $groupName --plan $appName --name $appName
az webapp deploy --resource-group $groupName --name $appName --src-path ./default.zip
Konfigurera hemligheter som appinställningar
Konfigurera Azure AI-tjänsternas hemligheter som appinställningar
CS_ACCOUNT_NAME
ochCS_ACCOUNT_KEY
.# Get subscription key for Cognitive Services resource csKey1=$(az cognitiveservices account keys list --resource-group $groupName --name $csResourceName --query key1 --output tsv) az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="$csResourceName" CS_ACCOUNT_KEY="$csKey1"
I webbläsaren navigerar du till din distribuerade app på
<app-name>.azurewebsites.net
och provar språkdetektorn med strängar på olika språk.Om du tittar på programkoden kanske du ser felsökningsutdata för identifieringen i samma teckenfärg som bakgrunden. Du kan se det genom att försöka markera det tomma utrymmet direkt under resultatet.
Säker serverdelsanslutning
För närvarande lagras anslutningshemligheter som appinställningar i din App Service-app. Den här metoden skyddar redan anslutningshemligheter från programkodbasen. Alla deltagare som kan hantera din app kan dock också se appinställningarna. I det här steget flyttar du anslutningshemligheterna till ett nyckelvalv och låser åtkomsten så att endast du kan hantera den och endast App Service-appen kan läsa den med dess hanterade identitet.
Skapa ett nyckelvalv. Ersätt <valvnamn> med ett unikt namn.
# Save app name as variable for convenience vaultName=<vault-name> az keyvault create --resource-group $groupName --name $vaultName --location $region --sku standard --enable-rbac-authorization
Parametern
--enable-rbac-authorization
anger rollbaserad åtkomstkontroll i Azure (RBAC) som behörighetsmodell. Den här inställningen ogiltigförklarar som standard alla behörigheter för åtkomstprinciper.Ge dig själv RBAC-rollen Key Vault Secrets Officer för valvet.
vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv) myId=$(az ad signed-in-user show --query id --output tsv) az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
Aktivera den systemtilldelade hanterade identiteten för din app och ge den rollen Key Vault Secrets User RBAC för valvet.
az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role "Key Vault Secrets User"
Lägg till resursnamnet och prenumerationsnyckeln för Azure AI-tjänster som hemligheter i valvet och spara deras ID:n som miljövariabler i nästa steg.
csResourceKVUri=$(az keyvault secret set --vault-name $vaultName --name csresource --value $csResourceName --query id --output tsv) csKeyKVUri=$(az keyvault secret set --vault-name $vaultName --name cskey --value $csKey1 --query id --output tsv)
Tidigare har du angett hemligheterna som appinställningar
CS_ACCOUNT_NAME
ochCS_ACCOUNT_KEY
i din app. Ange dem nu som nyckelvalvsreferenser i stället.az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
I webbläsaren navigerar du till
<app-name>.azurewebsites.net
igen. Om du får tillbaka identifieringsresultatet ansluter du till Azure AI-tjänsternas slutpunkt med key vault-referenser.
Grattis, appen ansluter nu till Azure AI-tjänster med hemligheter som finns i nyckelvalvet, utan några ändringar i programkoden.
Rensa resurser
I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:
az group delete --name $groupName
Det kan några minuter att köra kommandot.