Udostępnij za pośrednictwem


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

usługa aplikacja systemu Azure może używać tożsamości zarządzanych do nawiązywania połączeń z usługami zaplecza bez parametry połączenia, co eliminuje wpisy tajne połączeń do zarządzania i zabezpieczania łączności zaplecza w środowisku produkcyjnym. W przypadku usług zaplecza, które nie obsługują tożsamości zarządzanych i nadal wymagają wpisów tajnych połączenia, możesz użyć usługi Key Vault do zarządzania wpisami tajnymi połączeń. W tym samouczku użyto usług Azure AI jako przykładu, aby pokazać, jak to działa w praktyce. Po zakończeniu masz aplikację, która wykonuje programowe wywołania usług Azure AI bez przechowywania wpisów tajnych połączenia w usłudze App Service.

Napiwek

Usługi azure AI obsługują uwierzytelnianie za pośrednictwem tożsamości zarządzanych, ale w tym samouczku użyto uwierzytelniania 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 Services.

Diagram architektury dla scenariusza samouczka.

Z tą architekturą:

  • Łączność z usługą Key Vault jest zabezpieczona przez tożsamości zarządzane
  • Usługa App Service uzyskuje dostęp do wpisów tajnych przy użyciu odwołań usługi Key Vault jako ustawień aplikacji.
  • Dostęp do magazynu kluczy jest ograniczony do aplikacji. Współautorzy aplikacji, tacy jak administratorzy, mogą mieć pełną kontrolę nad zasobami usługi App Service i jednocześnie nie mają dostępu do wpisów tajnych usługi Key Vault.
  • Jeśli kod aplikacji uzyskuje już dostęp do wpisów tajnych połączenia za pomocą ustawień aplikacji, nie jest wymagana żadna zmiana.

Czego nauczysz się:

  • Włączanie tożsamości zarządzanych
  • Nawiązywanie połączenia z usługą Key Vault przy użyciu tożsamości zarządzanych
  • Używanie odwołań do usługi Key Vault
  • Uzyskiwanie dostępu do usług azure AI

Wymagania wstępne

Przygotowanie środowiska do interfejsu wiersza polecenia platformy Azure.

Tworzenie aplikacji z łącznością z usługami Azure AI

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

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Utwórz zasób usług Azure AI. Zastąp <ciąg cs-resource-name> unikatową wybraną nazwą.

    # 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
    

    Uwaga

    --sku F0 Tworzy zasób usług Azure AI w warstwie Bezpłatna. Każda subskrypcja jest ograniczona do limitu przydziału jednego zasobu warstwy TextAnalytics bezpłatna. Jeśli już przekroczono limit przydziału, użyj --sku S zamiast tego.

Konfigurowanie aplikacji PHP

Sklonuj przykładowe repozytorium lokalnie i wdróż przykładową aplikację w usłudze App Service. Zastąp <ciąg 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/php
zip default.zip index.php

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

az appservice plan create --resource-group $groupName --name $appName --sku FREE --location $region
az webapp create --resource-group $groupName --plan $appName --name $appName
az webapp deploy --resource-group $groupName --name $appName --src-path ./default.zip

Konfigurowanie wpisów tajnych jako ustawień aplikacji

  1. Skonfiguruj wpisy tajne usług Azure AI jako ustawienia CS_ACCOUNT_NAME aplikacji i 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. W przeglądarce przejdź do aplikacji wdrażania pod adresem <app-name>.azurewebsites.net i wypróbuj narzędzie do wykrywania języka z ciągami w różnych językach.

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

    Jeśli spojrzysz na kod aplikacji, możesz zauważyć dane wyjściowe debugowania dla wyników wykrywania w tym samym kolorze czcionki co tło. Możesz go zobaczyć, próbując wyróżnić biały znak bezpośrednio poniżej wyniku.

Zabezpieczanie łączności zaplecza

W tej chwili wpisy tajne połączenia są przechowywane jako ustawienia aplikacji w aplikacji usługi App Service. Takie podejście już zabezpiecza wpisy tajne połączenia z bazy kodu aplikacji. Jednak każdy współautor, który może zarządzać twoją aplikacją, może również zobaczyć ustawienia aplikacji. W tym kroku przeniesiesz wpisy tajne połączenia do magazynu kluczy i zablokujesz dostęp, aby zarządzać nim tylko wtedy, gdy tylko aplikacja usługi App Service będzie mogła ją odczytać przy użyciu tożsamości zarządzanej.

  1. Tworzenie magazynu kluczy. Zastąp <ciąg vault-name> unikatową nazwą.

    # 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 ustawia kontrolę dostępu opartą na rolach (RBAC) platformy Azure jako model uprawnień. To ustawienie domyślnie unieważnia wszystkie uprawnienia zasad dostępu.

  2. Nadaj sobie rolę RBAC oficera wpisów tajnych usługi Key Vault dla magazynu.

    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ą przypisaną przez system dla aplikacji i nadaj jej rolę RBAC użytkownika wpisów tajnych usługi Key Vault dla magazynu.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Dodaj nazwę zasobu usługi Azure AI 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 należy ustawić wpisy tajne jako ustawienia CS_ACCOUNT_NAME aplikacji i CS_ACCOUNT_KEY w aplikacji. Teraz ustaw je jako odwołania do magazynu kluczy.

    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 przejdź ponownie.<app-name>.azurewebsites.net Jeśli otrzymasz wyniki wykrywania, połączysz się z punktem końcowym usług Azure AI za pomocą odwołań do magazynu kluczy.

Gratulacje. Twoja aplikacja łączy się teraz z usługami azure AI przy użyciu wpisów tajnych przechowywanych w magazynie kluczy bez żadnych zmian w kodzie aplikacji.

Czyszczenie zasobów

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

az group delete --name $groupName

Wykonanie tego polecenia może potrwać około minutę.

Następne kroki