Kurz: Zabezpečení připojení cognitive service z .NET 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 zajišťuje zabezpečení připojení back-endu 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. Tento kurz používá služby Azure AI jako příklad, který vám ukáže, jak se to dělá v praxi. Po dokončení 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 připojit ke službě Azure, která nepodporuje spravované identity z App Services.

Diagram architektury pro scénář kurzu

S touto architekturou:

  • Připojení k Key Vault je zabezpečené spravovanými identitami
  • App Service přistupuje k tajným kódům pomocí Key Vault odkazů jako nastavení aplikace.
  • Přístup k trezoru klíčů je omezený na aplikaci. Přispěvatelé aplikací, jako jsou 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 vaší aplikace přistupuje k tajným kódům připojení pomocí nastavení aplikace, není potřeba nic měnit.

Co se naučíte:

  • Povolit spravované identity
  • Použití spravovaných identit pro připojení k Key Vault
  • Použití odkazů na službu Key Vault
  • Přístup ke službám Azure AI

Požadavky

Připravte své prostředí pro 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 Spuštění 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

  1. 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
    
  2. 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žeb Azure AI úrovně Free. Každé předplatné je omezené kvótou jednoho prostředku úrovně TextAnalytics Free. Pokud už kvótu překročili, použijte --sku S místo toho příkaz .

Konfigurace aplikace .NET

Naklonujte ukázkové úložiště místně a nasaďte ukázkovou aplikaci do App Service. Nahraďte <app-name> jedinečným názvem.

# Save app name as variable for convenience
appName=<app-name>

# Clone sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/dotnet

az webapp up --sku F1 --resource-group $groupName --name $appName --plan $appName --location $region

Konfigurace tajných kódů jako nastavení aplikace

  1. Nakonfigurujte tajné kódy služeb Azure AI jako nastavení CS_ACCOUNT_NAME aplikace a CS_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"
    
  2. V prohlížeči přejděte na adresu deploy app <app-name>.azurewebsites.net a vyzkoušejte detektor jazyka s řetězci v různých jazycích.

    Snímek obrazovky znázorňující nasazenou aplikaci detektoru jazyka v App Service

    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í. Můžete to zobrazit 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ž zajišťuje zabezpečení tajných kódů připojení z základu kódu vaší aplikace. Nastavení aplikace ale může zobrazit také každý přispěvatel, který může 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 aby ho pomocí své spravované identity mohl číst jenom App Service aplikace.

  1. Vytvořte trezor klíčů. Nahraďte <vault-name> 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-authorizationnastaví řízení přístupu na základě role v Azure (RBAC) jako model oprávnění. Toto nastavení ve výchozím nastavení zruší platnost všech oprávnění zásad přístupu.

  2. Přidělte si pro trezor roli RBAC Key Vault Secrets Officer.

    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
    
  3. Povolte spravovanou identitu přiřazenou systémem pro vaši aplikaci a přidělte jí roli RBAC uživatele Key Vault tajných kódů pro trezor.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Přidejte do trezoru název prostředku a klíč předplatného služeb Azure AI jako tajné kódy 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)
    
  5. Dříve jste tajné kódy nastavili jako nastavení CS_ACCOUNT_NAME aplikace a CS_ACCOUNT_KEY ve své aplikaci. Teď je místo toho nastavte jako odkazy trezoru 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)"
    
  6. V prohlížeči znovu přejděte na <app-name>.azurewebsites.net adresu . Pokud se vám vrátí výsledky detekce, připojujete se ke koncovému bodu služeb Azure AI pomocí odkazů 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íčů, a to 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.

Další kroky