Samouczek: zabezpieczanie połączenia usługi Cognitive Service z platformy .NET App Service przy użyciu Key Vault
Azure App Service mogą używać tożsamości zarządzanych do nawiązywania połączeń z usługami zaplecza bez parametrów połączenia, co eliminuje wpisy tajne połączeń w celu zarządzania łącznością zaplecza i zabezpieczania ich 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żna użyć 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 będziesz mieć aplikację, która wykonuje programowe wywołania usług Azure AI bez przechowywania wpisów tajnych połączenia wewnątrz App Service.
Porada
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 zademonstrować, jak można nawiązać połączenie z usługą platformy Azure, która nie obsługuje tożsamości zarządzanych z usług App Services.
Z tą architekturą:
- Łączność z Key Vault jest zabezpieczona przez tożsamości zarządzane
- App Service uzyskuje dostęp do wpisów tajnych przy użyciu odwołań 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 App Service i jednocześnie nie mają dostępu do wpisów tajnych 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 się nauczysz:
- 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
Przygotuj środowisko dla interfejsu wiersza polecenia platformy Azure.
Użyj środowiska 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ć informacje o innych opcjach logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure przy pierwszym użyciu. 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 zawierającą 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> wybraną unikatową 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 w warstwieTextAnalytics
Bezpłatna. Jeśli już przekroczono limit przydziału, użyj--sku S
zamiast tego.
Konfigurowanie aplikacji .NET
Sklonuj przykładowe repozytorium lokalnie i wdróż przykładową aplikację w App Service. Zastąp <ciąg app-name> unikatową nazwą.
# 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
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ć, że dane wyjściowe debugowania dla wykrywania będą mieć taki sam kolor czcionki jak tło. Możesz go zobaczyć, próbując wyróżnić biały znak bezpośrednio poniżej wyniku.
Bezpieczna łączność zaplecza
W tej chwili wpisy tajne połączenia są przechowywane jako ustawienia aplikacji w aplikacji App Service. Takie podejście już zabezpiecza wpisy tajne połączeń z bazy kodu aplikacji. Jednak każdy współautor, który może zarządzać 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 App Service może ją odczytać przy użyciu tożsamości zarządzanej.
Utwórz magazyn 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 RBAC Key Vault Secrets Officer 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 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 należy ustawić 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 do
<app-name>.azurewebsites.net
adresu . Jeśli z powrotem otrzymasz wyniki wykrywania, łą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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla