Kurz: Zabezpečení připojení ke službě Cognitive Service z javascriptového App Service pomocí Key Vault
Azure App Service se můžou pomocí spravovaných identit připojit k back-endovým službám bez připojovacího řetězce, což eliminuje tajné kódy připojení ke správě a udržuje připojení back-endu zabezpečené v produkčním prostředí. U back-endových služeb, které nepodporují spravované identity a stále vyžadují tajné kódy připojení, můžete ke správě tajných kódů připojení použít Key Vault. V tomto kurzu se jako příklad používají služby Azure AI, které vám ukážou, jak se to dělá v praxi. Až budete hotovi, budete mít aplikaci, která programově volá služby Azure AI, aniž by do App Service ukládal tajné kódy připojení.
Tip
Služby Azure AI podporují ověřování prostřednictvím spravovaných identit, ale tento kurz používá ověřování pomocí klíče předplatného k předvedení toho, jak se můžete připojit ke službě Azure, která nepodporuje spravované identity ze služeb App Services.
S touto architekturou:
- Připojení k Key Vault je zabezpečené spravovanými identitami
- App Service k tajným kódům přistupuje pomocí Key Vault odkazů jako nastavení aplikace.
- Přístup k trezoru klíčů je omezený na aplikaci. Přispěvatelé aplikací, například správci, můžou mít úplnou kontrolu nad App Service prostředky a zároveň nemají přístup k Key Vault tajným kódům.
- Pokud už kód aplikace přistupuje k tajným kódům připojení pomocí nastavení aplikace, nevyžaduje se žádná změna.
Co se naučíte:
- Povolit spravované identity
- Připojení k Key Vault pomocí spravovaných identit
- Použití odkazů na službu Key Vault
- Přístup ke službám Azure AI
Požadavky
Připravte své prostředí na Azure CLI.
Použijte prostředí Bash v Azure Cloud Shell. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shell.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Vytvoření aplikace s připojením ke službám Azure AI
Vytvořte skupinu prostředků, která bude obsahovat všechny vaše prostředky:
# Save resource group name as variable for convenience groupName=myKVResourceGroup region=westeurope az group create --name $groupName --location $region
Vytvořte prostředek služeb Azure AI. Nahraďte <cs-resource-name> jedinečným názvem podle vašeho výběru.
# 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
Poznámka
--sku F0
vytvoří prostředek služby Azure AI úrovně Free. Každé předplatné je omezené na kvótu jednoho prostředku úrovněTextAnalytics
Free. Pokud už kvótu překročili, použijte--sku S
místo toho.
Konfigurace javascriptové aplikace
Naklonujte ukázkové úložiště místně a nasaďte ukázkovou aplikaci do App Service. Nahraďte <název> aplikace jedinečným názvem.
# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/javascript
zip default.zip *.*
# Save app name as variable for convenience
appName=<app-name>
az appservice plan create --resource-group $groupName --name $appName --sku FREE --location $region --is-linux
az webapp create --resource-group $groupName --plan $appName --name $appName --runtime "node|14-lts"
az webapp config appsettings set --resource-group $groupName --name $appName --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
az webapp deployment source config-zip --resource-group $groupName --name $appName --src ./default.zip
Předchozí příkazy:
- Vytvoření plánu služby App Service pro Linux
- Vytvoření webové aplikace pro Node.js 14 LTS
- Konfigurace webové aplikace pro instalaci balíčků npm při nasazení
- Nahrajte soubor zip a nainstalujte balíčky npm.
Konfigurace tajných kódů jako nastavení aplikace
Nakonfigurujte tajné kódy služeb Azure AI jako nastavení
CS_ACCOUNT_NAME
aplikace aCS_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"
V prohlížeči přejděte na adresu nasazení aplikace
<app-name>.azurewebsites.net
a vyzkoušejte detektor jazyka s řetězci v různých jazycích.Pokud se podíváte na kód aplikace, můžete si všimnout, že výstup ladění pro detekci má stejnou barvu písma jako pozadí. Uvidíte ho tak, že se pokusíte zvýraznit prázdné znaky přímo pod výsledkem.
Zabezpečené připojení back-endu
V současné době se tajné kódy připojení ukládají jako nastavení aplikace ve vaší App Service aplikaci. Tento přístup už zabezpečuje tajné kódy připojení z kódu aplikace. Nastavení aplikace ale uvidí každý přispěvatel, který může vaši aplikaci spravovat. V tomto kroku přesunete tajné kódy připojení do trezoru klíčů a uzamknete přístup tak, abyste ho mohli spravovat jenom vy a jenom aplikace App Service ho může číst pomocí své spravované identity.
Vytvořte trezor klíčů. Nahraďte <název> trezoru jedinečným názvem.
# 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
Parametr
--enable-rbac-authorization
nastaví řízení přístupu na základě role (RBAC) Azure jako model oprávnění. Toto nastavení ve výchozím nastavení zneplatní všechna oprávnění zásad přístupu.Dejte si roli RBAC Key Vault Tajné kódy pro trezor.
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
Povolte spravovanou identitu přiřazenou systémem pro vaši aplikaci a přidělte jí roli Key Vault Tajné kódy uživatele RBAC pro trezor.
az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role "Key Vault Secrets User"
Přidejte název prostředku služeb Azure AI a klíč předplatného jako tajné kódy do trezoru a jejich ID uložte jako proměnné prostředí pro další krok.
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)
Dříve jste tajné kódy nastavili jako nastavení
CS_ACCOUNT_NAME
aplikace aCS_ACCOUNT_KEY
v aplikaci. Teď je nastavte jako odkazy na trezor klíčů .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)"
V prohlížeči znovu přejděte na
<app-name>.azurewebsites.net
. Pokud se vám vrátí výsledky detekce, připojujete se ke koncovému bodu služeb Azure AI s odkazy na trezor klíčů.
Blahopřejeme, vaše aplikace se teď připojuje ke službám Azure AI pomocí tajných kódů uložených ve vašem trezoru klíčů bez jakýchkoli změn kódu aplikace.
Vyčištění prostředků
V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:
az group delete --name $groupName
Spuštění tohoto příkazu může trvat přibližně minut.