Microsoft Entra iş yükü kimliğiyle Azure DevOps erişimi

Azure DevOps Services

Uyarı

Bu özellik bu hafta ve sonraki sürümde kullanıma sunulacaktır. Özelliği henüz Azure DevOps Hizmetleri projenizde görmüyorsanız birkaç gün içinde tekrar kontrol edin.

Azure DevOps hizmet bağlantısı işlem hatlarınızın Microsoft Entra iş yükü kimliklerini kullanarak Kişisel Erişim Belirteçleri (PAT) olmadan Azure DevOps kimlik doğrulaması yapmasını sağlar. Hizmet sorumluları ve yönetilen kimlikler, gizli bilgileri yönetme ve yenileme gereksinimini ortadan kaldıran sıfır-gizli yöntem olan iş yükü kimlik federasyonu aracılığıyla Azure DevOps'a erişir.

Avantajlar

  • PAT'siz kimlik doğrulaması: Kişisel Erişim Belirteçleri oluşturma, depolama ve döndürme gereksinimini ortadan kaldırın.
  • En az ayrıcalık: Paylaşılan derleme hizmeti hesabı izinleri yerine işlem hattı başına izinleri kullanın.
  • Geliştirilmiş güvenlik: Otomatik belirteç döndürme ile Entra federasyon kimlik bilgilerini kullanın.
  • Cross-organization access: Tek bir hizmet bağlantısı kullanarak farklı kuruluşlardaki kaynaklara Azure DevOps erişin.
  • Audit trail: Tüm kimlik doğrulama girişimleri Azure DevOps denetim günlüklerinde günlüğe kaydedilir.

Desteklenen senaryolar

Azure DevOps hizmet bağlantısı şu senaryoları destekler:

  • Repository resources: Farklı Azure DevOps kuruluşlarındaki depolardaki kodlara göz atın.
  • Artifact akışları: PAT içermeyen kuruluşlarda Azure Artifacts akışlarına (NuGet, npm, Maven, Python, Cargo, Conda) erişin.
  • REST API çağrıları: Satır içi betiklerden Azure DevOps REST API çağrılarına kimlik doğrulaması yapın.
  • Extension yayımlama: uzantıları Visual Studio Market'te yayımlayın.

Önkoşullar

Azure DevOps hizmet bağlantısı oluşturmak için şunları yapmanız gerekir:

1. Adım: Aynı kuruluş içinde hizmet bağlantısı oluşturma

Hizmet sorumlunuz hizmet bağlantısıyla aynı Azure DevOps kuruluştaysa:

Hizmet sorumlusunu kuruluşunuza ekleme

  1. Azure DevOps kuruluşunuzda Organization Settings>Users adresine gidin.

  2. Kullanıcı ekle'yi seçin.

  3. Hizmet sorumlusu ayrıntılarını girin:

    • Ad: Hizmet sorumlusu veya yönetilen kimlik adı veya nesne kimliği
    • Erişim düzeyi: Uygun erişim düzeyini seçin. Standart erişim için Temel'i kullanma
  4. Hizmet sorumlusunu veya yönetilen kimliği, örneğin Okuyucular grubuna ekleyerek hizmet bağlantısını oluşturacağınız projeye atayın

  5. Onaylamak için Ekle'yi seçin.

  6. Hizmet sorumlusuna veya yönetilen kimliğe kaynak düzeyi ek izinlerin atanması

2. Adım: Hizmet bağlantısını oluşturma

  1. Azure DevOps projeniz içinde Project Ayarları>Hizmet bağlantıları bölümüne gidin.

  2. Yeni hizmet bağlantısı'nı seçin.

  3. Hizmet bağlantı türü olarak Azure DevOps seçin.

  4. Formu doldurun:

    • Kimlik: Kuruluşunuza eklediğiniz hizmet sorumlusunu seçin
    • Hizmet bağlantı adı: Bağlantı için açıklayıcı bir ad girin (örneğin, my-azdo-connection)
    • Açıklama (isteğe bağlı): Bağlantının amacı hakkında ayrıntılı bilgi ekleyin
  5. Hizmet bağlantısını oluşturmak için Kaydet'i seçin.

Kuruluşlar arası erişim için hizmet bağlantısı oluşturma

Aynı Entra ID kiracısına katılmış farklı bir Azure DevOps kuruluşundaki kaynaklara erişmek için:

  1. Aynı kuruluş içinde hizmet bağlantısı oluşturma'daki adımları izleyin, ancak hizmet bağlantısını oluştururken Farklı kuruluş'u seçin.

  2. Hedef Azure DevOps kuruluş adını girin.

  3. Hizmet sorumlusunu hedef kuruluşa kullanıcı olarak da eklemeniz gerekir.

İşlem hattınızda hizmet bağlantısını kullanma

Farklı kuruluşların depolarına göz atın

pool:
  vmImage: 'ubuntu-latest'

resources:
  repositories:
  - repository: external-repo
    type: git
    endpoint: my-azdo-connection
    name: 'external-project/external-repo'
    ref: 'refs/heads/main'

steps:
- checkout: self
- checkout: external-repo

Farklı bir kuruluştan şablona başvurma

resources:
  repositories:
    - repository: templates 
      type: git
      endpoint: my-azdo-connection
      name: 'external-project/external-repo'
      ref: "refs/heads/main"    
      
steps:
- template: azdosc-template.yml@templates

Artefakt akışlarına erişim

Yapıt kimlik doğrulama görevleriyle hizmet bağlantısını kullanın:

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: 'my-azdo-connection'

- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

Azure DevOps'u betikten çağırma

- task: AzureCLI@3
  displayName: Secret-less
  inputs:
    connectionType: 'azureDevOps'
    azureDevOpsServiceConnection: 'my-azdo-connection'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az rest --method get `
              --url "https://status.dev.azure.com/_apis/status/health?api-version=7.1-preview.1" `
              --resource 499b84ac-1321-427f-aa17-267ca6975798 `
              --query "sort_by(services[?id=='Pipelines'].geographies | [], &name)" `
              -o table

      az devops configure -l

      az devops project list --query "value[].{Name:name, Id:id}" `
                            -o table

      az pipelines pool list --query "[].{Id:id, Name:name}" `
                            -o table

- task: AzureCLI@3
  displayName: Use Entra access token
  inputs:
    connectionType: 'azureDevOps'
    azureDevOpsServiceConnection: 'my-azdo-connection'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # Get access token for Azure DevOps
      $token = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" `
                                           --query "accessToken" `
                                           --output tsv
      
      # Use token in REST API call
      $headers = @{
        Authorization = "Bearer $token"
        "Content-Type" = "application/json"
      }
      
      $body = @{
        name = "Test Build"
      } | ConvertTo-Json
      
      Invoke-RestMethod -Uri "$(System.CollectionUri)$(System.TeamProject)/_apis/build/definitions?api-version=7.1" `
                        -Method POST `
                        -Headers $headers `
                        -Body $body

AzureCLI@3 görevi, Microsoft barındırılan aracılara önceden yüklenmiş Azure DevOps CLI kullanır. Kendi sunucularınızda barındırılan aracılarda, Azure CLI'ye azure-devops uzantısıyla ihtiyacınız var. azure-devops uzantısı yüklü değilse, AzureCLI@3 görevi onu çalışma zamanında yükler.

En iyi güvenlik uygulamaları

  • En düşük izinler: Hizmet sorumlusuna yalnızca belirli işlem hattı görevleriniz için gereken izinleri atayın.
  • Erişimi denetleme: Hizmet bağlantısı kullanımını izlemek için denetim günlüklerini düzenli olarak gözden geçirin.
  • Kapsam kullanımı: Paylaşılan izinleri sınırlamak için farklı projeler veya kuruluşlar için ayrı hizmet bağlantıları kullanın.

Sorun giderme

Tip

Daha iyi güvenlik için hizmet sorumlusuna yalnızca ihtiyaç duyduğu izinleri atayın, denetim günlüklerini düzenli olarak gözden geçirin ve farklı projeler veya kuruluşlar için ayrı hizmet bağlantıları kullanın.

Hizmet bağlantısı oluşturulamıyor

Neden: Hizmet sorumlusu kuruluşunuza eklenmez veya gerekli izinlere sahip değilsiniz.

Düzeltme:

  • Hizmet sorumlusunu kuruluşunuza kullanıcı olarak eklediğinizi denetleyin.
  • Hizmet bağlantıları oluşturmak için uygun izinlere sahip olup olmadığınızı denetleyin.
  • Hizmet sorumlusunun kuruluşta gerekli erişim düzeyine sahip olduğundan emin olun.

İşlem hattının kimlik doğrulaması başarısız.

Neden: Hizmet bağlantısı adı YAML başvurusuyla eşleşmiyor veya hizmet sorumlusunun hedef kaynaklar için izinleri yok.

Düzeltme:

  • İşlem hattı YAML'nizdeki hizmet bağlantısı adının, oluşturduğunuz adla eşleşip eşleşmediğini kontrol edin.
  • Hizmet sorumlusunun eriştiğiniz kaynaklar için uygun izinlere sahip olup olmadığını denetleyin.
  • Azure DevOps kimlik doğrulama hatalarını denetim günlüklerinden kontrol edin.
  • Hizmet sorumluları ve yönetilen kimlikler için sık sorulan sorulara bakın.
  • Microsoft Entra AADSTS durum kodları için error iletileri listesini gözden geçirin.

Kuruluşlar arası erişim çalışmıyor

Neden: Hizmet sorumlusunu her iki kuruluşta da kullanıcı olarak eklemediyseniz veya hedef kuruluş adını yanlış yazdınız.

Düzeltme:

  • Hizmet sorumlusunu her iki kuruluşta da kullanıcı olarak ekleyin.
  • Hizmet bağlantısı yapılandırmasında hedef kuruluş adının doğru yazıldığından emin olun.
  • Hizmet sorumlusunun hedef kuruluşta gerekli izinlere sahip olup olmadığını denetleyin.

Genel hata iletileri

Mesaj Anlam ve hafifletme
HATA: TF401444: Lütfen hizmete erişimi etkinleştirmek için web tarayıcısında 72f988bf-86f1-41af-91ab-2d7cd011db47\72f988bf-86f1-41af-91ab-2d7cd011db47\115c3ab3-943b-4e0c-96ed-1a1763fbaa44 olarak en az bir kez oturum açın. Hizmet sorumlusunu kuruluşunuza kullanıcı olarak eklediğinizi denetleyin.
Yönetilen Kimlik / Hizmet Sorumlusu <sp/msi name>, Azure DevOps organizasyonu <org> erişimine sahip değil. Lütfen kimliğin kuruluşa eklendiğinden emin olun. Bkz. https://aka.ms/azdosc#prerequisites Hizmet sorumlusunu hedef kuruluşa kullanıcı olarak ekleyin ve gerekli projeye atayın.
Seçili kimlik için izniniz yok. Hizmet bağlantısı taslak olarak kaydedilir. Yapılandırmayı tamamlamak için kimliğin sahibine başvurarak aşağıdaki Veren ve Konu Tanımlayıcısı'nı kullanarak Azure portalında federasyon kimlik bilgileri oluşturun. Oturum açmış kullanıcının federasyon kimlik bilgileri oluşturmak için yeterli izinleri yok. Doğrudan kimlik üzerinde federasyon kimlik bilgileri oluşturmak için görüntülenen yönergeleri izleyin.
VS800075: Kimliği 'vstfs:///Classification/TeamProject/00000000-0000-00000000-000000000000' olan proje yok veya buna erişme izniniz yok. Hizmet bağlantısı kimliği projeye eklenmez. Hizmet bağlantısı ayrıntıları sayfasına gidin ve >. Kimliği eklemek için bir grup seçin, örneğin grubu > üyesi olarak ekleyin . Alternatif olarak Kuruluş Ayarları>Kullanıcıları> Hizmet bağlantısı > için kullanılan kimlik Erişimi> yönet'e gidin ve kimliğin erişmesi gereken projeleri seçin.

Microsoft Entra ID hata iletileri

Aşağıdaki tabloda yaygın Microsoft Entra ID hata kodları ve iş yükü kimlik hizmeti bağlantılarıyla ilgili olası sorunlar listelenmektedir:

Mesaj Olası sorun
AADSTS700016: '****' tanımlayıcısı olan uygulama bulunamadı Hizmet bağlantısı için kullanılan kimlik artık yok, hizmet bağlantısından kaldırılmış veya yanlış yapılandırılmış olabilir. Hizmet bağlantısını tanımlı bir kimlikle manuel olarak yapılandırdıysanız, appID/clientId doğru yapılandırıldığından emin olun.
AADSTS7000215: Geçersiz istemci sırrı sağlandı. Süresi dolmuş bir gizli anahtarı olan bir hizmet bağlantısı kullanıyorsunuz. Hizmet bağlantısını iş yükü kimliği federasyonuna dönüştürün ve süresi dolan gizli diziyi federasyon kimlik bilgileriyle değiştirin.
AADSTS700024: İstemci onaylama işlemi geçerli zaman aralığı içinde değil Hata yaklaşık 1 saat sonra oluşursa, bunun yerine İş yükü kimlik federasyonu ve Yönetilen Kimlik ile bir hizmet bağlantısı kullanın. Yönetilen Kimlik belirteçlerinin ömrü yaklaşık 24 saattir.
Hata 1 saatten önce ancak 10 dakika sonra oluşursa, (örtük olarak) erişim belirteci isteyen komutları ,örneğin erişim Azure depolama alanına betiğinizin başına taşıyın. Erişim belirteci sonraki komutlar için önbelleğe alınır.
AADSTS70021: Sunulan onay için eşleşen birleştirilmiş kimlik kaydı bulunamadı. Onay Veren: https://app.vstoken.visualstudio.com. Federasyon kimlik bilgileri oluşturulmadı veya verenin URL'si doğru değil. Doğru sağlayıcı URL'si biçimindedir https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Bir hizmet bağlantısını düzenleyip kaydederek veren URL'sini düzeltebilirsiniz. Azure DevOps kimliğinizi oluşturmadıysa, kimlik sağlayıcıyı el ile güncelleştirmeniz gerekir. Hizmet bağlantısının düzenleme iletişim kutusunda veya REST API kullanıyorsanız yanıtta doğru vereni bulabilirsiniz.
AADSTS70021: Sunulan onay için eşleşen birleştirilmiş kimlik kaydı bulunamadı. Onay Veren: https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Beyan Konusu: sc://<org>/<project>/<service-connection>. Veren URL'si veya federasyon konusu eşleşmiyor. Azure DevOps kuruluş veya proje yeniden adlandırıldı veya kimlikte federasyon konusu güncelleştirilmeden el ile oluşturulan bir hizmet bağlantısı yeniden adlandırıldı.
AADSTS700211: Sunulan beyanın sağlayıcısı için uygun bir federasyon kimliği kaydı bulunamadı Federasyon kimlik bilgisi oluşturulmadı veya verici URL'si doğru değil.
AADSTS700213: Sunulan doğrulama konusu için eşleşen federasyon kimliği kaydı bulunamadı Federasyon kimlik bilgisi oluşturulmadı veya konu doğru değil.
AADSTS700223 Microsoft Entra kiracısında iş yükü kimlik federasyonu kısıtlanmış veya devre dışı bırakılmıştır. Bu senaryoda, bunun yerine federasyon için yönetilen kimlik kullanmak mümkün olabilir. Daha fazla bilgi için yönetilen kimlik ile İş yükü kimliği bölümüne bakın.
AADSTS70025: İstemci uygulamasının ayarlanmış federatif kimlik bilgileri yok Federasyon kimlik bilgilerinin Uygulama kaydında veya Yönetilen Kimlikte yapılandırıldığından emin olun.
Microsoft Entra, Azure DevOps tarafından verilen belirteci AADSTS700238 hata koduyla reddetti Yük kimliği federasyonu Microsoft Entra kiracısında kısıtlandı. Kuruluşunuzun (https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) verenine, kullandığınız iş yükü kimlik türünde (Uygulama kaydı ve/veya Yönetilen kimlik) iş yükü kimlik federasyonu kullanmasına izin verilmemektedir. Microsoft Entra kiracı yöneticinizden veya yönetim ekibinizden Azure DevOps kuruluşunuz için iş yükü kimlik federasyonuna izin vermelerini isteyin.
AADSTS70052: Kimlik bir yönetilen kimlik, tek bir kiracı uygulaması veya hizmet hesabı olmalıdır signInAudience: AzureADMultipleOrgs sahip çok kiracılı uygulama kayıtları şu anda Microsoft Entra veren tarafından desteklenmemektedir. Her kiracı için farklı hizmet bağlantıları kullanmak amacıyla signInAudience: AzureADMyOrg kullanın ve birden fazla kiracıya erişimi ayırın. tek bir istekte birden çok kiracıya erişen ARM işlemlerine bağımlıysanız (örneğin, Sanal Ağların Kiracılar Arası Eşlemesi), Azure DevOps kuruluşunuzun Azure DevOps vereni kullanmasını sağlamak için desteğe başvurabilirsiniz.
AADSTS900382: Gizli İstemci Bulutlar Arası'nda desteklenmez Bazı bağımsız bulutlar İş yükü kimlik federasyonunu engeller.

Gördüğünüz AADSTS hatası yukarıda listelenmiyor mu? Microsoft Entra kimlik doğrulaması ve yetkilendirme hata kodlarını denetleyin.

Sonraki Adımlar