Mengautentikasi aplikasi C++ dengan layanan Azure selama pengembangan lokal menggunakan prinsipal layanan

Selama pengembangan lokal, aplikasi perlu mengautentikasi ke Azure untuk mengakses berbagai layanan Azure. Dua pendekatan umum untuk autentikasi lokal adalah menggunakan akun pengembang atau perwakilan layanan. Artikel ini menjelaskan cara menggunakan identitas utama layanan aplikasi. Di bagian depan, Anda mempelajari:

  • Cara mendaftarkan aplikasi dengan Microsoft Entra untuk membuat perwakilan layanan
  • Cara menggunakan grup Microsoft Entra untuk mengelola izin secara efisien
  • Cara mengatur peran pada izin cakupan
  • Cara melakukan autentikasi menggunakan perwakilan layanan atau service principal dari kode aplikasi Anda

Menggunakan prinsipap layanan aplikasi khusus memungkinkan Anda mematuhi prinsip hak akses minimal saat mengakses sumber daya Azure. Izin terbatas pada persyaratan khusus aplikasi selama pengembangan, mencegah akses yang tidak disengaja ke sumber daya Azure yang ditujukan untuk aplikasi atau layanan lain. Pendekatan ini juga membantu menghindari masalah saat aplikasi dipindahkan ke produksi dengan memastikannya tidak terlalu istimewa di lingkungan pengembangan.

Diagram yang menunjukkan bagaimana aplikasi C++ lokal menggunakan perwakilan layanan untuk menyambungkan ke sumber daya Azure.

Saat aplikasi terdaftar di Azure, prinsipal layanan aplikasi dibuat. Untuk pengembangan lokal:

  • Buat pendaftaran aplikasi terpisah untuk setiap pengembang yang bekerja di aplikasi untuk memastikan setiap pengembang memiliki perwakilan layanan aplikasi mereka sendiri, menghindari kebutuhan untuk berbagi kredensial.
  • Buat pendaftaran aplikasi terpisah untuk setiap aplikasi untuk membatasi izin aplikasi hanya untuk apa yang diperlukan.

Selama pengembangan lokal, variabel lingkungan diatur dengan identitas perwakilan layanan aplikasi. Pustaka Azure Identity membaca variabel lingkungan ini untuk mengautentikasi aplikasi ke sumber daya Azure yang diperlukan.

Mendaftarkan aplikasi di Azure

Objek principal layanan aplikasi dibuat melalui pendaftaran aplikasi di Azure dengan menggunakan portal Azure atau Azure CLI.

  1. Di portal Microsoft Azure, gunakan bilah pencarian untuk menavigasi ke halaman Pendaftaran aplikasi.

  2. Pada halaman Pendaftaran aplikasi, pilih + Pendaftaran baru.

  3. Pada halaman Daftarkan aplikasi:

    • Untuk bidang Nama, masukkan nilai deskriptif yang menyertakan nama aplikasi dan lingkungan target.
    • Untuk Jenis akun yang didukung, pilih Akun di direktori organisasi ini saja (Hanya Microsoft Customer Led - Penyewa tunggal), atau opsi mana yang paling sesuai dengan kebutuhan Anda.
  4. Pilih Daftarkan untuk mendaftarkan aplikasi Anda dan buat perwakilan layanan.

    Cuplikan layar yang menunjukkan cara membuat pendaftaran aplikasi di portal Microsoft Azure.

  5. Pada halaman Pendaftaran aplikasi untuk aplikasi Anda, salin ID Aplikasi (klien) dan ID Direktori (penyewa) dan tempelkan di lokasi sementara untuk digunakan nanti dalam konfigurasi kode aplikasi Anda.

  6. Pilih Tambahkan sertifikat atau rahasia untuk menyiapkan kredensial untuk aplikasi Anda.

  7. Pada halaman Sertifikat & rahasia, pilih + Rahasia klien baru.

  8. Pada panel pop-up Tambahkan rahasia klien yang terbuka:

    • Untuk Deskripsi, masukkan nilai Saat Ini.
    • Untuk nilai Kedaluwarsa , biarkan nilai yang direkomendasikan secara default, yaitu 180 hari.
    • Pilih Tambahkan untuk menambahkan rahasia.
  9. Pada halaman Sertifikat & rahasia, salin properti Nilai rahasia klien untuk digunakan dalam langkah selanjutnya.

    Nota

    Nilai rahasia klien hanya ditampilkan sekali setelah pendaftaran aplikasi dibuat. Anda dapat menambahkan lebih banyak rahasia klien tanpa membatalkan rahasia klien ini, tetapi tidak ada cara untuk menampilkan nilai ini lagi.

Membuat grup Microsoft Entra untuk pengembangan lokal

Buat grup Microsoft Entra untuk merangkum peran (izin) yang dibutuhkan aplikasi dalam pengembangan lokal daripada menetapkan peran ke objek principal layanan individual. Pendekatan ini menawarkan keuntungan berikut:

  • Setiap pengembang memiliki peran yang sama yang ditetapkan di tingkat grup.
  • Jika peran baru diperlukan untuk aplikasi, peran tersebut hanya perlu ditambahkan ke grup untuk aplikasi.
  • Jika pengembang baru bergabung dengan tim, perwakilan layanan aplikasi baru dibuat untuk pengembang dan ditambahkan ke grup, memastikan pengembang memiliki izin yang tepat untuk mengerjakan aplikasi.
  1. Navigasi ke halaman gambaran umum ID Microsoft Entra di portal Microsoft Azure.

  2. Pilih Semua grup dari menu sebelah kiri.

  3. Pada halaman Grup , pilih Grup baru.

  4. Pada halaman Grup baru , isi bidang formulir berikut ini:

    • Jenis grup: Pilih Keamanan.
    • Nama grup: Masukkan nama untuk grup yang menyertakan referensi ke aplikasi atau nama lingkungan.
    • Deskripsi grup: Masukkan deskripsi yang menjelaskan tujuan grup.

    Cuplikan layar memperlihatkan cara membuat grup di portal Microsoft Azure.

  5. Pilih link Tidak ada anggota yang dipilih di bawah Anggota untuk menambahkan anggota ke grup.

  6. Di panel pop-up yang terbuka, cari prinsipal layanan yang Anda buat sebelumnya dan pilih dari hasil yang sudah difilter. Pilih tombol Pilih di bagian bawah panel untuk mengonfirmasi pilihan Anda.

  7. Pilih Buat di bagian bawah halaman Grup baru untuk membuat grup dan kembali ke halaman Semua grup . Jika Anda tidak melihat grup baru tercantum, tunggu sebentar dan refresh halaman.

Menetapkan peran ke grup

Selanjutnya, tentukan peran (izin) apa yang dibutuhkan aplikasi Anda pada sumber daya apa dan tetapkan peran tersebut ke grup Microsoft Entra yang Anda buat. Grup dapat diberi peranan di ruang lingkup sumber daya, grup sumber daya, atau langganan. Contoh ini menunjukkan cara menetapkan peran di cakupan grup sumber daya, karena sebagian besar aplikasi mengelompokkan semua sumber daya Azure mereka ke dalam satu grup sumber daya.

  1. Di portal Microsoft Azure, buka halaman Gambaran Umum grup sumber daya yang berisi aplikasi Anda.

  2. Pilih Kontrol akses (IAM) dari navigasi kiri.

  3. Pada halaman Kontrol akses (IAM), pilih + Tambahkan lalu pilih Tambahkan penetapan peran dari menu drop-down. Halaman Tambahkan penetapan peran menyediakan beberapa tab untuk mengonfigurasi dan menetapkan peran.

  4. Pada tab Peran , gunakan kotak pencarian untuk menemukan peran yang ingin Anda tetapkan. Pilih peran, lalu pilih Berikutnya.

  5. Pada tab Anggota :

    • Untuk Menetapkan akses ke nilai, pilih Pengguna, grup, atau perwakilan layanan .
    • Untuk nilai Anggota , pilih + Pilih anggota untuk membuka panel flyout Pilih anggota .
    • Cari grup Microsoft Entra yang Anda buat sebelumnya dan pilih dari hasil yang difilter. Pilih Pilih untuk memilih grup dan menutup panel flyout.
    • Pilih Tinjau + tetapkan di bawah tab Anggota.

    Cuplikan layar memperlihatkan cara menetapkan peran ke grup Microsoft Entra.

  6. Di tab Tinjau & Tetapkan, pilih Tinjau & Tetapkan di bagian bawah halaman.

Mengatur variabel lingkungan aplikasi

Pada runtime, kredensial tertentu dari pustaka Identitas Azure, seperti DefaultAzureCredential, EnvironmentCredential dan ClientSecretCredential, mencari informasi service principal berdasarkan konvensi dalam variabel lingkungan. Ada beberapa cara untuk mengonfigurasi variabel lingkungan tergantung pada alat dan lingkungan Anda. Anda dapat membuat .env file atau menggunakan variabel lingkungan sistem untuk menyimpan kredensial ini secara lokal selama pengembangan.

Terlepas dari pendekatan yang Anda pilih, atur variabel lingkungan berikut untuk perwakilan layanan:

  • AZURE_CLIENT_ID: Digunakan untuk mengidentifikasi aplikasi terdaftar di Azure.
  • AZURE_TENANT_ID: ID penyewa dari Microsoft Entra.
  • AZURE_CLIENT_SECRET: Kredensial rahasia yang dihasilkan untuk aplikasi.

Untuk aplikasi C++, Anda dapat mengatur variabel lingkungan ini dalam beberapa cara. Anda dapat memuatnya dari .env file dalam kode Anda, atau Anda dapat mengaturnya di lingkungan sistem Anda. Contoh berikut menunjukkan cara mengatur variabel lingkungan dalam shell yang berbeda:

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

Mengautentikasi ke layanan Azure dari aplikasi Anda

Pustaka Azure Identity menyediakan berbagai kredensial—implementasi TokenCredential yang disesuaikan untuk mendukung skenario yang berbeda dan alur autentikasi Microsoft Entra. Gunakan kelas ClientSecretCredential saat bekerja dengan prinsipal layanan secara lokal dan di lingkungan produksi. Dalam skenario ini, ClientSecretCredential membaca variabel lingkungan AZURE_CLIENT_ID, AZURE_TENANT_ID, dan AZURE_CLIENT_SECRET untuk mendapatkan informasi layanan perwakilan aplikasi untuk terhubung ke Azure.

  1. Tambahkan paket azure-identity-cpp ke aplikasi Anda menggunakan vcpkg.

    vcpkg add port azure-identity-cpp
    
  2. Tambahkan baris berikut dalam file CMake Anda:

    find_package(azure-identity-cpp CONFIG REQUIRED)
    target_link_libraries(<your project name> PRIVATE Azure::azure-identity)
    
  3. Untuk kode C++ apa pun yang membuat objek klien Azure SDK di aplikasi Anda:

    1. Sertakan azure/identity.hpp tajuk.
    2. Buat sebuah instance ClientSecretCredential.
    3. Teruskan instans ClientSecretCredential ke konstruktor klien Azure SDK.

    Contoh diperlihatkan dalam segmen kode berikut:

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