Aracılığıyla paylaş


Azure Resource Manager hizmet bağlantısıyla Azure'a bağlanma

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Not

Yeni Azure hizmeti bağlantısı oluşturma deneyimini dağıtıyoruz. Bu özelliği kuruluşunuzda kullanıp kullanamayacağınız çeşitli faktörlere bağlıdır ve yine de eski kullanıcı deneyimini görebilirsiniz.

Azure Resource Manager hizmet bağlantısı, işlem hattınızdan Azure Key Vault gibi Azure kaynaklarına bağlanmanızı sağlar. Bu bağlantı, Azure Uygulaması Hizmeti uygulaması gibi Azure kaynaklarına dağıtmak için her seferinde kimlik doğrulaması yapmanıza gerek kalmadan işlem hattı kullanmanıza olanak tanır.

Azure Resource Manager hizmet bağlantısıyla Azure'a bağlanmak için birden çok kimlik doğrulama seçeneğiniz vardır. İş yükü kimlik federasyonu ile uygulama kaydı veya yönetilen kimlik kullanmanızı öneririz. İş yükü kimlik federasyonu, gizli bilgi ve gizli bilgi yönetimi gereksinimini ortadan kaldırır.

Önerilen seçenekler:

Not

İş yükü kimlik federasyonu kullanmayan başka Azure Resource Manager hizmet bağlantısı kimlik doğrulama seçenekleri vardır. Bu seçenekler geriye dönük uyumluluk ve kenar durumları için kullanılabilir ve önerilmez. İlk kez bir hizmet bağlantısı kuruyorsanız iş yükü kimlik federasyonu kullanın. Mevcut bir hizmet bağlantınız varsa, önce hizmet bağlantınızı iş yükü kimlik federasyonu kullanacak şekilde dönüştürmeyi deneyin.

İş yükü kimlik federasyonuyla uygulama kaydı oluşturma (otomatik)

Senaryonuz için aşağıdaki öğelerin tümü doğruysa bu yaklaşımı kullanabilirsiniz:

  • Azure aboneliğiniz için Sahip rolünüz var.
  • Azure Stack'e veya Azure ABD Hükümeti ortamlarına bağlanmıyorsunuz.
  • Kullandığınız tüm Market uzantıları görevleri, iş yükü kimlik federasyonu desteği için güncelleştirilir.

Bu seçimle, Azure DevOps bağlanmak istediğiniz abonelik, yönetim grubu veya Machine Learning çalışma alanı için otomatik olarak sorgular ve kimlik doğrulaması için bir iş yükü kimlik federasyonu oluşturur.

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Daha fazla bilgi için bkz. Proje ayarlarını açma.

  2. Yeni hizmet bağlantısı'nı ve ardından Azure Resource Manager ve İleri'yi seçin.

    Azure Resource Manager seçimini gösteren ekran görüntüsü.

  3. Uygulama kaydı (otomatik) seçeneğini İş yükü kimlik federasyonu kimlik bilgileriyle seçin.

    İş yükü kimliğinin seçili olduğu uygulama kaydı (otomatik) kimlik doğrulama yöntemi seçiminin ekran görüntüsü.

  4. Kapsam düzeyi seçin. Abonelik, Yönetim Grubu veya Machine Learning Çalışma Alanı'yı seçin. Yönetim grupları , birden çok abonelikte erişimi, ilkeyi ve uyumluluğu yönetmenize yardımcı olan kapsayıcılardır. Machine Learning Çalışma Alanı, makine öğrenmesi yapıtları oluşturmak için kullanılabilir.

    • Abonelik kapsamı için aşağıdaki parametreleri girin:

      Parametre Açıklama
      Abonelik Gerekli. Azure aboneliğini seçin.
      Kaynak grubu isteğe bağlı. Azure kaynak grubunu seçin.
    • Yönetim Grubu kapsamı için Azure yönetim grubunu seçin.

    • Machine Learning Çalışma Alanı kapsamı için aşağıdaki parametreleri girin:

      Parametre Açıklama
      Abonelik Gerekli. Azure aboneliğini seçin.
      Kaynak Grubu Gerekli. Çalışma alanını içeren kaynak grubunu seçin.
      Machine Learning Çalışma Alanı Gerekli. Azure Machine Learning çalışma alanını seçin.
  5. Hizmet Bağlantı Adı girin.

  6. İsteğe bağlı olarak, hizmet bağlantısı için bir açıklama girin.

  7. Tüm işlem hatlarının bu hizmet bağlantısını kullanmasına izin vermek için Tüm işlem hatlarına erişim izni ver'i seçin. Bu seçeneği belirtmezseniz, bu hizmet bağlantısını kullanan her işlem hattına el ile erişim vermelisiniz.

  8. Kaydet'i seçin.

Kullanıcı tarafından atanan mevcut yönetilen kimlik için bir hizmet bağlantısı oluşturma

Mevcut kullanıcı tarafından atanan yönetilen kimlik için otomatik olarak bir iş yükü kimliği bilgisi oluşturmak için bu seçeneği kullanın. Başlamadan önce mevcut bir kullanıcı tarafından atanan yönetilen kimliğe sahip olmanız gerekir.

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Daha fazla bilgi için bkz. Proje ayarlarını açma.

  2. Yeni hizmet bağlantısı'nı ve ardından Azure Resource Manager ve İleri'yi seçin.

    Azure Resource Manager seçimini gösteren ekran görüntüsü.

  3. Yönetilen kimlik'i seçin.

    Kullanıcı tarafından atanan kimlikle yönetilen kimliğin Azure Resource Manager seçimini gösteren ekran görüntüsü.

  4. Adım 1: Yönetilen kimlik ayrıntıları

    1. Yönetilen Kimlik için Abonelik'i seçin. Bu, yönetilen kimliğinizi içeren Azure aboneliğidir.
    2. Yönetilen Kimlik için Kaynak grubunu seçin. Bu, yönetilen kimliğinizi içeren kaynak grubudur.
    3. Yönetilen Kimlik'i seçin. Bu, kaynak grubunuzdaki kaynaklara erişmek için kullanacağınız yönetilen kimliktir.
  5. 2. Adımda: Azure Kapsamı:

    1. Kapsam Düzeyi'ni seçin. Abonelik, Yönetim Grubu veya Machine Learning Çalışma Alanı'yı seçin. Yönetim grupları , birden çok abonelikte erişimi, ilkeyi ve uyumluluğu yönetmenize yardımcı olan kapsayıcılardır. Machine Learning Çalışma Alanı, makine öğrenmesi yapıtları oluşturmak için kullanılabilir.

      • Abonelik kapsamı için aşağıdaki parametreleri girin:

        Parametre Açıklama
        Hizmet bağlantısı aboneliği Gerekli. Yönetilen kimliğinizin erişeceği Azure aboneliği adını seçin.
        Hizmet bağlantısı için kaynak grubu isteğe bağlı. Yönetilen kimlik erişimini bir kaynak grubuyla sınırlamak için girin.
      • Yönetim Grubu kapsamı için aşağıdaki parametreleri girin:

        Parametre Açıklama
        Yönetim Grubu Gerekli. Azure yönetim grubunu seçin.
      • Machine Learning Çalışma Alanı kapsamı için aşağıdaki parametreleri girin:

        Parametre Açıklama
        Abonelik Gerekli. Azure aboneliği adını seçin.
        Hizmet bağlantısı için kaynak grubu isteğe bağlı. Çalışma alanını içeren kaynak grubunu seçin.
        ML Çalışma Alanı çalışma alanı Gerekli. Mevcut Azure Machine Learning çalışma alanının adını girin.
    2. 3. Adım: Hizmet bağlantısı ayrıntıları: bölümünde aşağıdaki parametreleri girin veya seçin:

      Parametre Açıklama
      Hizmet Bağlantı Adı Gerekli. Görev özelliklerinde bu hizmet bağlantısına başvurmak için kullandığınız ad. Azure aboneliğinizin adı değil.
      Hizmet Yönetimi Referansı isteğe bağlı. ITSM veritabanından bağlam bilgileri.
      Açıklama isteğe bağlı. Hizmet bağlantısının açıklamasını girin.
    3. Güvenlik bölümünde Tüm işlem hatlarının bu hizmet bağlantısını kullanmasına izin vermek için Tüm işlem hatlarına erişim izni ver'i seçin. Bu seçeneği belirtmezseniz, bu hizmet bağlantısını kullanan her işlem hattına el ile erişim vermelisiniz.

    4. Hizmet bağlantısını doğrulamak ve oluşturmak için Kaydet'i seçin.

Mevcut bir hizmet bağlantısını iş yükü kimlik federasyonu kullanmak için dönüştürme

Mevcut bir Azure Resource Manager hizmet bağlantısını hızla gizli dizi yerine kimlik doğrulaması için iş yükü kimlik federasyonu kullanacak şekilde dönüştürebilirsiniz. Hizmet bağlantınız şu gereksinimleri karşılıyorsa Azure DevOps'ta hizmet bağlantısı dönüştürme aracını kullanabilirsiniz:

  • Azure DevOps başlangıçta hizmet bağlantısını oluşturmuştur. Hizmet bağlantınızı el ile oluşturursanız, Azure DevOps'un kendi kimlik bilgilerini değiştirme izinleri olmadığından hizmet bağlantısı dönüştürme aracını kullanarak hizmet bağlantısını dönüştüremezsiniz.
  • Hizmet bağlantısını yalnızca bir proje kullanır. Çapraz proje hizmeti bağlantılarını dönüştüremezsiniz.

Hizmet bağlantısını dönüştürmek için:

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Daha fazla bilgi için bkz. Proje ayarlarını açma.

  2. İş yükü kimliğini kullanmak için dönüştürmek istediğiniz hizmet bağlantısını seçin.

  3. Dönüştür'ü seçin.

    Federasyon kimlik bilgileri için dönüştürmeyi seçmeyi gösteren ekran görüntüsü.

    Süresi dolmuş gizli anahtara sahip bir kimlik bilginiz varsa, farklı bir dönüşüm seçeneği görürsünüz.

    Süresi dolmuş bir sertifikanız olduğunda federasyon kimlik bilgilerini kullanmak üzere dönüştürme seçeneğini gösteren ekran görüntüsü.

  4. Yeni bir hizmet bağlantısı oluşturmak istediğinizi onaylamak için Yeniden Dönüştür'ü seçin.

    Dönüştürme işlemi birkaç dakika sürebilir. Bağlantıyı geri almak istiyorsanız, yedi gün içinde bağlantıyı geri döndürmeniz gerekir.

Betik kullanarak birden çok hizmet bağlantısı dönüştürme

Birden fazla hizmet bağlantısını, artık kimlik doğrulama için iş yükü kimlik federasyonu kullanacak şekilde aynı anda güncellemek için bir betik kullanın.

Bu örnek PowerShell betiği iki parametre gerektirir: Azure DevOps kuruluşu (örnek: https://dev.azure.com/fabrikam-tailspin) ve Azure DevOps projesi (örnek: Space game web agent). Betik daha sonra Azure DevOps projeniz ve kuruluşunuz için ilişkili hizmet bağlantılarını alır.

Hizmet bağlantılarını iş yükü kimlik federasyonu kullanacak şekilde dönüştürürken, henüz kullanmayan her bağlantı için güncelleştirmeyi onaylamanız istenir. Onaylandığında, betik Azure DevOps REST API aracılığıyla bu hizmet bağlantılarını iş yükü kimlik federasyonu kullanmak üzere güncelleştirir.

Betiğin çalışması için PowerShell 7.3 veya üzeri ve Azure CLI gerekir. Betiği bir .ps1 dosyaya kaydedin ve PowerShell 7 kullanarak çalıştırın.

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 

#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798" # application id of Azure DevOps 
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint

    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Gizli anahtar kullanan mevcut bir hizmet bağlantısını geri alma

Çevrilmiş otomatik hizmet bağlantısını gizli anahtarıyla yedi gün boyunca geriye döndürebilirsiniz. Yedi gün sonra el ile yeni bir sır oluşturun.

Hizmet bağlantınızı el ile oluşturur ve dönüştürürseniz, Azure DevOps'un kendi kimlik bilgilerini değiştirme izinleri olmadığından hizmet bağlantısı dönüştürme aracını kullanarak hizmet bağlantısını geri döndüremezsiniz.

Hizmet bağlantısını geri döndürmek için:

  1. Azure DevOps projesinde Pipelines>Service bağlantıları'na gidin.

  2. Geri dönmek için mevcut bir hizmet bağlantısını seçin.

  3. Dönüştürmeyi özgün düzene geri döndür'e tıklayın.

    Federasyon kimlik bilgileri için geri döndürme seçeneğini gösteren ekran görüntüsü.

  4. Seçiminizi onaylamak için Yeniden Döndür'e tıklayın.

Mevcut hizmet sorumlusunu kullanan bir hizmet bağlantısı oluşturun.

Önceden tanımlanmış bir erişim izinleri kümesi kullanmak istiyorsanız ve bu amaçla tanımlanmış bir hizmet sorumlunuz yoksa, yeni bir hizmet sorumlusu oluşturmak için şu öğreticilerden birini izleyin:

Mevcut hizmet sorumlusunu kullanan bir hizmet bağlantısı oluşturmak için:

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Daha fazla bilgi için bkz. Proje ayarlarını açma.

  2. Yeni hizmet bağlantısı'nı ve ardından Azure Resource Manager ve İleri'yi seçin.

    Azure Resource Manager seçimini gösteren ekran görüntüsü.

  3. Hizmet sorumlusu (el ile) ve İleri seçin.

    Hizmet sorumlusu (el ile) kimlik doğrulama yöntemi seçimini gösteren ekran görüntüsü.

  4. Yeni Azure hizmet bağlantısı iletişim kutusunda Ortam'ı seçin. Azure Stack'i seçerseniz, ortam URL'sini girin (gibi bir şey).

  5. Kapsam Düzeyi'ni seçin. Abonelik veya Yönetim Grubu'nun seçin. Yönetim grupları , birden çok abonelikte erişimi, ilkeyi ve uyumluluğu yönetmenize yardımcı olan kapsayıcılardır.

    • Abonelik kapsamı için aşağıdaki parametreleri girin:

      Parametre Açıklama
      Abonelik Kimliği Gerekli. Azure abonelik kimliğini girin.
      Abonelik Adı Gerekli. Azure aboneliği adını girin.
    • Yönetim Grubu kapsamı için aşağıdaki parametreleri girin:

      Parametre Açıklama
      Yönetim Grubu Kimliği Gerekli. Azure yönetim grubu kimliğini girin.
      Yönetim Grubu Adı Gerekli. Azure yönetim grubu adını girin.
  6. Kimlik Doğrulaması bölümünde aşağıdaki parametreleri girin veya seçin:

    Parametre Açıklama
    Hizmet Sorumlusu Kimliği Gerekli. Hizmet sorumlusu kimliğini girin.
    Kimlik bilgileri Hizmet Sorumlusu Anahtarı veya Sertifika'ya tıklayın. Hizmet Sorumlusu Anahtarı'nı seçtiyseniz anahtarı (parola) girin. Sertifika'yı seçtiyseniz sertifikayı girin.
    Kiracı Kimliği Gerekli. Kiracı kimliğini girin.
    Doğrulamak Girdiğiniz ayarları doğrulamak için seçin.
  7. Ayrıntılar bölümünde aşağıdaki parametreleri girin:

    Parametre Açıklama
    Bağlantı Adı Gerekli. Görev özelliklerinde bu hizmet bağlantısına başvurmak için kullandığınız ad. Azure aboneliğinizin adı değil.
    Açıklama isteğe bağlı. Hizmet bağlantısının açıklamasını girin.
    Güvenlik Tüm işlem hatlarının bu hizmet bağlantısını kullanmasına izin vermek için Tüm işlem hatlarına erişim izni ver'i seçin. Bu seçeneği belirtmezseniz, bu hizmet bağlantısını kullanan her işlem hattına el ile erişim vermelisiniz.
  8. Hizmet bağlantısını doğrulamak ve oluşturmak için Doğrula ve kaydet'i seçin.

Yardım ve destek