Sdílet prostřednictvím


Ověřování aplikací C++ ve službách Azure během místního vývoje pomocí instančních objektů

Během místního vývoje se aplikace musí ověřit v Azure, aby bylo možné přistupovat k různým službám Azure. Dvěma běžnými přístupy k místnímu ověřování je použití vývojářského účtu nebo služba principal. Tento článek vysvětluje, jak používat instanční objekt aplikace. V dalších částech se dozvíte:

  • Jak zaregistrovat aplikaci v Microsoft Entra ke vytvoření zástupce služby
  • Jak používat skupiny Microsoft Entra k efektivní správě oprávnění
  • Přiřazení rolí k oprávněním oboru
  • Ověření pomocí služebního principálu z kódu vaší aplikace

Použití vyhrazených uživatelských účtů aplikace umožňuje dodržovat zásadu nejnižších oprávnění při přístupu k prostředkům Azure. Oprávnění jsou omezená na konkrétní požadavky aplikace během vývoje, což brání náhodnému přístupu k prostředkům Azure určeným pro jiné aplikace nebo služby. Tento přístup také pomáhá vyhnout se problémům při přesunu aplikace do produkčního prostředí tím, že zajišťuje, že ve vývojovém prostředí není příliš privilegovaný.

Diagram znázorňující, jak místní aplikace C++ používá instanční objekt pro připojení k prostředkům Azure

Když je aplikace zaregistrovaná v Azure, vytvoří se aplikační služební principál. Pro místní vývoj:

  • Vytvořte samostatnou registraci aplikace pro každého vývojáře pracujícího na aplikaci, abyste měli jistotu, že každý vývojář má vlastní instanční objekt aplikace, a vyhněte se nutnosti sdílet přihlašovací údaje.
  • Vytvořte pro každou aplikaci samostatnou registraci aplikace, která omezí oprávnění aplikace jenom na to, co je potřeba.

Během místního vývoje se proměnné prostředí nastaví s identitou hlavního objektu služby aplikace. Knihovna Azure Identity načte tyto proměnné prostředí, aby aplikaci autentizovala k požadovaným prostředkům Azure.

Registrace aplikace v Azure

Objekty tenantů služby aplikace se vytvářejí prostřednictvím registrace aplikace v Azure pomocí Azure portálu nebo Azure CLI.

  1. Na webu Azure Portal pomocí panelu hledání přejděte na stránku Registrace aplikací.

  2. Na stránce Registrace aplikací vyberte + Nová registrace.

  3. Na stránce registrace aplikace :

    • Do pole Název zadejte popisnou hodnotu, která obsahuje název aplikace a cílové prostředí.
    • Pro Podporované typy účtůvyberte Účty pouze v tomto organizačním adresáři (pouze Microsoft Customer Led – jednotná instance), nebo vyberte možnost, která nejlépe vyhovuje vašim požadavkům.
  4. Vyberte Register pro registraci vaší aplikace a vytvoření service principal.

    snímek obrazovky znázorňující, jak vytvořit registraci aplikace na webu Azure Portal

  5. Na stránce registrace aplikace aplikace zkopírujte ID aplikace (klienta) a ID adresáře (tenanta) a vložte je do dočasného umístění pro pozdější použití v konfiguracích kódu aplikace.

  6. Vyberte Přidání certifikátu nebo tajného kódu pro nastavení přihlašovacích údajů pro vaši aplikaci.

  7. Na stránce Certifikáty a tajemství vyberte + Nový tajný klíč klienta.

  8. V panelu, který se otevře Přidat tajný klíč klienta:

    • Jako popiszadejte hodnotu Current.
    • Pro hodnotu u Expires ponechte výchozí doporučenou hodnotu 180 dnů.
    • Chcete-li přidat tajemství, vyberte Přidat.
  9. Na stránce Certifikáty & tajných kódů zkopírujte vlastnost Hodnota tajného klíče klienta pro použití v dalším kroku.

    Poznámka:

    Hodnota tajného klíče klienta se zobrazí jenom jednou po vytvoření registrace aplikace. Můžete přidat další tajné kódy klienta bez zneplatnění tohoto tajného klíče klienta, ale neexistuje způsob, jak tuto hodnotu znovu zobrazit.

Vytvoření skupiny Microsoft Entra pro místní vývoj

Vytvořte skupinu Microsoft Entra, která zapouzdří role (oprávnění), jež aplikace potřebuje pro místní vývoj, spíše než přiřazovat role jednotlivým služebním hlavním objektům. Tento přístup nabízí následující výhody:

  • Každý vývojář má stejné role přiřazené na úrovni skupiny.
  • Pokud je pro aplikaci potřeba nová role, stačí ji přidat jenom do skupiny aplikace.
  • Pokud se nový vývojář připojí k týmu, vytvoří se nový instanční objekt aplikace pro vývojáře a přidá se do skupiny, aby vývojář získal správná oprávnění pro práci s aplikací.
  1. V Azure portálu přejděte na stránku přehledu Microsoft Entra ID.

  2. V nabídce vlevo vyberte Všechny skupiny .

  3. Na stránce Skupiny vyberte Nová skupina.

  4. Na stránce Nová skupina vyplňte následující pole formuláře:

    • Typ skupiny: Vyberte zabezpečení.
    • Název skupiny: Zadejte název skupiny, která obsahuje odkaz na název aplikace nebo prostředí.
    • Popis skupiny: Zadejte popis, který vysvětluje účel skupiny.

    Snímek obrazovky znázorňující, jak vytvořit skupinu na webu Azure Portal

  5. Vyberte odkaz Nejsou vybráni žádní členové v části Členové, abyste přidali členy do skupiny.

  6. V rozbalovacím panelu, který se otevře, vyhledejte aplikační objekt služby, který jste vytvořili dříve, a vyberte ho z filtrovaných výsledků. Výběrem tlačítka Vybrat v dolní části panelu potvrďte výběr.

  7. Výběrem možnosti Vytvořit v dolní části stránky Nová skupina vytvořte skupinu a vraťte se na stránku Všechny skupiny . Pokud novou skupinu nevidíte, chvíli počkejte a aktualizujte stránku.

Přiřazení rolí ke skupině

Dále určete, jaké role (oprávnění) vaše aplikace potřebuje k jakým prostředkům, a přiřaďte tyto role skupině Microsoft Entra, kterou jste vytvořili. Skupinám lze přiřadit roli v rámci prostředku, skupiny prostředků nebo předplatného. Tento příklad ukazuje, jak přiřadit role v oboru skupiny prostředků, protože většina aplikací seskupuje všechny prostředky Azure do jedné skupiny prostředků.

  1. Na webu Azure Portal přejděte na stránku Přehled skupiny prostředků, která obsahuje vaši aplikaci.

  2. V levém navigačním panelu vyberte řízení přístupu (IAM).

  3. Na stránce Řízení přístupu (IAM) vyberte + Přidat a pak v rozevírací nabídce zvolte Přidat přiřazení role . Stránka Přidat přiřazení role poskytuje několik záložek pro konfiguraci a přiřazení rolí.

  4. Na kartě Role vyhledejte roli, kterou chcete přiřadit, pomocí vyhledávacího pole. Vyberte roli a pak zvolte Další.

  5. Na kartě Členové :

    • V části Přiřadit přístup k hodnotě vyberte Uživatel, skupina nebo instanční objekt .
    • Pro hodnotu Členové zvolte + Vybrat členy , aby se otevřel informační panel Vybrat členy .
    • Vyhledejte skupinu Microsoft Entra, kterou jste vytvořili dříve, a vyberte ji z filtrovaných výsledků. Výběrem možnosti Vybrat vyberte skupinu a zavřete informační panel.
    • V dolní části karty Členové vyberte Zkontrolovat a přiřadit.

    Snímek obrazovky znázorňující, jak přiřadit roli ke skupině Microsoft Entra

  6. Na kartě Revize a Přiřazení vyberte Revize a Přiřazení v dolní části stránky.

Nastavení proměnných prostředí aplikace

Za běhu určité přihlašovací údaje z knihovny identit Azure, například DefaultAzureCredential, EnvironmentCredentiala ClientSecretCredential, vyhledávají informace instančního objektu podle konvence v proměnných prostředí. V závislosti na nástrojích a prostředích můžete nakonfigurovat proměnné prostředí několika způsoby. Můžete vytvořit .env soubor nebo použít proměnné systémového prostředí k místnímu uložení těchto přihlašovacích údajů během vývoje.

Bez ohledu na zvolený přístup nastavte pro instanční objekt následující proměnné prostředí:

  • AZURE_CLIENT_ID: Slouží k identifikaci registrované aplikace v Azure.
  • AZURE_TENANT_ID: ID tenanta Microsoft Entra.
  • AZURE_CLIENT_SECRET: Tajné přihlašovací údaje vygenerované pro aplikaci.

U aplikací C++ můžete tyto proměnné prostředí nastavit několika způsoby. Můžete je načíst ze .env souboru v kódu nebo je můžete nastavit ve svém systémovém prostředí. Následující příklady ukazují, jak nastavit proměnné prostředí v různých skriptech:

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

Ověřování ve službách Azure z vaší aplikace

Knihovna Identit Azure poskytuje různé přihlašovací údaje – implementace TokenCredential přizpůsobené podpoře různých scénářů a toků ověřování Microsoft Entra. Použijte třídu ClientSecretCredential při práci s objekty služebních identit místně a v produkčním prostředí. V tomto scénáři ClientSecretCredential přečte proměnné AZURE_CLIENT_IDAZURE_TENANT_IDprostředí a AZURE_CLIENT_SECRET získá informace o instančním objektu aplikace pro připojení k Azure.

  1. Přidejte do aplikace balíček azure-identity-cpp pomocí vcpkg.

    vcpkg add port azure-identity-cpp
    
  2. Do souboru CMake přidejte následující řádky:

    find_package(azure-identity-cpp CONFIG REQUIRED)
    target_link_libraries(<your project name> PRIVATE Azure::azure-identity)
    
  3. Pro jakýkoli kód jazyka C++, který ve vaší aplikaci vytvoří objekt klienta sady Azure SDK:

    1. Zahrňte azure/identity.hpp záhlaví.
    2. Vytvořte instanci ClientSecretCredential.
    3. Předejte instanci ClientSecretCredential do konstruktoru klienta sady Azure SDK.

    Příklad je znázorněn v následujícím segmentu kódu:

    #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;
    }