Bagikan melalui


Menyambungkan ke Azure dengan koneksi layanan Azure Resource Manager

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Catatan

Kami meluncurkan pengalaman pembuatan koneksi layanan Azure baru. Menerimanya di organisasi Anda bergantung pada berbagai faktor, sehingga Anda mungkin akan masih melihat pengalaman pengguna yang lebih lama.

Koneksi layanan Azure Resource Manager memungkinkan Anda menyambungkan ke sumber daya Azure seperti Azure Key Vault dari alur Anda. Koneksi ini memungkinkan Anda menggunakan alur untuk menyebarkan ke sumber daya Azure, seperti aplikasi Azure App Service, tanpa perlu mengautentikasi setiap kali.

Anda memiliki beberapa opsi autentikasi untuk menyambungkan ke Azure dengan koneksi layanan Azure Resource Manager. Kami merekomendasikan untuk menggunakan federasi identitas beban kerja dengan pendaftaran aplikasi atau identitas terkelola. Federasi identitas beban kerja menghilangkan kebutuhan akan rahasia dan manajemen rahasia.

Opsi yang direkomendasikan:

Catatan

Ada opsi autentikasi koneksi layanan Azure Resource Manager lainnya yang tidak menggunakan federasi identitas beban kerja. Opsi ini tersedia untuk kompatibilitas ke belakang dan kasus batas, namun tidak disarankan. Jika Anda menyiapkan koneksi layanan untuk pertama kalinya, gunakan federasi identitas beban kerja. Jika Anda memiliki koneksi layanan yang sudah ada, coba mengonversi koneksi layanan Anda untuk menggunakan federasi identitas beban kerja terlebih dahulu.

Membuat pendaftaran aplikasi dengan federasi identitas beban kerja (otomatis)

Anda dapat menggunakan pendekatan ini jika semua item berikut ini benar untuk skenario Anda:

  • Anda memiliki peran Pemilik untuk langganan Azure Anda.
  • Anda tidak tersambung ke Azure Stack atau lingkungan Azure US Government .
  • Tugas ekstensi Marketplace apa pun yang Anda gunakan diperbarui untuk mendukung federasi identitas beban kerja.

Dengan pilihan ini, Azure DevOps secara otomatis mengakses langganan, grup manajemen, atau ruang kerja Pembelajaran Mesin yang ingin Anda sambungkan dan membuat federasi identitas untuk beban kerja sebagai autentikasi.

  1. Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.

    Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.

  2. Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager dan Berikutnya.

    Cuplikan layar yang memperlihatkan memilih pilihan Azure Resource Manager.

  3. Pilih Pendaftaran aplikasi (otomatis) dengan kredensial federasi identitas Beban Kerja.

    Cuplikan layar pemilihan metode autentikasi pendaftaran aplikasi (otomatis) dengan identitas beban kerja dipilih.

  4. Pilih tingkat Cakupan. Pilih Langganan, Grup Manajemen, atau Ruang Kerja Pembelajaran Mesin. Grup manajemen adalah kontainer yang membantu Anda mengelola akses, kebijakan, dan kepatuhan di beberapa langganan. Ruang Kerja Pembelajaran Mesin adalah tempat untuk membuat artefak pembelajaran mesin.

    • Untuk cakupan Langganan, masukkan parameter berikut:

      Pengaturan Deskripsi
      Langganan Harus diisi. Pilih langganan Azure.
      Grup sumber daya Opsional. Pilih grup sumber daya Azure.
    • Untuk cakupan Grup Manajemen, pilih grup manajemen Azure.

    • Untuk cakupan ruang kerja Pembelajaran Mesin, masukkan parameter berikut:

      Pengaturan Deskripsi
      Langganan Harus diisi. Pilih langganan Azure.
      Grup Sumber Daya Harus diisi. Pilih grup sumber daya yang berisi ruang kerja.
      Ruang Kerja Pembelajaran Mesin Harus diisi. Pilih ruang kerja Pembelajaran Mesin Azure.
  5. Masukkan nama koneksi Layanan.

  6. Secara opsional, masukkan deskripsi untuk koneksi layanan.

  7. Memilih Berikan izin akses ke semua alur memungkinkan semua alur menggunakan koneksi ini. Opsi ini tidak disarankan. Sebagai gantinya, otorisasi setiap alur satu per satu untuk menggunakan koneksi layanan.

  8. Pilih Simpan.

Membuat koneksi layanan untuk identitas terkelola yang ditetapkan pengguna yang sudah ada

Gunakan opsi ini untuk membuat kredensial identitas beban kerja secara otomatis untuk identitas terkelola yang ditetapkan pengguna yang ada. Anda harus memiliki identitas terkelola yang ditetapkan untuk pengguna sebelum memulai.

  1. Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.

    Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.

  2. Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager dan Berikutnya.

    Cuplikan layar yang memperlihatkan memilih pilihan Azure Resource Manager.

  3. Pilih Identitas yang Dikelola.

    Cuplikan layar yang memperlihatkan pemilihan Azure Resource Manager identitas terkelola dengan identitas yang ditetapkan pengguna.

  4. Di Langkah 1: Detail identitas yang dikelola:

    1. Pilih Langganan untuk Identitas Terkelola. Ini adalah langganan Azure yang berisi identitas terkelola Anda.
    2. Pilih Grup Sumber Daya untuk Identitas yang Dikelola. Ini adalah grup sumber daya yang berisi identitas terkelola Anda.
    3. Pilih Identitas Kelola. Ini adalah identitas terkelola dalam grup sumber daya yang akan Anda gunakan untuk mengakses sumber daya.
  5. Di Langkah 2: Cakupan Azure:

    1. Pilih Tingkat Cakupan. Pilih Langganan, Grup Manajemen, atau Ruang Kerja Pembelajaran Mesin. Grup manajemen adalah kontainer yang membantu Anda mengelola akses, kebijakan, dan kepatuhan di beberapa langganan. Ruang Kerja Pembelajaran Mesin adalah tempat untuk membuat artefak pembelajaran mesin.

      • Untuk cakupan Langganan, masukkan parameter berikut:

        Pengaturan Deskripsi
        Langganan untuk koneksi layanan Harus diisi. Pilih nama langganan Azure yang dapat diakses oleh identitas terkelola Anda.
        Grup sumber daya untuk koneksi layanan Opsional. Masukkan untuk membatasi akses identitas terkelola ke satu grup sumber daya.
      • Untuk cakupan Grup Manajemen, masukkan parameter berikut:

        Pengaturan Deskripsi
        Grup Manajemen Harus diisi. Pilih grup manajemen Azure.
      • Untuk cakupan ruang kerja Pembelajaran Mesin, masukkan parameter berikut:

        Pengaturan Deskripsi
        Langganan Harus diisi. Pilih nama langganan Azure.
        Grup sumber daya untuk koneksi layanan Opsional. Pilih grup sumber daya yang berisi ruang kerja.
        Ruang kerja ML Workspace Harus diisi. Masukkan nama ruang kerja Azure Pembelajaran Mesin yang sudah ada.
    2. Di bagian Langkah 3: Detail koneksi layanan: masukkan atau pilih parameter berikut:

      Pengaturan Deskripsi
      Nama Koneksi Layanan Harus diisi. Nama yang Anda gunakan untuk merujuk ke koneksi layanan ini di properti tugas. Bukan nama langganan Azure Anda.
      Referensi Manajemen Layanan Opsional. Informasi konteks dari database ITSM.
      Keterangan Opsional. Masukkan deskripsi koneksi layanan.
    3. Di bagian Keamanan , pilih Berikan izin akses ke semua alur untuk mengizinkan semua alur menggunakan koneksi layanan ini. Jika Anda tidak memilih opsi ini, Anda harus memberikan akses secara manual ke setiap alur yang menggunakan koneksi layanan ini.

    4. Pilih Simpan untuk memvalidasi dan membuat koneksi layanan.

Mengonversi koneksi layanan yang ada untuk menggunakan federasi identitas beban kerja

Anda dapat dengan cepat mengonversi koneksi layanan Azure Resource Manager yang ada untuk menggunakan federasi identitas beban kerja untuk autentikasi alih-alih rahasia. Anda dapat menggunakan alat konversi koneksi layanan di Azure DevOps jika koneksi layanan Anda memenuhi persyaratan berikut:

  • Azure DevOps awalnya membuat koneksi layanan. Jika Anda membuat koneksi layanan secara manual, Anda tidak dapat mengonversi koneksi layanan dengan menggunakan alat konversi koneksi layanan karena Azure DevOps tidak memiliki izin untuk mengubah kredensialnya sendiri.
  • Hanya satu proyek yang menggunakan koneksi layanan. Anda tidak dapat mengonversi koneksi lintas layanan proyek.

Untuk mengonversi koneksi layanan:

  1. Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.

    Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.

  2. Pilih koneksi layanan yang ingin Anda konversi untuk menggunakan identitas beban kerja.

  3. Pilih Konversi.

    Cuplikan layar yang memperlihatkan pemilihan konversi untuk kredensial federasi.

    Jika Anda memiliki kredensial yang sudah ada dengan rahasia kedaluwarsa, Anda akan melihat opsi lain untuk dikonversi.

    Cuplikan layar yang memperlihatkan opsi untuk mengonversi untuk menggunakan kredensial federasi saat Anda memiliki sertifikat yang kedaluwarsa.

  4. Pilih Konversi lagi untuk mengonfirmasi bahwa Anda ingin membuat koneksi layanan baru.

    Konversi mungkin memakan waktu beberapa menit. Jika Anda ingin mengembalikan koneksi, Anda harus mengembalikannya dalam waktu tujuh hari.

Mengonversi beberapa koneksi layanan dengan skrip

Gunakan skrip untuk memperbarui beberapa koneksi layanan sekaligus untuk sekarang menggunakan federasi identitas beban kerja untuk autentikasi.

Contoh skrip PowerShell ini memerlukan dua parameter: organisasi Azure DevOps (misalnya: https://dev.azure.com/fabrikam-tailspin) dan proyek Azure DevOps (misalnya: Space game web agent). Skrip kemudian mengambil koneksi layanan terkait untuk proyek dan organisasi Azure DevOps Anda.

Saat mengonversi koneksi layanan untuk menggunakan federasi identitas beban kerja, Anda diminta untuk mengonfirmasi pembaruan untuk setiap koneksi yang belum menggunakannya. Setelah konfirmasi, skrip memperbarui koneksi layanan ini melalui REST API Azure DevOps untuk menggunakan federasi identitas beban kerja.

Skrip memerlukan PowerShell 7.3 atau yang lebih baru dan Azure CLI untuk dijalankan. Simpan skrip ke .ps1 file dan jalankan menggunakan PowerShell 7.

#!/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)'"
}

Memulihkan koneksi layanan yang sudah ada yang menggunakan kunci rahasia

Anda dapat memulihkan koneksi layanan otomatis yang telah dikonversi dengan kunci rahasianya selama tujuh hari. Setelah tujuh hari, buat rahasia baru secara manual.

Jika Anda membuat dan mengonversi koneksi layanan secara manual, Anda tidak dapat mengembalikan koneksi layanan dengan menggunakan alat konversi koneksi layanan karena Azure DevOps tidak memiliki izin untuk memodifikasi kredensialnya sendiri.

Untuk mengembalikan koneksi layanan:

  1. Di proyek Azure DevOps, buka Alur>Koneksi layanan.

  2. Pilih koneksi layanan yang tersedia untuk dikembalikan ke keadaan semula.

  3. Pilih Kembalikan konversi ke skema asli.

    Cuplikan layar yang memperlihatkan memilih untuk mengembalikan kredensial federasi.

  4. Pilih Kembalikan lagi untuk mengonfirmasi pilihan Anda.

Membuat koneksi layanan yang menggunakan prinsipal layanan yang ada

Jika Anda ingin menggunakan sekumpulan izin akses yang telah ditentukan sebelumnya dan Anda belum memiliki perwakilan layanan yang ditentukan untuk tujuan ini, ikuti salah satu tutorial ini untuk membuat perwakilan layanan baru:

Untuk membuat koneksi layanan yang menggunakan prinsipal layanan yang sudah ada:

  1. Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.

    Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.

  2. Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager dan Berikutnya.

    Cuplikan layar yang memperlihatkan pilihan Azure Resource Manager.

  3. Pilih Principal Layanan (manual) dan Berikutnya.

    Cuplikan layar yang memperlihatkan pemilihan metode autentikasi manual untuk prinsip layanan.

  4. Dari dialog Koneksi layanan Azure Baru, pilih Lingkungan. Jika Anda memilih Azure Stack, masukkan URL lingkungan, yang merupakan sesuatu seperti https://management.local.azurestack.external.

  5. Pilih Tingkat Cakupan. Pilih Langganan atau Grup Manajemen. Grup manajemen adalah kontainer yang membantu Anda mengelola akses, kebijakan, dan kepatuhan di beberapa langganan.

    • Untuk cakupan Langganan, masukkan parameter berikut:

      Pengaturan Deskripsi
      ID Langganan Harus diisi. Masukkan ID langganan Azure.
      Nama Langganan Harus diisi. Masukkan nama langganan Azure.
    • Untuk cakupan Grup Manajemen, masukkan parameter berikut:

      Pengaturan Deskripsi
      Id Grup Manajemen Harus diisi. Masukkan ID grup manajemen Azure.
      Nama Grup Manajemen Harus diisi. Masukkan nama grup manajemen Azure.
  6. Di bagian Autentikasi , masukkan atau pilih parameter berikut:

    Pengaturan Deskripsi
    Id Perwakilan Layanan Harus diisi. Masukkan ID perwakilan layanan.
    Kredensial Pilih Kunci Utama Layanan atau Sertifikat. Jika Anda memilih Kunci Prinsipal Layanan, masukkan kunci (kata sandi). Jika Anda memilih Sertifikat, masukkan sertifikat.
    ID Penyewa Harus diisi. Masukkan ID penyewa.
    Verifikasi Pilih untuk memvalidasi pengaturan yang Anda masukkan.
  7. Di bagian Detail, masukkan parameter berikut:

    Pengaturan Deskripsi
    Nama Koneksi Harus diisi. Nama yang Anda gunakan untuk merujuk ke koneksi layanan ini di properti tugas. Bukan nama langganan Azure Anda.
    Keterangan Opsional. Masukkan deskripsi koneksi layanan.
    Keamanan Pilih Berikan izin akses ke semua alur untuk mengizinkan semua alur menggunakan koneksi layanan ini. Jika Anda tidak memilih opsi ini, Anda harus memberikan akses secara manual ke setiap alur yang menggunakan koneksi layanan ini.
  8. Pilih Verifikasi dan simpan untuk memvalidasi dan membuat koneksi layanan.

Bantuan dan dukungan