Oktatóanyag: A Cognitive Service-kapcsolat biztonságossá helyezése a .NET-App Service-ből a Key Vault használatával

Azure App Servicea felügyelt identitásokkal kapcsolati sztring nélkül csatlakozhat a háttérszolgáltatásokhoz, ami kiküszöböli a kapcsolati titkos kódokat a háttérkapcsolatok kezeléséhez és védelméhez éles környezetben. Az olyan háttérszolgáltatások esetében, amelyek nem támogatják a felügyelt identitásokat, és továbbra is kapcsolati titkos kódokat igényelnek, a Key Vault használatával kezelheti a kapcsolati titkos kulcsokat. Ez az oktatóanyag a Cognitive Servicest használja példaként, hogy bemutassuk, hogyan működik a gyakorlatban. Ha végzett, olyan alkalmazással rendelkezik, amely programozott hívásokat indít a Cognitive Servicesbe anélkül, hogy a kapcsolati titkos kódokat App Service tárolná.

Tipp

Az Azure Cognitive Services támogatja a felügyelt identitásokon keresztüli hitelesítést, de ez az oktatóanyag az előfizetési kulcs hitelesítésével mutatja be, hogyan csatlakozhat olyan Azure-szolgáltatáshoz, amely nem támogatja az App Servicesből származó felügyelt identitásokat.

Architecture diagram for tutorial scenario.

Ezzel az architektúrával:

  • A Key Vault való csatlakozást felügyelt identitások védik
  • App Service alkalmazásbeállításokként Key Vault hivatkozásokkal fér hozzá a titkos kódokhoz.
  • A kulcstartóhoz való hozzáférés az alkalmazásra korlátozódik. Előfordulhat, hogy az alkalmazás közreműködői, például a rendszergazdák teljes mértékben felügyelik a App Service erőforrásokat, és ugyanakkor nem férnek hozzá a Key Vault titkos kulcsokhoz.
  • Ha az alkalmazáskód már hozzáfér a kapcsolati titkos kódokhoz az alkalmazásbeállítások segítségével, nincs szükség módosításra.

A következőt fogja megtanulni:

  • Felügyelt identitások engedélyezése
  • Felügyelt identitások használata Key Vault
  • Key Vault-referenciák használata
  • Hozzáférés a Cognitive Serviceshez

Előfeltételek

A környezet előkészítése az Azure CLI-hez.

Alkalmazás létrehozása a Cognitive Serviceshez való csatlakozással

  1. Hozzon létre egy erőforráscsoportot, amely az összes erőforrást tartalmazza:

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Hozzon létre egy Cognitive Services-erőforrást. Cserélje le <a cs-erőforrás nevét> egy tetszőleges egyedi névre.

    # 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
    

    Megjegyzés

    --sku F0 egy ingyenes szintű Cognitive Services-erőforrást hoz létre. Minden előfizetés egy ingyenes szintű TextAnalytics erőforrás kvótájára korlátozódik. Ha már túllépte a kvótát, használja --sku S helyette.

.NET-alkalmazás konfigurálása

Klónozza a mintaadattárat helyileg, és helyezze üzembe a mintaalkalmazást a App Service. Cserélje le <az alkalmazás nevét> egy egyedi névre.

# 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

Titkos kódok konfigurálása alkalmazásbeállításokként

  1. A Cognitive Services titkos kulcsainak konfigurálása alkalmazásbeállításokként CS_ACCOUNT_NAME és 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. A böngészőben keresse meg az üzembe helyezési <app-name>.azurewebsites.net alkalmazást, és próbálja ki a nyelvérzékelőt különböző nyelveken lévő sztringekkel.

    Screenshot that shows deployed language detector app in App Service.

    Ha megtekinti az alkalmazás kódját, észreveheti, hogy az észlelés hibakeresési kimenete ugyanazzal a betűszínnel jelenik meg, mint a háttér. Ezt úgy tekintheti meg, hogy megpróbálja kiemelni a fehér területet közvetlenül az eredmény alatt.

Biztonságos háttérkapcsolat

A kapcsolati titkos kulcsok jelenleg alkalmazásbeállításokként vannak tárolva a App Service alkalmazásban. Ez a módszer már biztosítja a kapcsolati titkos kódokat az alkalmazás kódbázisából. Az alkalmazás kezelésére képes közreműködők azonban láthatják az alkalmazás beállításait is. Ebben a lépésben áthelyezi a kapcsolati titkos kulcsokat egy kulcstartóba, és zárolja a hozzáférést, hogy csak Ön felügyelhesse, és csak a App Service alkalmazás tudja olvasni a felügyelt identitásával.

  1. Kulcstartó létrehozása. Cserélje le <a tároló nevét> egy egyedi névre.

    # 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
    

    A --enable-rbac-authorization paraméter az Azure szerepköralapú hozzáférés-vezérlést (RBAC) állítja be engedélymodellként. Ez a beállítás alapértelmezés szerint érvényteleníti az összes hozzáférési szabályzat engedélyét.

  2. Adja meg magának a tároló Key Vault titkos kulcsokra vonatkozó RBAC-szerepkörét.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query objectId --output tsv)
    az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
    
  3. Engedélyezze a rendszer által hozzárendelt felügyelt identitást az alkalmazáshoz, és adja meg neki a tárolóhoz tartozó Key Vault Titkos kódok felhasználói RBAC-szerepkört.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Adja hozzá a Cognitive Services-erőforrásnevet és az előfizetési kulcsot titkos kulcsként a tárolóhoz, és a következő lépésben környezeti változóként mentse az azonosítókat.

    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. Korábban a titkos kódokat alkalmazásbeállításokként CS_ACCOUNT_NAME és CS_ACCOUNT_KEY az alkalmazásban állította be. Most állítsa be őket kulcstartó-referenciákként .

    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. A böngészőben lépjen újra.<app-name>.azurewebsites.net Ha ismét észlelési eredményeket kap, akkor kulcstartó-hivatkozásokkal csatlakozik a Cognitive Services-végponthoz.

Gratulálunk, az alkalmazás mostantól a kulcstartóban tárolt titkos kódokkal csatlakozik a Cognitive Serviceshez, az alkalmazás kódjában végzett módosítások nélkül.

Az erőforrások eltávolítása

Az előző lépésekben Azure-erőforrásokat hozott létre egy erőforráscsoportban. Ha várhatóan nem lesz szüksége ezekre az erőforrásokra a jövőben, törölje az erőforráscsoportot a következő parancs Cloud Shellben történő futtatásával:

az group delete --name $groupName

A parancs futtatása egy percig is eltarthat.

Következő lépések