Megosztás a következőn keresztül:


C++ alkalmazások hitelesítése azure-szolgáltatásokba a helyi fejlesztés során szolgáltatásnevek használatával

A helyi fejlesztés során az alkalmazásoknak hitelesíteni kell magukat az Azure-ban a különböző Azure-szolgáltatások eléréséhez. A helyi hitelesítés két gyakori módszere a fejlesztői fiók vagy a szolgáltatási azonosító használata. Ez a cikk az alkalmazás-szolgáltatásnév használatát ismerteti. Az alábbi szakaszokban a következő ismereteket ismerheti meg:

  • Alkalmazás regisztrálása a Microsoft Entra-ban egy szolgáltatási főszereplő létrehozásához
  • A Microsoft Entra-csoportok használata az engedélyek hatékony kezeléséhez
  • Szerepkörök hozzárendelése hatókörengedélyekhez
  • Hogyan hitelesítsünk szolgáltatás főnév alkalmazásával az alkalmazásod kódjából

A dedikált alkalmazásszolgáltatás-tagok használatával betarthatja a minimális jogosultság elvét az Azure-erőforrások elérésekor. Az engedélyek az alkalmazás adott követelményeire korlátozódnak a fejlesztés során, megakadályozva a más alkalmazásokhoz vagy szolgáltatásokhoz szánt Azure-erőforrásokhoz való véletlen hozzáférést. Ez a megközelítés segít elkerülni azokat a problémákat is, amikor az alkalmazást éles környezetbe helyezik át, mivel biztosítja, hogy a fejlesztési környezetben ne rendelkezzen túlzott jogosultságokkal.

Egy diagram, amely bemutatja, hogy egy helyi C++ alkalmazás hogyan használ egyszerű szolgáltatást az Azure-erőforrásokhoz való csatlakozáshoz.

Amikor az alkalmazás regisztrálva van az Azure-ban, létrejön egy alkalmazás-szolgáltatásnév. Helyi fejlesztéshez:

  • Hozzon létre egy külön alkalmazásregisztrációt minden fejlesztő számára, aki az alkalmazáson dolgozik, hogy minden fejlesztő rendelkezzen saját alkalmazásszolgáltatásnévvel, elkerülve a hitelesítő adatok megosztásának szükségességét.
  • Hozzon létre egy külön alkalmazásregisztrációt minden alkalmazáshoz, hogy az alkalmazás engedélyeit csak a szükségesre korlátozza.

A helyi fejlesztés során a környezeti változók az application service principal identitásával vannak beállítva. Az Azure Identity-kódtár felolvassa ezeket a környezeti változókat, hogy hitelesítse az alkalmazást a szükséges Azure-erőforrásokon.

Az alkalmazás regisztrálása az Azure-ban

Az alkalmazásszolgáltatás fő objektumai egy azure-beli alkalmazásregisztráción keresztül jönnek létre az Azure Portal vagy az Azure CLI használatával.

  1. Az Azure portálon a keresősáv segítségével lépjen az alkalmazásregisztrációk lapra.

  2. A Alkalmazásregisztrációk lapon válassza az + Új regisztráció lehetőséget.

  3. Az alkalmazás regisztrálása oldalon:

    • A Név mezőben adjon meg egy leíró értéket, amely tartalmazza az alkalmazás nevét és a célkörnyezetet.
    • A Támogatott fióktípusokesetén válassza csak ebben a szervezeti címtárban lévő fiókokat (csak Microsoft Ügyfél által vezetett – Egyetlen bérlő), vagy amelyik a legjobban megfelel a követelményeknek.
  4. Az alkalmazás regisztrálásához és a szolgáltatásfőfelhasználó létrehozásához válassza a Regisztrálás lehetőséget.

    Képernyőkép arról, hogyan hozhat létre alkalmazásregisztrációt az Azure Portalon.

  5. Az alkalmazás alkalmazásregisztrációs lapján másolja ki a alkalmazás (ügyfél) azonosítóját és címtár (bérlő) azonosítóját, majd illessze be őket egy ideiglenes helyre, hogy később használhassa őket az alkalmazáskód-konfigurációkban.

  6. Válassza Tanúsítvány vagy titkos hozzáadása lehetőséget az alkalmazás hitelesítő adatainak beállításához.

  7. A Tanúsítványok > titkos kódok lapon válassza az + Új ügyfélkód lehetőséget.

  8. A megnyíló Ügyfélkód hozzáadása legördülő panelen:

    • A Leírásmezőben adja meg az Aktuális értéket.
    • A Lejárat értéknél hagyja meg az alapértelmezett 180 napos ajánlott értéket.
    • Válassza az Hozzáadás lehetőséget a titkos kód hozzáadásához.
  9. A Tanúsítványok & titkos kulcsok lapon másolja ki az ügyfél titkos kódjának Érték tulajdonságát egy későbbi lépésben való használatra.

    Megjegyzés:

    Az ügyfél titkos kódjának értéke csak egyszer jelenik meg az alkalmazásregisztráció létrehozása után. Több ügyféltitkot is hozzáadhat anélkül, hogy érvénytelenítené ezt az ügyféltitkot, de ennek az értékét többé nem lehet megjeleníteni.

Microsoft Entra-csoport létrehozása helyi fejlesztéshez

Hozzon létre egy Microsoft Entra-csoportot, amely az alkalmazás által igényelt szerepköröket (engedélyeket) foglalja magában a helyi fejlesztés során, és nem rendeli hozzá a szerepköröket az egyes szolgáltatásnév-objektumokhoz. Ez a megközelítés a következő előnyöket kínálja:

  • Minden fejlesztőhöz ugyanazok a szerepkörök vannak hozzárendelve a csoport szintjén.
  • Ha új szerepkörre van szükség az alkalmazáshoz, azt csak az alkalmazás csoportához kell hozzáadni.
  • Ha egy új fejlesztő csatlakozik a csapathoz, egy új alkalmazásszolgáltatás-tag jön létre a fejlesztő számára, és hozzáadódik a csoporthoz, biztosítva, hogy a fejlesztő megfelelő engedélyekkel rendelkezik az alkalmazás használatához.
  1. Lépjen a Microsoft Entra ID áttekintési oldalára az Azure Portalon.

  2. Válassza az Összes csoportot a bal oldali menüből.

  3. A Csoportok lapon válassza Új csoportlehetőséget.

  4. Az Új csoport lapon töltse ki az alábbi űrlapmezőket:

    • Csoporttípus: Válassza Biztonságilehetőséget.
    • Csoportnév: Adja meg annak a csoportnak a nevét, amely az alkalmazás vagy a környezet nevére mutató hivatkozást tartalmaz.
    • Csoport leírása: Adjon meg egy leírást, amely ismerteti a csoport célját.

    Képernyőkép arról, hogyan hozhat létre csoportot az Azure Portalon.

  5. A Tagok alatt válassza a Nincsenek tagok kiválasztva hivatkozást, hogy tagokat adjon a csoporthoz.

  6. A megnyíló legördülő panelen keresse meg a korábban létrehozott szolgáltatási objektumot, és válassza ki a szűrt eredmények közül. A kijelölés megerősítéséhez kattintson a panel alján található Kiválasztás gombra.

  7. Az Új csoport lap alján válassza a Létrehozás lehetőséget a csoport létrehozásához és a Minden csoport laphoz való visszatéréshez. Ha nem látja az új csoportot a listában, várjon egy kis időt, és frissítse a lapot.

Szerepkörök hozzárendelése a csoporthoz

Ezután határozza meg, hogy az alkalmazásnak milyen szerepkörökre (engedélyekre) van szüksége az erőforrásokhoz, és rendelje hozzá ezeket a szerepköröket a létrehozott Microsoft Entra-csoporthoz. A csoportok szerepkörhöz rendelhetők az erőforrás, az erőforráscsoport vagy az előfizetés hatókörében. Ez a példa bemutatja, hogyan rendelhet hozzá szerepköröket az erőforráscsoport hatóköréhez, mivel a legtöbb alkalmazás egyetlen erőforráscsoportba csoportosítja az összes Azure-erőforrást.

  1. Az Azure Portalon lépjen az alkalmazást tartalmazó erőforráscsoport Áttekintés lapjára.

  2. A bal oldali navigációs sávon válassza a Hozzáférés-vezérlés (IAM) lehetőséget.

  3. A Hozzáférés-vezérlés (IAM) lapon válassza a + Hozzáadás lehetőséget, majd a legördülő menüben válassza a Szerepkör-hozzárendelés hozzáadása lehetőséget. A Szerepkör-hozzárendelés hozzáadása lap számos lapot biztosít a szerepkörök konfigurálásához és hozzárendeléséhez.

  4. A Szerepkör lapon a keresőmezővel keresse meg a hozzárendelni kívánt szerepkört. Jelölje ki a szerepkört, majd kattintson a Tovább gombra.

  5. A Tagok lapon:

    • Az értékhez való hozzáférés hozzárendeléséhez válassza a Felhasználó, csoport vagy szolgáltatásnév lehetőséget.
    • A Tagok értéknél válassza a + Tagok kijelölése lehetőséget a Tagok kijelölése úszó panel megnyitásához.
    • Keresse meg a korábban létrehozott Microsoft Entra-csoportot, és válassza ki a szűrt eredmények közül. Válassza a , majd a lehetőséget a csoport kijelöléséhez és a lebegő panel bezárásához.
    • Válassza a Véleményezés + hozzárendelés lehetőséget a Tagok lap alján.

    Képernyőkép arról, hogyan rendelhet szerepkört a Microsoft Entra-csoporthoz.

  6. A Véleményezés + hozzárendelés lapon válassza a Véleményezés + hozzárendelés lehetőséget a lap alján.

Az alkalmazáskörnyezet változóinak beállítása

Futtatáskor az Azure Identity könyvtár bizonyos hitelesítő adatai, például DefaultAzureCredential, EnvironmentCredential, és ClientSecretCredential, konvenciók szerint keresik a szolgáltatásnév információit a környezeti változókban. A környezeti változók többféleképpen konfigurálhatók az eszköztől és a környezettől függően. Létrehozhat egy .env fájlt, vagy rendszerkörnyezeti változókkal helyben tárolhatja ezeket a hitelesítő adatokat a fejlesztés során.

A választott megközelítéstől függetlenül állítsa be a következő környezeti változókat egy szolgáltatásnévhez:

  • AZURE_CLIENT_ID: Az Azure-ban regisztrált alkalmazás azonosítására szolgál.
  • AZURE_TENANT_ID: A Microsoft Entra tenant azonosítója.
  • AZURE_CLIENT_SECRET: Az alkalmazáshoz létrehozott titkos hitelesítő adatok.

C++ alkalmazások esetén ezeket a környezeti változókat többféleképpen is beállíthatja. Betöltheti őket egy .env fájlból a kódban, vagy beállíthatja őket a rendszerkörnyezetben. Az alábbi példák bemutatják, hogyan állíthatja be a környezeti változókat különböző rendszerhéjakban:

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

Hitelesítés az Azure-szolgáltatásokban az alkalmazásból

Az Azure Identity-kódtár különböző hitelesítő adatokat biztosít– a TokenCredential implementációit a különböző forgatókönyvek és a Microsoft Entra hitelesítési folyamatok támogatásához igazítva. Használja a ClientSecretCredential osztályt, amikor helyileg és éles környezetben szolgáltatásfelelősökkel dolgozik. Ebben a forgatókönyvben ClientSecretCredential beolvassa a környezeti változókat AZURE_CLIENT_ID, AZURE_TENANT_ID és AZURE_CLIENT_SECRET annak érdekében, hogy az alkalmazásszolgáltatás főalkalmazotti adatait megszerezze az Azure-hoz való csatlakozásához.

  1. Adja hozzá az azure-identity-cpp csomagot az alkalmazáshoz a vcpkg használatával.

    vcpkg add port azure-identity-cpp
    
  2. Adja hozzá a következő sorokat a CMake-fájlhoz:

    find_package(azure-identity-cpp CONFIG REQUIRED)
    target_link_libraries(<your project name> PRIVATE Azure::azure-identity)
    
  3. Az azure SDK-ügyfélobjektumot az alkalmazásban létrehozó C++ kód esetén:

    1. Adja meg a fejlécet azure/identity.hpp .
    2. Hozza létre a ClientSecretCredential egy példányát.
    3. Adja át a ClientSecretCredential példányt az Azure SDK klienskonstruktornak.

    Példa a következő kódszegmensben látható:

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