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 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 | 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.
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.
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 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 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
- Untuk mempelajari cara menyiapkan pod untuk mengautentikasi menggunakan identitas beban kerja sebagai opsi migrasi, lihat Memodernisasi autentikasi aplikasi dengan identitas beban kerja.
- Lihat tutorial Menggunakan identitas beban kerja dengan aplikasi di Azure Kubernetes Service (AKS), yang membantu Anda menyebarkan kluster Azure Kubernetes Service dan mengonfigurasi aplikasi sampel untuk menggunakan identitas beban kerja.