Udostępnij przez


Uwierzytelnianie aplikacji C++ w usługach platformy Azure podczas programowania lokalnego przy użyciu jednostek usługi

Podczas programowania lokalnego aplikacje muszą uwierzytelniać się na platformie Azure, aby uzyskać dostęp do różnych usług platformy Azure. Dwa typowe podejścia do uwierzytelniania lokalnego to użycie konta dewelopera lub jednostki usługi. W tym artykule wyjaśniono, jak używać konta głównego usługi aplikacji. W poniższych sekcjach nauczysz się:

  • Jak zarejestrować aplikację w usłudze Microsoft Entra w celu utworzenia głównego użytkownika usługi
  • Jak efektywnie zarządzać uprawnieniami za pomocą grup entra firmy Microsoft
  • Jak przypisać role do uprawnień w obrębie zakresu
  • Jak uwierzytelniać się przy użyciu jednostki usługi w kodzie aplikacji

Podczas używania dedykowanych kont aplikacji można przestrzegać zasady minimalnych uprawnień podczas uzyskiwania dostępu do zasobów platformy Azure. Uprawnienia są ograniczone do określonych wymagań aplikacji podczas programowania, uniemożliwiając przypadkowy dostęp do zasobów platformy Azure przeznaczonych dla innych aplikacji lub usług. Takie podejście pomaga również uniknąć problemów, gdy aplikacja zostanie przeniesiona do środowiska produkcyjnego, zapewniając, że nie jest ona nadmiernie uprzywilejowana w środowisku deweloperskim.

Diagram przedstawiający sposób, w jaki lokalna aplikacja języka C++ używa jednostki usługi do łączenia się z zasobami platformy Azure.

Po zarejestrowaniu aplikacji na platformie Azure zostanie utworzona jednostka usługi aplikacji. Do lokalnego rozwoju:

  • Utwórz oddzielną rejestrację aplikacji dla każdego dewelopera pracującego nad aplikacją, aby upewnić się, że każdy deweloper ma własną jednostkę usługi aplikacji, unikając konieczności udostępniania poświadczeń.
  • Utwórz oddzielną rejestrację aplikacji dla każdej aplikacji, aby ograniczyć uprawnienia aplikacji tylko do tego, co jest niezbędne.

Podczas programowania lokalnego zmienne środowiskowe są ustawiane przy użyciu tożsamości jednostki usługi aplikacji. Biblioteka tożsamości platformy Azure odczytuje te zmienne środowiskowe, aby uwierzytelnić aplikację w wymaganych zasobach platformy Azure.

Rejestrowanie aplikacji na platformie Azure

Obiekty głównej usługi aplikacji są tworzone za pośrednictwem rejestracji aplikacji na platformie Azure przy użyciu portalu Azure lub Azure CLI.

  1. W portalu Azure użyj paska wyszukiwania, aby przejść do strony Rejestracje aplikacji.

  2. Na stronie Rejestracje aplikacji wybierz pozycję + Nowa rejestracja.

  3. Na stronie Rejestrowanie aplikacji:

    • W polu Nazwa wprowadź opisową wartość zawierającą nazwę aplikacji i środowisko docelowe.
    • W przypadku obsługiwanych typów kont wybierz Konta wyłącznie w tym katalogu organizacyjnym (tylko klient firmy Microsoft — pojedyncza dzierżawa)lub dowolną opcję najlepiej dopasowaną do Twoich wymagań.
  4. Wybierz pozycję Zarejestruj, aby zarejestrować aplikację i utworzyć jednostkę usługi.

    Zrzut ekranu przedstawiający sposób tworzenia rejestracji aplikacji w witrynie Azure Portal.

  5. Na stronie rejestracji aplikacji skopiuj identyfikator aplikacji (klienta) i identyfikator katalogu (dzierżawy) i wklej je w tymczasowe miejsce do późniejszego użycia w konfiguracjach kodu aplikacji.

  6. Wybierz pozycję Dodaj certyfikat lub klucz tajny, aby skonfigurować poświadczenia dla aplikacji.

  7. Na stronie Certyfikaty i sekrety wybierz Nowy tajny klucz klienta.

  8. W panelu wysuwanym Dodaj tajny klienta, który jest już otwarty:

    • W polu Opis wprowadź wartość Current.
    • Dla wartości Wygasa pozostaw domyślną zalecaną wartość 180 dni.
    • Wybierz Dodaj, aby dodać tajemnicę.
  9. Na stronie sekretów & skopiuj właściwość wartość sekretu klienta do użycia w przyszłym kroku.

    Uwaga / Notatka

    Wartość tajnego klucza klienta jest wyświetlana tylko raz po zarejestrowaniu aplikacji. Możesz dodać więcej tajnych kluczy klienta bez unieważnienia tego tajnego klucza klienta, ale ponowne wyświetlenie tej wartości nie jest możliwe.

Utwórz grupę Microsoft Entra do rozwoju lokalnego

Utwórz grupę Entra w Microsoft, aby zgrupować role (uprawnienia), których aplikacja potrzebuje w środowisku lokalnym, zamiast przypisywać te role do poszczególnych obiektów głównych usługi. Takie podejście zapewnia następujące korzyści:

  • Każdy deweloper ma te same role przypisane na poziomie grupy.
  • Jeśli dla aplikacji jest potrzebna nowa rola, należy ją dodać tylko do grupy aplikacji.
  • Jeśli nowy deweloper dołączy do zespołu, zostanie utworzona nowa jednostka usługi aplikacji dla dewelopera i dodana do grupy, zapewniając deweloperowi odpowiednie uprawnienia do pracy nad aplikacją.
  1. Przejdź do strony przeglądu Microsoft Entra ID w portalu Azure.

  2. Wybierz pozycję Wszystkie grupy z menu po lewej stronie.

  3. Na stronie Grupy wybierz pozycję Nowa grupa.

  4. Na stronie Nowa grupa wypełnij następujące pola formularza:

    • Typ grupy: wybierz pozycję Security.
    • Nazwa grupy: wprowadź nazwę grupy, która zawiera odwołanie do nazwy aplikacji lub środowiska.
    • Opis grupy: wprowadź opis, który wyjaśnia przeznaczenie grupy.

    Zrzut ekranu przedstawiający sposób tworzenia grupy w witrynie Azure Portal.

  5. Wybierz link Nie wybrano członków w obszarze Członkowie, aby dodać członków do grupy.

  6. W wyświetlonym panelu wysuwanym wyszukaj utworzoną wcześniej jednostkę usługi i wybierz ją z filtrowanych wyników. Wybierz przycisk Wybierz w dolnej części panelu, aby potwierdzić wybór.

  7. Wybierz pozycję Utwórz w dolnej części strony Nowa grupa , aby utworzyć grupę i wrócić do strony Wszystkie grupy . Jeśli nie widzisz nowej grupy na liście, zaczekaj chwilę i odśwież stronę.

Przypisywanie ról do grupy

Następnie określ, jakich ról (uprawnień) potrzebuje twoja aplikacja na temat zasobów i przypisz te role do utworzonej grupy firmy Microsoft Entra. Grupy można przypisać do roli w zakresie zasobu, grupy zasobów lub subskrypcji. W tym przykładzie pokazano, jak przypisywać role w zakresie grupy zasobów, ponieważ większość aplikacji grupuje wszystkie zasoby platformy Azure w jedną grupę zasobów.

  1. W witrynie Azure Portal przejdź do strony Przegląd grupy zasobów zawierającej aplikację.

  2. Wybierz Kontrola dostępu (IAM) z nawigacji po lewej stronie.

  3. Na stronie Kontrola dostępu (zarządzanie dostępem i tożsamościami) wybierz pozycję + Dodaj , a następnie z menu rozwijanego wybierz pozycję Dodaj przypisanie roli . Strona Dodawanie przypisania roli zawiera kilka kart do konfigurowania i przypisywania ról.

  4. Na karcie Rola użyj pola wyszukiwania, aby zlokalizować rolę, którą chcesz przypisać. Wybierz rolę, a następnie wybierz pozycję Dalej.

  5. Na karcie Członkowie:

    • W polu Przypisz dostęp do wartości wybierz pozycję Użytkownik, grupa lub jednostka usługi .
    • Dla wartości Członkowie wybierz pozycję + Wybierz członków , aby otworzyć panel wysuwany Wybieranie członków .
    • Wyszukaj utworzoną wcześniej grupę Microsoft Entra i wybierz ją z filtrowanych wyników. Wybierz , a następnie, aby wybrać grupę i zamknąć wysuwane okno.
    • Wybierz Przejrzyj + przypisz na dole zakładki Członkowie.

    Zrzut ekranu przedstawiający sposób przypisywania roli do grupy Microsoft Entra.

  6. Na karcie Przeglądanie i przypisywanie wybierz pozycję Przejrzyj i przypisz w dolnej części strony.

Ustawianie zmiennych środowiskowych aplikacji

W czasie działania niektóre poświadczenia z biblioteki tożsamości platformy Azure, takie jak DefaultAzureCredential, EnvironmentCredential i ClientSecretCredential, wyszukują informacje o pryncypale usługi zgodnie z konwencją w zmiennych środowiskowych. Istnieje wiele sposobów konfigurowania zmiennych środowiskowych w zależności od narzędzi i środowiska. Możesz utworzyć .env plik lub użyć zmiennych środowiskowych systemu do przechowywania tych poświadczeń lokalnie podczas programowania.

Niezależnie od wybranego podejścia, ustaw następujące zmienne środowiskowe dla podmiotu usługi:

  • AZURE_CLIENT_ID: służy do identyfikowania zarejestrowanej aplikacji na platformie Azure.
  • AZURE_TENANT_ID: identyfikator dzierżawcy Microsoft Entra.
  • AZURE_CLIENT_SECRET: Tajne poświadczenie wygenerowane dla aplikacji.

W przypadku aplikacji języka C++ można ustawić te zmienne środowiskowe na kilka sposobów. Można je załadować z .env pliku w kodzie lub ustawić je w środowisku systemowym. W poniższych przykładach pokazano, jak ustawić zmienne środowiskowe w różnych powłokach:

export AZURE_CLIENT_ID=<your-client-id>
export AZURE_TENANT_ID=<your-tenant-id>
export AZURE_CLIENT_SECRET=<your-client-secret>

Uwierzytelnianie w usługach platformy Azure z aplikacji

Biblioteka tożsamości platformy Azure udostępnia szereg poświadczeń — implementacje TokenCredential dostosowane do obsługi różnych scenariuszy i przepływów uwierzytelniania Microsoft Entra. Użyj klasy ClientSecretCredential podczas pracy z podmiotami usługi lokalnie i w środowisku produkcyjnym. W tym scenariuszu ClientSecretCredential odczytuje zmienne środowiskowe AZURE_CLIENT_ID, AZURE_TENANT_ID i AZURE_CLIENT_SECRET, aby uzyskać informacje o jednostce usługi aplikacji w celu nawiązania połączenia z platformą Azure.

  1. Dodaj pakiet azure-identity-cpp do aplikacji przy użyciu narzędzia vcpkg.

    vcpkg add port azure-identity-cpp
    
  2. Dodaj następujące wiersze w pliku CMake:

    find_package(azure-identity-cpp CONFIG REQUIRED)
    target_link_libraries(<your project name> PRIVATE Azure::azure-identity)
    
  3. W przypadku dowolnego kodu C++, który tworzy obiekt klienta zestawu Azure SDK w aplikacji:

    1. azure/identity.hpp Dołącz nagłówek.
    2. Utwórz wystąpienie elementu ClientSecretCredential.
    3. Przekaż wystąpienie ClientSecretCredential do konstruktora klienta zestawu Azure SDK.

    Przykład pokazano w następującym segmencie kodu:

    #include <azure/identity.hpp>
    #include <azure/storage/blobs.hpp>
    #include <iostream>
    #include <memory>
    
    // The following environment variables must be set before running the sample.
    // * AZURE_TENANT_ID: Tenant ID for the Azure account.
    // * AZURE_CLIENT_ID: The Client ID to authenticate the request.
    // * AZURE_CLIENT_SECRET: The client secret.
    std::string GetTenantId() { return std::getenv("AZURE_TENANT_ID"); }
    std::string GetClientId() { return std::getenv("AZURE_CLIENT_ID"); }
    std::string GetClientSecret() { return std::getenv("AZURE_CLIENT_SECRET"); }
    
    int main() {
        try {
            // Create a credential - this will automatically read the environment variables
            // AZURE_CLIENT_ID, AZURE_TENANT_ID, and AZURE_CLIENT_SECRET
            auto credential = std::make_shared<Azure::Identity::ClientSecretCredential>(GetTenantId(), GetClientId(), GetClientSecret());
    
            // 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 and created Azure clients." << std::endl;
    
        } catch (const std::exception& ex) {
            std::cout << "Exception: " << ex.what() << std::endl;
            return 1;
        }
    
        return 0;
    }