Menggunakan ID Beban Kerja Microsoft Entra dengan Azure Kubernetes Service (AKS)

Beban kerja yang disebarkan pada kluster Azure Kubernetes Services (AKS) memerlukan kredensial aplikasi Microsoft Entra atau identitas terkelola untuk mengakses sumber daya yang dilindungi Microsoft Entra, seperti Azure Key Vault dan Microsoft Graph. ID Beban Kerja Microsoft Entra terintegrasi dengan kemampuan asli Kubernetes untuk bergabung dengan penyedia identitas eksternal.

ID Beban Kerja Microsoft Entra menggunakan Proyeksi Volume Token Akun Layanan yang memungkinkan pod menggunakan identitas Kubernetes (yaitu, akun layanan). Token Kubernetes dikeluarkan dan federasi OIDC memungkinkan aplikasi Kubernetes mengakses sumber daya Azure dengan aman dengan ID Microsoft Entra berdasarkan akun layanan yang dianotasi.

ID Beban Kerja Microsoft Entra berfungsi dengan baik dengan pustaka klien Azure Identity dan koleksi Microsoft Authentication Library (MSAL) jika Anda menggunakan pendaftaran aplikasi. Beban kerja Anda dapat menggunakan salah satu pustaka ini untuk mengautentikasi dan mengakses sumber daya cloud Azure dengan lancar.

Artikel ini membantu Anda memahami fitur autentikasi baru ini, dan meninjau opsi yang tersedia untuk merencanakan strategi proyek Anda dan potensi migrasi dari identitas yang dikelola pod Microsoft Entra.

Dependensi

  • AKS mendukung ID Beban Kerja Microsoft Entra pada versi 1.22 dan yang lebih tinggi.
  • Azure CLI versi 2.47.0 atau yang lebih baru. Jalankan az --version untuk menemukan versi, dan jalankan az upgrade untuk meningkatkan versi. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Pustaka klien Azure Identity

Di pustaka klien Azure Identity, pilih salah satu pendekatan berikut:

  • Gunakan DefaultAzureCredential, yang mencoba menggunakan WorkloadIdentityCredential.
  • Buat ChainedTokenCredential instans yang menyertakan WorkloadIdentityCredential.
  • Gunakan WorkloadIdentityCredential secara langsung.

Tabel berikut ini menyediakan versi paket minimum yang diperlukan untuk setiap pustaka klien ekosistem bahasa.

Ekosistem Pustaka Versi minimum
.NET Azure.Identity 1.9.0
C++ azure-identity-cpp 1.6.0
Go azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identitas 3.2.0
Python azure-identity 1.13.0

Dalam sampel kode berikut, DefaultAzureCredential digunakan. Jenis kredensial ini menggunakan variabel lingkungan yang disuntikkan oleh webhook bermutasi Identitas Beban Kerja Azure untuk mengautentikasi dengan Azure Key Vault.

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

string keyVaultUrl = Environment.GetEnvironmentVariable("KEYVAULT_URL");
string secretName = Environment.GetEnvironmentVariable("SECRET_NAME");

var client = new SecretClient(
    new Uri(keyVaultUrl),
    new DefaultAzureCredential());

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

Microsoft Authentication Library (MSAL)

Pustaka klien berikut adalah versi minimum yang diperlukan.

Ekosistem Pustaka Gambar Contoh Memiliki Windows
.NET Microsoft Authentication Library-for-dotnet ghcr.io/azure/azure-workload-identity/msal-net:latest Tautan Ya
Go Pustaka Autentikasi Microsoft untuk digunakan ghcr.io/azure/azure-workload-identity/msal-go:latest Tautan Ya
Java Microsoft Authentication Library-for-java ghcr.io/azure/azure-workload-identity/msal-java:latest Tautan Tidak
JavaScript Microsoft Authentication Library-for-js ghcr.io/azure/azure-workload-identity/msal-node:latest Tautan Tidak
Python Microsoft Authentication Library-for-python ghcr.io/azure/azure-workload-identity/msal-python:latest Tautan Tidak

Batasan

  • Anda hanya dapat memiliki 20 kredensial identitas gabungan per identitas terkelola.
  • Dibutuhkan waktu beberapa detik agar info masuk identitas federasi dapat disebarluaskan setelah ditambahkan.
  • Simpul virtual menambahkan, berdasarkan proyek sumber terbuka Kubelet Virtual, tidak didukung.
  • Pembuatan kredensial identitas gabungan tidak didukung pada identitas terkelola yang ditetapkan pengguna di wilayah ini .

Cara kerjanya

Dalam model keamanan ini, kluster AKS bertindak sebagai penerbit token, MICROSOFT Entra ID menggunakan OpenID Koneksi untuk menemukan kunci penandatanganan publik dan memverifikasi keaslian token akun layanan sebelum menukarnya dengan token Microsoft Entra. Beban kerja Anda dapat menukar token akun layanan yang diproyeksikan ke volumenya untuk token Microsoft Entra menggunakan pustaka klien Azure Identity atau Pustaka Autentikasi Microsoft.

Diagram of the AKS workload identity security model.

Tabel berikut ini menjelaskan titik akhir pengeluar sertifikat OIDC yang diperlukan untuk ID Beban Kerja Microsoft Entra:

Titik akhir Deskripsi
{IssuerURL}/.well-known/openid-configuration Juga dikenal sebagai dokumen penemuan OIDC. Ini berisi metadata tentang konfigurasi penerbit.
{IssuerURL}/openid/v1/jwks Ini berisi kunci penandatanganan publik yang digunakan MICROSOFT Entra ID untuk memverifikasi keaslian token akun layanan.

Diagram berikut meringkas urutan autentikasi menggunakan Koneksi OpenID.

Diagram of the AKS workload identity OIDC authentication sequence.

Rotasi Otomatis Sertifikat Webhook

Mirip dengan addon webhook lainnya, sertifikat diputar oleh operasi rotasi otomatis sertifikat kluster.

Label dan anotasi akun layanan

ID Beban Kerja Microsoft Entra mendukung pemetaan berikut yang terkait dengan akun layanan:

  • Satu-ke-satu di mana akun layanan mereferensikan objek Microsoft Entra.
  • Banyak ke satu di mana beberapa akun layanan mereferensikan objek Microsoft Entra yang sama.
  • Satu-ke-banyak di mana akun layanan mereferensikan beberapa objek Microsoft Entra dengan mengubah anotasi ID klien. Untuk informasi selengkapnya, lihat Cara menggabungkan beberapa identitas dengan akun layanan Kubernetes.

Catatan

Jika anotasi akun layanan diperbarui, Anda perlu menghidupkan ulang pod agar perubahan diterapkan.

Jika Anda telah menggunakan identitas yang dikelola pod Microsoft Entra, anggaplah akun layanan sebagai Identitas Azure, kecuali akun layanan adalah bagian dari API Kubernetes inti, bukan Definisi Sumber Daya Kustom (CRD). Berikut ini menjelaskan daftar label dan anotasi yang tersedia yang dapat digunakan untuk mengonfigurasi perilaku saat bertukar token akun layanan dengan token akses Microsoft Entra.

Anotasi akun layanan

Semua anotasi bersifat opsional. Jika anotasi tidak ditentukan, nilai default akan digunakan.

Anotasi Deskripsi Default
azure.workload.identity/client-id Mewakili aplikasi Microsoft Entra
ID klien yang akan digunakan dengan pod.
azure.workload.identity/tenant-id Mewakili ID penyewa Azure tempat
Aplikasi Microsoft Entra terdaftar.
variabel lingkungan AZURE_TENANT_ID diekstrak
dari azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration expirationSeconds Mewakili bidang untuk
token akun layanan yang diproyeksikan. Ini adalah bidang opsional yang Anda konfigurasi untuk mencegah waktu henti
disebabkan oleh kesalahan selama refresh token akun layanan. Kedaluwarsa token akun layanan Kubernetes tidak berkorelasi dengan token Microsoft Entra. Token Microsoft Entra kedaluwarsa dalam 24 jam setelah dikeluarkan.
3600
Rentang yang didukung adalah 3600-86400.

Label pod

Catatan

Untuk aplikasi yang menggunakan identitas beban kerja, diperlukan untuk menambahkan label azure.workload.identity/use: "true" ke spesifikasi pod bagi AKS untuk memindahkan identitas beban kerja ke skenario Fail Close untuk memberikan perilaku yang konsisten dan andal bagi pod yang perlu menggunakan identitas beban kerja. Jika tidak, pod gagal setelah di-restart.

Label Deskripsi Nilai yang direkomendasikan Wajib
azure.workload.identity/use Label ini diperlukan dalam spesifikasi templat pod. Hanya pod dengan label ini yang dimutasi oleh webhook penerimaan yang bermutasi identitas beban kerja azure untuk menyuntikkan variabel lingkungan khusus Azure dan volume token akun layanan yang diproyeksikan. benar Ya

Anotasi pod

Semua anotasi bersifat opsional. Jika anotasi tidak ditentukan, nilai default akan digunakan.

Anotasi Deskripsi Default
azure.workload.identity/service-account-token-expiration expirationSeconds Mewakili bidang untuk token akun layanan yang diproyeksikan. Ini adalah bidang opsional yang Anda konfigurasi untuk mencegah waktu henti yang disebabkan oleh kesalahan selama refresh token akun layanan. Kedaluwarsa token akun layanan Kubernetes tidak berkorelasi dengan token Microsoft Entra. Token Microsoft Entra kedaluwarsa dalam 24 jam setelah dikeluarkan. 1 3600
Rentang yang didukung adalah 3600-86400.
azure.workload.identity/skip-containers Mewakili daftar kontainer yang dipisahkan titik koma untuk melewati penambahan volume token akun layanan yang diproyeksikan. Contohnya, container1;container2. Secara default, volume token akun layanan yang diproyeksikan ditambahkan ke semua kontainer jika akun layanan diberi label dengan azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar Menyuntikkan kontainer init proksi dan sidecar proksi ke dalam pod. Sidecar proksi digunakan untuk mencegat permintaan token ke IMDS dan memperoleh token Microsoft Entra atas nama pengguna dengan kredensial identitas gabungan. benar
azure.workload.identity/proxy-sidecar-port Mewakili port sidecar proksi. 8000

1 Diutamakan jika akun layanan juga dianotasikan.

Cara bermigrasi ke identitas beban kerja

Pada kluster yang sudah menjalankan identitas yang dikelola pod, Anda dapat mengonfigurasinya untuk menggunakan identitas beban kerja salah satu dari dua cara. Opsi pertama memungkinkan Anda menggunakan konfigurasi yang sama dengan yang telah Anda terapkan untuk identitas yang dikelola pod saat ini. Anda hanya perlu membuat anotasi akun layanan dalam namespace dengan identitas, dan memungkinkan identitas beban kerja untuk menyuntikkan anotasi ke dalam pod.

Opsi kedua adalah menulis ulang aplikasi Anda untuk menggunakan versi terbaru pustaka klien Azure Identity.

Untuk membantu menyederhanakan dan memudahkan proses migrasi, kami telah mengembangkan sidecar migrasi yang mengonversi transaksi IMDS yang dilakukan aplikasi Anda ke OpenID Koneksi (OIDC). Sidecar migrasi tidak dimaksudkan untuk menjadi solusi jangka panjang, tetapi cara untuk bangun dan berjalan dengan cepat pada identitas beban kerja. Menjalankan sidecar migrasi dalam proksi aplikasi Anda, transaksi IMDS aplikasi ke OIDC. Pendekatan alternatifnya adalah meningkatkan ke versi pustaka klien Azure Identity yang didukung, yang mendukung autentikasi OIDC.

Tabel berikut ini meringkas rekomendasi migrasi atau penyebaran kami untuk identitas beban kerja.

Skenario Deskripsi
Penyebaran kluster baru atau yang sudah ada menjalankan versi pustaka klien Azure Identity yang didukung Tidak diperlukan langkah-langkah migrasi.
Sampel sumber daya penyebaran:
- Menyebarkan dan mengonfigurasi identitas beban kerja pada kluster baru
- Tutorial: Menggunakan identitas beban kerja dengan aplikasi di AKS
Penyebaran kluster baru atau yang sudah ada menjalankan versi pustaka klien Azure Identity yang tidak didukung Perbarui gambar kontainer untuk menggunakan versi Azure Identity SDK yang didukung, atau gunakan sidecar migrasi.

Langkah berikutnya