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.
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.
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Tworzenie aplikacji z łącznością z usługami Azure AI
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
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 warstwyTextAnalytics
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
Skonfiguruj wpisy tajne usług Azure AI jako ustawienia
CS_ACCOUNT_NAME
aplikacji iCS_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"
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.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.
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.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
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"
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)
Wcześniej należy ustawić wpisy tajne jako ustawienia
CS_ACCOUNT_NAME
aplikacji iCS_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)"
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ę.