Samouczek: połączenie narzędzi Secure Foundry Tools z usługi App Service platformy .NET przy użyciu usługi 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 narzędzi Foundry Tools bez przechowywania tajnych danych 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. W tym samouczku uwierzytelnianie klucza subskrypcji pokazuje, 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 tajnych danych, korzystając z 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 usługi App Service i jednocześnie nie mają dostępu do sekretów usługi 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 .NET

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

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

# Clone the 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

Konfigurowanie tajnych danych 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 wdrożoną aplikację wykrywania języka 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 informacje dotyczące połączenia są teraz przechowywane jako ustawienia aplikacji w aplikacji 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ć w taki sposób, że tylko Ty możesz nim zarządzać, a tylko aplikacja App Service może mieć do niego dostęp, 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ę.