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 (yaitu, akun layanan), untuk memungkinkan pod menggunakan identitas Kubernetes. 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 atau koleksi Microsoft Authentication Library (MSAL), bersama dengan 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 ID Beban Kerja Microsoft Entra, dan meninjau opsi yang tersedia untuk merencanakan strategi proyek anda dan potensi migrasi dari identitas yang dikelola pod Microsoft Entra.
Catatan
Anda dapat menggunakan Konektor Layanan untuk membantu Mengonfigurasi beberapa langkah secara otomatis. Lihat juga: Apa itu Konektor Layanan?
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 jalankanaz 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 menggunakanWorkloadIdentityCredential
. - Buat
ChainedTokenCredential
instans yang menyertakanWorkloadIdentityCredential
. - 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 | No |
JavaScript | Microsoft Authentication Library-for-js | ghcr.io/azure/azure-workload-identity/msal-node:latest |
Tautan | No |
Python | Microsoft Authentication Library-for-python | ghcr.io/azure/azure-workload-identity/msal-python:latest |
Tautan | No |
Batasan
- Anda dapat memiliki maksimal 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 Connect 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 Microsoft Authentication Library (MSAL).
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 ini meringkas urutan autentikasi menggunakan OpenID Connect.
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 harus memulai ulang pod agar perubahan diterapkan.
Jika Anda telah menggunakan identitas yang dikelola pod Microsoft Entra, anggaplah akun layanan sebagai perwakilan keamanan Azure, kecuali bahwa akun layanan adalah bagian dari API Kubernetes inti, bukan Definisi Sumber Daya Kustom (CRD). Bagian berikut 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 untuktoken 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 ID Beban Kerja Microsoft Entra
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. Anda dapat membuat anotasi akun layanan dalam namespace layanan dengan identitas untuk mengaktifkan ID Beban Kerja Microsoft Entra dan 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 Connect (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 |
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
- Untuk mempelajari cara menyiapkan pod untuk mengautentikasi menggunakan identitas beban kerja sebagai opsi migrasi, lihat Memodernisasi autentikasi aplikasi dengan identitas beban kerja.
- Lihat Menyebarkan dan mengonfigurasi kluster AKS dengan identitas beban kerja, yang membantu Anda menyebarkan kluster Azure Kubernetes Service dan mengonfigurasi aplikasi sampel untuk menggunakan identitas beban kerja.
Azure Kubernetes Service