Azure Kubernetes Service (AKS) ile Microsoft Entra İş Yükü Kimliği kullanma

AKS kümesinde dağıtılan iş yükleri, Azure Key Vault ve Microsoft Graph gibi Microsoft Entra korumalı kaynaklara erişmek için Microsoft Entra uygulama kimlik bilgilerini veya yönetilen kimlikleri gerektirir. Microsoft Entra İş Yükü Kimliği, dış kimlik sağlayıcılarıyla federasyon sağlamak için Kubernetes'e özgü özelliklerle tümleştirilir ve diğer hizmet ve kaynaklara kimlik doğrulaması yapmak ve bunlara erişmek için iş yüklerinize iş yükü kimlikleri atamanıza olanak sağlar.

Not

İş yükü kimliği, AKS'deki poddan Azure kimlik senaryolarını kapsar. Podlarda çalışan uygulamaların Microsoft Entra korumalı hizmetlerde kimlik doğrulaması nasıl yapılır. AKS Otomatik'te, Microsoft Entra İş Yükü Kimliği ve OIDC kümesi verene sahip iş yükü kimliği varsayılan olarak önceden yapılandırılmıştır; küme düzeyinde kurulum gerekmez. AKS Standard'da iş yükü kimliğini ayrı ayrı etkinleştirir ve yapılandırabilirsiniz. Diğer kimlik senaryoları (denetim düzlemi kimlik doğrulaması ve yetkilendirmesi ve kümeden Azure'a yönetilen kimlikler) için bkz. AKS için erişim ve kimlik seçenekleri.

Tip

AKS Otomatik kümesi kullanıyorsanız, Microsoft Entra İş Yükü Kimliği ve OIDC kümesi verene sahip iş yükü kimliği varsayılan olarak önceden yapılandırılmıştır. Küme düzeyinde kurulumu atlayabilir ve uygulamanızı bir iş yükü kimliği kullanacak şekilde yapılandırmaya doğrudan gidebilirsiniz. AKS Automatic güvenlik varsayılanları hakkında daha fazla bilgi için bkz. Azure Kubernetes Service Automatic nedir?

Microsoft Entra İş Yükü Kimliği, podların Kubernetes kimliği kullanmasını sağlamak için Hizmet Hesabı Belirteci Birim Projeksiyonunu kullanır. Kubernetes belirteci verilir ve OpenID Connect (OIDC) federasyonu , Kubernetes uygulamalarının ek açıklamalı hizmet hesapları temelinde Microsoft Entra ID ile Azure kaynaklarına güvenli bir şekilde erişmesini sağlar.

Microsoft Entra İş Yükü Kimliğini Azure Kimlik istemci kitaplıklarıyla veya Microsoft Kimlik Doğrulama Kitaplığı (MSAL) koleksiyonuyla birlikte uygulama kaydıyla birlikte kullanarak Azure bulut kaynaklarına sorunsuz bir şekilde kimlik doğrulaması yapabilir ve bu kaynaklara erişebilirsiniz.

Not

Bazı adımları otomatik olarak yapılandırmanıza yardımcı olması için Service Connector'ı kullanabilirsiniz. Daha fazla bilgi için bkz. Hizmet Bağlayıcısı nedir?

Önkoşullar

AKS Otomatik kümeleri

AKS Otomatik kümelerinde iş yükü kimliği ve OIDC küme yayımlayıcısı, kümenin güvenlik varsayılanlarının bir parçası olarak önceden yapılandırılmıştır. Podlarınızda iş yükü kimliğini kullanmadan önce küme düzeyinde yapılandırma gerekmez. Uygulamanızı ayarlamaya doğrudan devam edin.

AKS Standart kümeleri

  • AKS, 1.22 ve üzeri sürümlerde Microsoft Entra İş Yükü Kimliği destekler.
  • Azure CLI sürüm 2.47.0 veya üzeri. Sürümü bulmak için komutunu az --version çalıştırın ve sürümü yükseltmek için komutunu çalıştırın az upgrade . Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
  • Podlarınızın iş yükü kimliğini kullanabilmesi için önce kümenizde iş yükü kimliğini ve OIDC vereni etkinleştirmeniz gerekir. Bkz. AKS kümesinde iş yükü kimliğini dağıtma ve yapılandırma.

Sınırlamalar

  • Yönetilen kimlik başına en fazla 20 federe kimlik bilgisi olabilir.
  • Federasyon kimliği kimlik bilgilerinin başlangıçta eklendikten sonra yayılması birkaç saniye sürer.
  • Sanal Kubelet açık kaynak projesini temel alan sanal düğümler eklentisi desteklenmez.
  • Bu bölgelerde kullanıcı tarafından atanan yönetilen kimliklerde federasyon kimliği kimlik bilgilerinin oluşturulması desteklenmez.

Azure Identity istemci kitaplıkları

Azure Identity istemci kitaplıklarında aşağıdaki yaklaşımlardan birini seçin:

  • DefaultAzureCredential kullanın, çünkü bu WorkloadIdentityCredential kullanmayı dener.
  • Bir ChainedTokenCredential örneği oluşturun ve WorkloadIdentityCredential ekleyin.
  • WorkloadIdentityCredential doğrudan kullanın.

WorkloadIdentityCredential ile belirteç isterken, <resource>/.default gibi kapsamları Microsoft Entra ID v2 biçiminde https://management.azure.com/.default iletin. https://management.azure.com/ gibi ham bir kaynak URI’si, iş yükü kimliği yönetilen kimliğin kullandığı IMDS resource akışı yerine Microsoft Entra v2 belirteç uç noktasını kullandığından başarısız olabilir. Kapsamların v2 belirteç uç noktasında nasıl çalıştığı hakkında daha fazla bilgi için bkz. Belirteç alma.

Aşağıdaki tablo, her dil ekosisteminin istemci kitaplığı için gereken en düşük paket sürümünü sağlar:

Ekosistem Kitaplık En düşük sürüm
.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/identity 3.2.0
Python azure-identity 1.13.0

Azure Identity istemci kitaplığı kod örnekleri

Aşağıdaki kod örnekleri DefaultAzureCredential kullanır. Bu kimlik bilgisi türü, Azure Key Vault ile kimlik doğrulaması yapmak için iş yükü kimliğini değiştiren webhook tarafından eklenen ortam değişkenlerini kullanır. Diğer yaklaşımlardan birini kullanarak örnekleri görmek için ekosisteme özgü istemci kitaplıklarına bakın.

<key-vault-url> ve <secret-name> değerlerini Key Vault'unuz ve gizli diziniz için uygun değerlerle değiştirin.

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

string keyVaultUrl = Environment.GetEnvironmentVariable("<key-vault-url>");
string secretName = Environment.GetEnvironmentVariable("<secret-name>");

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

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

Microsoft Kimlik Doğrulama Kitaplığı (MSAL)

Aşağıdaki istemci kitaplıkları gereken en düşük sürümdür:

Ekosistem Kitaplık Görsel Örnek Windows var
.NET Dotnet için Microsoft Kimlik Doğrulama Kitaplığı ghcr.io/azure/azure-workload-identity/msal-net:latest Bağlantı Yes
Go Microsoft Authentication Library-for-go ghcr.io/azure/azure-workload-identity/msal-go:latest Bağlantı Yes
Java Java için Microsoft Kimlik Doğrulama Kitaplığı ghcr.io/azure/azure-workload-identity/msal-java:latest Bağlantı Hayır
JavaScript js için Microsoft Kimlik Doğrulama Kitaplığı ghcr.io/azure/azure-workload-identity/msal-node:latest Bağlantı Hayır
Python Python için Microsoft Kimlik Doğrulama Kitaplığı ghcr.io/azure/azure-workload-identity/msal-python:latest Bağlantı Hayır

Nasıl çalışır?

Bu güvenlik modelinde AKS kümesi belirteç veren olarak görev yapar. Microsoft Entra ID, açık imzalama anahtarlarını keşfetmek ve bir Microsoft Entra jetonu için takas etmeden önce hizmet hesabı jetonunun doğruluğunu doğrulamak için OIDC kullanır. İş yükünüz, Azure Identity istemci kitaplığını veya MSAL'yi kullanarak bir Microsoft Entra belirteci almak için birimine yansıtılan hizmet hesabı belirtecini değiştirebilir.

AKS Microsoft Entra İş Yükü Kimliği güvenlik modelinin diyagramı.

Aşağıdaki tabloda, Microsoft Entra İş Yükü Kimliği için gerekli OIDC veren uç noktaları açıklanmaktadır:

Uç nokta Açıklama
{IssuerURL}/.well-known/openid-configuration OIDC bulma belgesi olarak da bilinir. Bu, verenin yapılandırmalarıyla ilgili meta verileri içerir.
{IssuerURL}/openid/v1/jwks Bu, Microsoft Entra Id'nin hizmet hesabı belirtecinin orijinalliğini doğrulamak için kullandığı ortak imzalama anahtarlarını içerir.

Aşağıdaki diyagramda OIDC kullanarak kimlik doğrulama dizisi özetlemektedir:

AKS Microsoft Entra İş Yükü Kimliği OIDC kimlik doğrulama dizisinin diyagramı.

Webhook sertifikası otomatik yenileme

Diğer webhook eklentilerine benzer şekilde, küme sertifikası otomatik döndürme işlemi iş yükü kimliği webhook sertifikasını döndürür.

Hizmet hesabı etiketleri ve ek açıklamaları

Microsoft Entra İş Yükü Kimliği bir hizmet hesabıyla ilgili aşağıdaki eşlemeleri destekler:

  • Bire bir, bir hizmet hesabının bir Microsoft Entra nesnesine referans verdiği durumdur.
  • Birden çok hizmet hesabının aynı Microsoft Entra nesnesine başvurduğu çoktan-bire.
  • Bire çok; burada bir hizmet hesabı istemci kimliği ek açıklamasını değiştirerek birden çok Microsoft Entra nesnesine başvurur. Daha fazla bilgi için bkz Kubernetes hizmet hesabıyla birden çok kimliği federe etme.

Not

Hizmet hesabı ek açıklamalarını güncelleştirirseniz değişikliklerin etkili olması için pod'un yeniden başlatılması gerekir.

Microsoft Entra pod ile yönetilen kimliği kullandıysanız, bir hizmet hesabını Azure güvenlik sorumlusu olarak düşünün, ancak bu hesap çekirdek Kubernetes API'sinin bir parçasıdır, Özel Kaynak Tanımı (CRD) yerine. Aşağıdaki bölümlerde, Bir Microsoft Entra erişim belirteci için hizmet hesabı belirtecini takas ederken davranışı yapılandırmak için kullanabileceğiniz kullanılabilir etiketlerin ve ek açıklamaların listesi açıklanmaktadır.

Hizmet hesabı ek açıklamaları

Tüm ek açıklamalar isteğe bağlıdır. Ek açıklama belirtilmezse, varsayılan değer kullanılır.

Ek Açıklama Açıklama Varsayılan
azure.workload.identity/client-id Microsoft Entra uygulamasını temsil eder
pod ile kullanılacak istemci kimliği.
azure.workload.identity/tenant-id Azure kiracı kimliğini temsil eder.
Microsoft Entra uygulaması kayıt edildi.
AZURE_TENANT_ID ortam değişkeni ayıklandı
ConfigMap'ten azure-wi-webhook-config .
azure.workload.identity/service-account-token-expiration expirationSeconds Öngörülen hizmet hesabı jetonunun alanını temsil eder. Bu, hizmet hesabı belirteci yenilenmesi sırasında karşılaşılan hataların neden olduğu aksaklık süresini önlemek için yapılandırdığınız isteğe bağlı bir alandır. Kubernetes hizmet hesabı belirtecinin süresinin dolması, Microsoft Entra belirteçleriyle ilişkilendirilmemiştir. Microsoft Entra jetonları verildikten sonra 24 saat içinde geçerliliğini yitirir. 3600
Desteklenen aralık 3600-86400'dür.

Pod etiketleri

Not

Microsoft Entra İş Yükü Kimliği kullanan uygulamalarda, iş yükü kimliğini kullanması gereken podlar için tutarlı ve güvenilir bir davranış sağlamak üzere iş yükü kimliğini bir azure.workload.identity/use: "true" senaryosuna taşımak üzere AKS'nin pod belirtimine etiketin eklenmesi gerekir. Aksi takdirde podlar yeniden başlatıldıktan sonra başarısız olur.

Etiket Açıklama Önerilen değer Zorunlu
azure.workload.identity/use Bu etiket, pod şablonu belirtiminde gereklidir. Azure'a özgü ortam değişkenlerini eklemek ve öngörülen hizmet hesabı belirteci birimini yerleştirmek için yalnızca bu etikete sahip podlar, azure-workload-identity mutating kabul web kancası tarafından değiştirilmektedir. doğru Yes

Pod ek açıklamaları

Tüm ek açıklamalar isteğe bağlıdır. Ek açıklama belirtilmezse, varsayılan değer kullanılır.

Ek Açıklama Açıklama Varsayılan
azure.workload.identity/service-account-token-expiration Ayrıntılar için bkz. Hizmet hesabı ek açıklamaları . Pod ek açıklamaları, hizmet hesabı ek açıklamalarından öncelik taşır. 3600
Desteklenen aralık 3600-86400'dür.
azure.workload.identity/skip-containers Projeksiyon hizmet hesabı belirteç biriminin eklenmesini atlayacak kapsayıcıların noktalı virgülle ayrılmış listesini temsil eder. Örneğin, container1;container2. Varsayılan olarak, pod azure.workload.identity/use: true ile etiketlenmişse, öngörülen hizmet hesabı belirteci hacmi tüm kapsayıcılara eklenir.
azure.workload.identity/inject-proxy-sidecar Pod'a ara sunucu başlatma kapsayıcısı ve ara sunucu yan aracını enjekte eder. Proxy sidecar, IMDS'ye yönelik belirteç isteklerini kesmek ve federe kimlik bilgisine sahip kullanıcı adına bir Microsoft Entra belirteci almak için kullanılır. yanlış
azure.workload.identity/proxy-sidecar-port Proxy sidecar'ının bağlantı noktasını temsil eder. 8000

Aynı iş yükünde kimlik bağlamalarını ve doğrudan federasyonu kullanın

Kimlik bağlamaları , iş yükü kimliğini büyük ölçekli AKS ortamlarını destekleyecek şekilde genişleten bir önizleme özelliğidir. Kimlik bağlamaları, her küme için bir federasyon kimlik bilgisi (FIC) oluşturmak yerine, birden çok kümenin tek bir FIC aracılığıyla kullanıcı tarafından atanan tek bir yönetilen kimliği paylaşmasına olanak tanır. Etkinleştirildiğinde AKS, pod belirteci isteklerini, iş yükü adına belirteç değişimini gerçekleştiren bir kimlik bağlama ara sunucu webhook'u üzerinden yönlendirir.

Öngörülen hizmet hesabı belirtecinin tek bir hedef kitlesi vardır. Kimlik bağlamaları etkinleştirildiğinde, kimlik bağlama webhook’u, kimlik bağlama proxy’sinin kullandığı AZURE_FEDERATED_TOKEN_FILE hedef kitlesine api://AKSIdentityBinding ile başvurulan varsayılan belirteci ayarlar.

Doğrudan Microsoft Entra İş Yükü Kimliği federasyonu (kimlik bağlamaları olmadan) hedef kitlesine api://AzureADTokenExchangesahip bir belirteç gerektirir. Federe kimlik bilgisinin hedef kitlesi belirtecin hedef kitlesiyle eşleşmediğinden, kimlik bağlama belirteç dosyasının doğrudan federasyon için yeniden kullanılması AADSTS700212 ile başarısız olur.

Aynı iş yükünde, bir yönetilen kimlik için kimlik bağlamalarını ve başka bir yönetilen kimlik için doğrudan federasyonu kullanmak üzere, api://AzureADTokenExchange kitlesiyle ikinci bir hizmet hesabı belirtecini projelendirin ve doğrudan federasyon kodunu bu dosyaya yönlendirin:

apiVersion: v1
kind: Pod
metadata:
  name: workload-with-ib-and-direct-fic
  labels:
    azure.workload.identity/use: "true"
spec:
  serviceAccountName: workload-sa
  containers:
  - name: app
    image: <image>
    volumeMounts:
    - name: direct-fic-token
      mountPath: /var/run/secrets/direct-fic
      readOnly: true
    env:
    - name: DIRECT_FIC_TOKEN_FILE
      value: /var/run/secrets/direct-fic/token
  volumes:
  - name: direct-fic-token
    projected:
      sources:
      - serviceAccountToken:
          path: token
          audience: api://AzureADTokenExchange
          expirationSeconds: 3600

AZURE_FEDERATED_TOKEN_FILE, kimlik bağlama akışı için ve DIRECT_FIC_TOKEN_FILE gibi özel belirteç dosyası, doğrudan federasyon kimliği kimlik bilgisi akışı için kullanın.

Microsoft Entra İş Yükü Kimliği'ne geçiş

Pod ile yönetilen bir kimlik çalıştıran kümeleri iki yoldan birini kullanarak Microsoft Entra İş Yükü Kimliğini kullanacak şekilde yapılandırabilirsiniz:

  • Pod ile yönetilen kimlik için uyguladığınız yapılandırmanın aynısını kullanın. Microsoft Entra İş Yükü Kimliğini etkinleştirmek ve ek açıklamaları pod'lara entegre etmek için ad alanı içindeki hizmet hesabını kimlik ile açıklayabilirsiniz.
  • Azure Identity istemci kitaplığının en son sürümünü kullanmak için uygulamanızı yeniden yazın.

Geçiş sürecini düzene koymaya ve kolaylaştırmaya yardımcı olmak için, uygulamanızın yaptığı Örnek Meta Veri Hizmeti (IMDS) işlemlerini OIDC'ye dönüştüren bir geçiş modülü geliştirdik. Geçiş yan arabirimi, uzun vadeli bir çözüm olarak tasarlanmamıştır; ancak Microsoft Entra İş Yükü Kimliği üzerinde hızla çalışmaya başlamanın bir yoludur. Uygulamanızda geçiş yan aracı çalıştırmak, uygulama IMDS işlemlerini OIDC'ye iletir. Alternatif yaklaşım, OIDC kimlik doğrulamasını destekleyen Azure Identity istemci kitaplığının desteklenen bir sürümüne yükseltmektir.

Aşağıdaki tabloda AKS kümeniz için geçiş veya dağıtım önerilerimiz özetlemektedir:

Senaryo Açıklama
Yeni AKS Otomatik kümesi İş yükü kimliği ve OIDC sağlayıcısı önceden yapılandırılmıştır. Küme düzeyinde geçiş veya yapılandırma adımı gerekmez. Uygulamanızın hizmet hesabını ve federasyon kimlik bilgilerini yapılandırın, ardından Azure Identity istemci kitaplığını kullanın.
Azure Kimliği istemci kitaplığının desteklenen bir sürümünü çalıştıran yeni veya mevcut AKS Standart kümesi Geçiş adımı gerekmez.
Örnek dağıtım kaynakları: Yeni bir kümede Microsoft Entra İş Yükü Kimliğini dağıtma ve yapılandırma
Yeni veya mevcut küme dağıtımı Azure Identity istemci kitaplığının desteklenmeyen bir sürümünü çalıştırıyor Kapsayıcı görüntüsünü Azure Identity istemci kitaplığının desteklenen bir sürümünü kullanacak şekilde güncelleştirin veya migration sidecar kullanın.