Samouczek: zabezpieczanie połączenia z usługą Cognitive Service z poziomu usługi App Service w języku JavaScript przy użyciu Key Vault

Usługa Azure App Service może używać tożsamości zarządzanych do łączenia się z usługami zaplecza bez parametrów połączenia. Takie podejście eliminuje konieczność zarządzania tajnymi danymi połączeń i utrzymuje bezpieczeństwo łączności zaplecza w środowisku produkcyjnym. Po zakończeniu będziesz mieć aplikację, która wykonuje wywołania programistyczne do narzędzi Foundry Tools bez przechowywania danych uwierzytelniających połączenia w usłudze App Service.

W przypadku usług zaplecza, które nie obsługują tożsamości zarządzanych i nadal wymagają sekretów połączeń, możesz zarządzać sekretami połączeń za pomocą usługi Azure Key Vault. W tym samouczku użyto narzędzi Foundry Jako przykładu. Po zakończeniu będziesz mieć aplikację, która wykonuje wywołania programistyczne do narzędzi Foundry Tools bez przechowywania tajnych danych połączeń w usłudze App Service.

Wskazówka

Narzędzia Foundry obsługują uwierzytelnianie za pośrednictwem tożsamości zarządzanych. Ten samouczek wykorzystuje uwierzytelnianie przy użyciu klucza subskrypcji, aby pokazać, jak można nawiązać połączenie z usługą platformy Azure, która nie obsługuje tożsamości zarządzanych z usługi App Service.

Diagram przedstawiający użytkownika łączącego się z usługą, która z kolei łączy się z magazynem kluczy w celu uzyskania dostępu do usług Cognitive Services.

W tej architekturze:

  • Tożsamości zarządzane zapewniają bezpieczne połączenie ze skarbcem kluczy.
  • Usługa App Service uzyskuje dostęp do sekretów przy użyciu odwołań do Key Vault jako ustawień aplikacji.
  • Dostęp do magazynu kluczy jest ograniczony do aplikacji. Kontrybutorzy aplikacji, tacy jak administratorzy, mogą mieć pełną kontrolę nad zasobami App Service, a jednocześnie nie mieć dostępu do sekretów Key Vault.
  • Jeśli kod aplikacji już uzyskuje dostęp do tajnych danych połączenia za pomocą ustawień w aplikacji, nie jest wymagana żadna zmiana.

Z tego samouczka dowiesz się:

  • Włącz tożsamości zarządzane
  • Nawiązywanie połączenia z usługą Key Vault przy użyciu tożsamości zarządzanych
  • Używanie odwołań Key Vault
  • Narzędzia programu Access Foundry

Wymagania wstępne

Przygotuj środowisko do Azure CLI.

Tworzenie aplikacji z łącznością z narzędziami Foundry

  1. Utwórz grupę zasobów, aby zawierała wszystkie zasoby:

    # Save the resource group name as a variable for convenience
    groupName=myKVResourceGroup
    region=canadacentral
    
    az group create --name $groupName --location $region
    
  2. Utwórz zasób Foundry Tools. Zastąp <cs-resource-name> unikalną nazwą.

    # Save the resource name as a 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
    

    Uwaga

    --sku F0 Tworzy zasób narzędzi Foundry w darmowej warstwie. Każda subskrypcja jest ograniczona do jednego zasobu w warstwie TextAnalytics bezpłatnej. Jeśli limit przydziału został już użyty, użyj --sku S zamiast tego.

Konfigurowanie aplikacji JavaScript

Sklonuj przykładowe repozytorium lokalnie i wdróż przykładową aplikację w usłudze App Service. Zastąp <app-name> unikatową nazwą.

# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/javascript
zip -r 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:24-lts"
az webapp config appsettings set --resource-group $groupName --name $appName --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
az webapp deploy --resource-group $groupName --name $appName --src-path ./default.zip

Poprzednie polecenia:

  • Tworzenie planu usługi App Service dla systemu Linux
  • Tworzenie aplikacji internetowej dla Node.js 24 LTS
  • Konfigurowanie aplikacji internetowej w celu zainstalowania pakietów npm we wdrożeniu
  • Przekaż plik zip i zainstaluj pakiety npm

Konfigurowanie sekretów jako ustawień aplikacji

  1. Skonfiguruj tajne klucze narzędzi Foundry jako ustawienia CS_ACCOUNT_NAME aplikacji i CS_ACCOUNT_KEY.

    # Get the subscription key for the Foundry Tools 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. W przeglądarce przejdź do wdrożonej aplikacji pod adresem <app-name>.azurewebsites.net. Wypróbuj narzędzie do wykrywania języka, wprowadzając ciągi w różnych językach.

    Zrzut ekranu przedstawiający aplikację do wykrywania języka wdrożoną w usłudze App Service.

    Jeśli spojrzysz na kod aplikacji, dane wyjściowe debugowania dla wyników wykrywania mogą być w tym samym kolorze czcionki co tło. Dane wyjściowe można wyświetlić, wyróżniając białe znaki bezpośrednio poniżej wyniku.

Zabezpieczanie łączności zaplecza

Tajne dane połączeń są teraz przechowywane jako ustawienia aplikacji w usłudze App Service. Takie podejście już zabezpiecza tajne dane połączeń przed dostępem z podstawowego kodu aplikacji. Jednak każdy współautor, który może zarządzać twoją aplikacją, może również zobaczyć ustawienia aplikacji. W tej sekcji przeniesiesz tajne dane połączenia do magazynu kluczy. Dostęp można zablokować, aby tylko Ty mógł nim zarządzać i tylko aplikacja usługi App Service mogła go odczytać, używając swojej tożsamości zarządzanej.

  1. Utwórz magazyn kluczy. Zastąp <tekst vault-name> unikatową nazwą.

    # Save the key vault name as a variable for convenience
    vaultName=<vault-name>
    
    az keyvault create --resource-group $groupName --name $vaultName --location $region --sku standard --enable-rbac-authorization
    

    Parametr --enable-rbac-authorizationustawia kontrolę dostępu Azure opartą na rolach (RBAC) jako model uprawnień. To ustawienie domyślnie unieważnia wszystkie uprawnienia zasad dostępu.

  2. Przyznaj sobie rolę RBAC Key Vault Secrets Officer dla skarbca.

    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. Włącz tożsamość zarządzaną systemowo dla aplikacji i nadaj jej rolę RBAC Key Vault Secrets User dla repozytorium.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Dodaj nazwę zasobu narzędzi Foundry Tools i klucz subskrypcji jako wpisy tajne do magazynu i zapisz ich identyfikatory jako zmienne środowiskowe w następnym kroku.

    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. Wcześniej ustawiłeś sekrety jako ustawienia CS_ACCOUNT_NAME i CS_ACCOUNT_KEY w swojej aplikacji. Teraz ustaw je jako referencje magazynu kluczy zamiast.

    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. W przeglądarce ponownie przejdź do <app-name>.azurewebsites.net. Jeśli otrzymasz wyniki wykrywania, połączysz się z punktem końcowym narzędzi Foundry Tools przy użyciu odwołań do magazynu kluczy.

Gratulacje, twoja aplikacja teraz łączy się z narzędziami Foundry, które korzystają z sekretów przechowywanych w twoim magazynie kluczy, i nie musiałeś wprowadzać żadnych zmian w kodzie aplikacji.

Czyszczenie zasobów

W poprzednich krokach utworzono zasoby Azure w grupie zasobów. Jeśli nie oczekujesz, że te zasoby będą potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w Cloud Shell:

az group delete --name $groupName

Uruchomienie tego polecenia może potrwać minutę.