Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zalecaną metodą uwierzytelniania aplikacji hostowanej na platformie Azure w innych zasobach platformy Azure jest użycie tożsamości zarządzanej . Takie podejście jest obsługiwane w przypadku większości usług platformy Azure, w tym aplikacji hostowanych w usługach Azure App Service, Azure Container Apps i Azure Virtual Machines. Dowiedz się więcej o różnych technikach uwierzytelniania i podejściach na stronie przeglądu uwierzytelniania . W nadchodzących sekcjach dowiesz się:
- Podstawowe pojęcia dotyczące tożsamości zarządzanej
- Jak utworzyć tożsamość zarządzaną przypisaną przez użytkownika dla aplikacji
- Jak przypisać role do tożsamości zarządzanej przypisanej przez użytkownika
- Jak uwierzytelnić się przy użyciu tożsamości przypisanej przez użytkownika z kodu aplikacji
Podstawowe pojęcia dotyczące tożsamości zarządzanej
Tożsamość zarządzana umożliwia aplikacji bezpieczne łączenie się z innymi zasobami platformy Azure bez używania kluczy tajnych oraz innych sekretów aplikacji. Wewnętrznie platforma Azure śledzi tożsamość i zasoby, z którymi może się łączyć. Platforma Azure używa tych informacji do automatycznego uzyskiwania tokenów usługi Microsoft Entra dla aplikacji, aby umożliwić jej łączenie się z innymi zasobami platformy Azure.
Istnieją dwa typy tożsamości zarządzanych, które należy wziąć pod uwagę podczas konfigurowania hostowanej aplikacji:
- Tożsamości zarządzane i przypisane przez system są włączane bezpośrednio na zasobie Azure i powiązane z jego cyklem życia. Po usunięciu zasobu platforma Azure automatycznie usunie Twoją tożsamość. Tożsamości przypisane przez system zapewniają minimalistyczne podejście do korzystania z tożsamości zarządzanych.
- Tożsamości zarządzane przypisane przez użytkownika są tworzone jako autonomiczne zasoby Azure i oferują większą elastyczność oraz możliwości. Są one idealne w przypadku rozwiązań obejmujących wiele zasobów platformy Azure, które muszą współdzielić tę samą tożsamość i uprawnienia. Jeśli na przykład wiele maszyn wirtualnych musi uzyskać dostęp do tego samego zestawu zasobów platformy Azure, tożsamość zarządzana przypisana przez użytkownika zapewnia możliwość ponownego obsługi i zoptymalizowane zarządzanie.
Wskazówka
Dowiedz się więcej na temat wybierania tożsamości zarządzanych przypisanych przez system i zarządzania nimi w artykule Zalecenia dotyczące najlepszych rozwiązań dotyczących tożsamości zarządzanej i zarządzania nimi.
W poniższych sekcjach opisano kroki włączania i używania tożsamości zarządzanej przypisanej przez użytkownika dla aplikacji hostowanej na platformie Azure. Jeśli chcesz użyć tożsamości zarządzanej przypisanej przez system, odwiedź artykuł Tożsamości zarządzane przypisane przez system , aby uzyskać więcej informacji.
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika
Tożsamości zarządzane przypisane do użytkownika są tworzone jako zasoby autonomiczne w ramach subskrypcji platformy Azure przy użyciu portalu Azure lub Azure CLI. Polecenia interfejsu wiersza polecenia platformy Azure można uruchamiać w usłudze Azure Cloud Shell lub na stacji roboczej z zainstalowanym interfejsem wiersza polecenia platformy Azure.
W portalu Azure wprowadź Tożsamości zarządzane na głównym pasku wyszukiwania i wybierz pasujący wynik w sekcji Usługi.
Na stronie tożsamości zarządzane wybierz pozycję + Utwórz.
Na stronie Utwórz tożsamość zarządzaną przypisaną przez użytkownika wybierz subskrypcję, grupę zasobów i region tożsamości zarządzanej przypisanej przez użytkownika, a następnie podaj nazwę.
Wybierz opcję Przejrzyj i utwórz, aby przejrzeć i zweryfikować wprowadzone dane.
Wybierz pozycję Utwórz, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika.
Po utworzeniu tożsamości wybierz pozycję Przejdź do zasobu.
Na stronie Przegląd nowej tożsamości skopiuj wartość Identyfikator klienta, aby później użyć jej przy konfiguracji kodu aplikacji.
Przypisywanie tożsamości zarządzanej do aplikacji
Tożsamość zarządzana przypisana przez użytkownika może być skojarzona z co najmniej jednym zasobem platformy Azure. Wszystkie zasoby korzystające z tej tożsamości uzyskują uprawnienia nadawane im przez role związane z tożsamością.
W portalu Azure przejdź do zasobu, który hostuje kod aplikacji, takiego jak usługa Azure App Service lub instancja Azure Container App.
Na stronie przeglądu zasobu rozwiń Ustawienia i wybierz pozycję Tożsamość z menu nawigacyjnego.
Na stronie Identity przejdź do zakładki Użytkownik przypisany.
Wybierz Dodaj, aby otworzyć panel Dodaj tożsamość zarządzaną przypisaną przez użytkownika.
Na panelu Dodaj przypisaną przez użytkownika tożsamość zarządzaną użyj rozwijanej listy Subskrypcja, aby filtrować wyniki wyszukiwania dla swoich tożsamości. Użyj pola wyszukiwania Tożsamości zarządzane przypisane przez użytkownika, aby zlokalizować przypisaną przez użytkownika tożsamość zarządzaną, którą włączyłeś dla zasobu Azure hostującego twoją aplikację.
Wybierz tożsamość i wybierz pozycję Dodaj w dolnej części panelu, aby kontynuować.
Nadaj role tożsamości zarządzanej
Następnie określ, które role potrzebuje Twoja aplikacja, i przypisz te role do tożsamości zarządzanej. Role można przypisać do tożsamości zarządzanej w następujących zakresach:
- Zasób: Przypisane role mają zastosowanie tylko do tego konkretnego zasobu.
- grupa zasobów: przypisane role mają zastosowanie do wszystkich zasobów zawartych w grupie zasobów.
- Subskrypcja: Role przypisane mają zastosowanie do wszystkich zasobów zawartych w subskrypcji.
W poniższym przykładzie pokazano, jak przypisywać role w zakresie grupy zasobów, ponieważ wiele aplikacji zarządza wszystkimi powiązanymi zasobami platformy Azure przy użyciu jednej grupy zasobów.
Przejdź do strony Przegląd grupy zasobów zawierającej aplikację z tożsamością zarządzaną przypisaną przez użytkownika.
Wybierz pozycję Kontrola dostępu (IAM) na lewym panelu nawigacyjnym.
Na stronie Kontrola dostępu (IAM) wybierz pozycję + Dodaj w górnym menu, a następnie wybierz pozycję Dodaj przydział roli, aby przejść do strony Dodaj przydział roli.
Strona Dodawanie przypisania roli przedstawia wieloetapowy proces z zakładkami do przypisywania ról tożsamościom. Na początkowej karcie Rola użyj pola wyszukiwania u góry, aby zlokalizować rolę, którą chcesz przypisać tożsamości.
Wybierz rolę z wyników, a następnie wybierz pozycję Dalej, aby przejść do karty Członków.
Dla opcji Przypisz dostęp do wybierz opcję Tożsamość zarządzana.
W przypadku opcji członkowie, wybierz + Wybierz członków, aby otworzyć panel Wybierz tożsamości zarządzane.
Na panelu Wybierz zarządzane tożsamości, użyj list rozwijanych Subskrypcja i Zarządzana tożsamość, aby filtrować wyniki wyszukiwania dla Twoich tożsamości. Użyj pola wyszukiwania Select, aby odnaleźć przypisaną przez użytkownika tożsamość zarządzaną, którą włączyłeś dla zasobu Azure hostującego Twoją aplikację.
Wybierz tożsamość i wybierz pozycję Wybierz w dolnej części panelu, aby kontynuować.
Wybierz opcję Przejrzyj i przypisz na dole strony.
Na ostatniej karcie Przeglądanie i przypisywanie wybierz pozycję Przeglądanie i przypisywanie, aby zakończyć przepływ pracy.
Uwierzytelnianie w usługach platformy Azure z aplikacji
Biblioteka tożsamości platformy Azure oferuje różne poświadczenia — implementacje dostosowane do obsługi różnych scenariuszy oraz przepływów uwierzytelniania Microsoft Entra. Ponieważ tożsamość zarządzana jest niedostępna w przypadku uruchamiania lokalnego, poniższe kroki wyjaśniają, które poświadczenia mają być używane w którym scenariuszu.
-
lokalne środowisko deweloperskie: podczas tworzenia lokalnego tylkoużyj klasy o nazwie DefaultAzureCredential dla wstępnie skonfigurowanego łańcucha poświadczeń.
DefaultAzureCredentialodnajduje poświadczenia użytkownika z lokalnego narzędzia lub środowiska IDE, takiego jak interfejs wiersza polecenia platformy Azure lub program Visual Studio. Zapewnia również elastyczność i wygodę ponawiania prób, czas oczekiwania na odpowiedzi i obsługę wielu opcji uwierzytelniania. Aby dowiedzieć się więcej, zapoznaj się z artykułem Uwierzytelnianie w usługach Azure podczas lokalnego tworzenia oprogramowania. - Aplikacje hostowane na platformie Azure: gdy aplikacja jest uruchomiona na platformie Azure, użyj funkcji ManagedIdentityCredential , aby bezpiecznie odnaleźć tożsamość zarządzaną skonfigurowaną dla aplikacji. Określenie tego dokładnego typu poświadczeń uniemożliwia nieoczekiwane pobieranie innych dostępnych poświadczeń.
Implementowanie kodu
Dodaj pakiet azure-identity-cpp do aplikacji przy użyciu narzędzia vcpkg.
W wybranym terminalu przejdź do katalogu projektu aplikacji i uruchom następujące polecenie:
vcpkg add port azure-identity-cppDodaj następujące elementy w pliku CMake:
find_package(azure-identity-cpp CONFIG REQUIRED) target_link_libraries(<your project name> PRIVATE Azure::azure-identity)Dostęp do usług platformy Azure jest uzyskiwany przy użyciu wyspecjalizowanych klientów z różnych bibliotek klienckich zestawu Azure SDK. W przypadku dowolnego kodu języka C++, który tworzy wystąpienie klienta zestawu SDK Azure w Twojej aplikacji, musisz:
-
azure/identity.hppDołącz nagłówek. - Utwórz wystąpienie elementu
DefaultAzureCredential. - Przekaż wystąpienie
DefaultAzureCredentialdo konstruktora klienta zestawu Azure SDK. - Ustaw zmienną środowiskową
AZURE_CLIENT_IDna identyfikator klienta przypisanej przez użytkownika tożsamości zarządzanej. - Ustaw zmienną środowiskową
AZURE_TOKEN_CREDENTIALSnaManagedIdentityCredential, aby upewnić się, żeDefaultAzureCredentialużywa poświadczenia tożsamości zarządzanej. Dzięki temu uwierzytelnianie jest bardziej przewidywalne i łatwiejsze do debugowania podczas wdrażania na platformie Azure. Aby uzyskać więcej informacji, zobacz Use a specific credential (Używanie określonego poświadczenia).
Przykład tych kroków przedstawiono w segmencie kodu z klientem Azure Blob Storage.
#include <azure/identity.hpp> #include <azure/storage/blobs.hpp> #include <iostream> #include <memory> #include <cstdlib> int main() { try { // Set the AZURE_CLIENT_ID environment variable to your user-assigned managed identity client ID // This can be done in your deployment environment or in code (shown below for demonstration) // std::putenv("AZURE_CLIENT_ID=your-user-assigned-identity-client-id"); // Create a credential - DefaultAzureCredential will use the AZURE_CLIENT_ID environment variable // Create a credential - DefaultAzureCredential will use the AZURE_CLIENT_ID and AZURE_TOKEN_CREDENTIALS environment variables auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(true); // Create a client for the specified storage account std::string accountUrl = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"; Azure::Storage::Blobs::BlobServiceClient blobServiceClient(accountUrl, credential); // Get a reference to a container std::string containerName = "sample-container"; auto containerClient = blobServiceClient.GetBlobContainerClient(containerName); // Get a reference to a blob std::string blobName = "sample-blob"; auto blobClient = containerClient.GetBlobClient(blobName); // TODO: perform some action with the blob client // auto downloadResult = blobClient.DownloadTo("path/to/local/file"); std::cout << "Successfully authenticated using user-assigned managed identity." << std::endl; } catch (const std::exception& ex) { std::cout << "Exception: " << ex.what() << std::endl; return 1; } return 0; }-
Zgodnie z opisem w artykule Omówienie uwierzytelniania w zestawie Azure SDK dla języka C++ , DefaultAzureCredential obsługuje wiele metod uwierzytelniania i określa metodę uwierzytelniania używaną w czasie wykonywania. Zaletą tego podejścia jest to, że aplikacja może używać różnych metod uwierzytelniania w różnych środowiskach bez implementowania kodu specyficznego dla środowiska. Gdy powyższy kod jest uruchamiany na stacji roboczej w lokalnym środowisku deweloperskim, DefaultAzureCredential używa jednostki usługi aplikacji określonej przez ustawienia środowiska lub poświadczeń narzędzi deweloperskich do uwierzytelniania się z innymi zasobami platformy Azure. W związku z tym ten sam kod może służyć do uwierzytelniania aplikacji w zasobach platformy Azure zarówno podczas programowania lokalnego, jak i podczas wdrażania na platformie Azure.
Ważne
DefaultAzureCredential Upraszcza uwierzytelnianie podczas tworzenia aplikacji wdrażanych na platformie Azure przez połączenie poświadczeń używanych w środowiskach hostingu platformy Azure i poświadczeń używanych w programowania lokalnego. W środowisku produkcyjnym lepiej użyć określonego typu poświadczeń, aby uwierzytelnianie było bardziej przewidywalne i łatwiejsze do debugowania.
Alternatywą dla DefaultAzureCredential jest użycie ManagedIdentityCredential. Kroki używania ManagedIdentityCredential są takie same jak w przypadku używania DefaultAzureCredential typu.
Przykład tych kroków przedstawiono w segmencie kodu z klientem Azure Blob Storage.
#include <azure/identity.hpp>
#include <azure/storage/blobs.hpp>
#include <iostream>
#include <memory>
int main() {
try {
// Create a user-assigned managed identity credential with the client ID
Azure::Identity::ManagedIdentityCredentialOptions options;
options.ClientId = "abcd1234-..."; // Replace with your user-assigned managed identity client ID
auto credential = std::make_shared<Azure::Identity::ManagedIdentityCredential>(options);
// Create a client for the specified storage account
std::string accountUrl = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/";
Azure::Storage::Blobs::BlobServiceClient blobServiceClient(accountUrl, credential);
// Get a reference to a container
std::string containerName = "sample-container";
auto containerClient = blobServiceClient.GetBlobContainerClient(containerName);
// Get a reference to a blob
std::string blobName = "sample-blob";
auto blobClient = containerClient.GetBlobClient(blobName);
// TODO: perform some action with the blob client
// auto downloadResult = blobClient.DownloadTo("path/to/local/file");
std::cout << "Successfully authenticated using user-assigned managed identity." << std::endl;
} catch (const std::exception& ex) {
std::cout << "Exception: " << ex.what() << std::endl;
return 1;
}
return 0;
}