Koneksi ke Azure dengan menggunakan koneksi layanan Azure Resource Manager

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

Anda dapat menggunakan koneksi layanan Azure Resource Manager untuk menyambungkan ke sumber daya Azure melalui autentikasi perwakilan layanan atau melalui identitas layanan terkelola Azure. Jika Anda menggunakan koneksi layanan Resource Manager, Anda dapat menggunakan alur untuk menyebarkan ke sumber daya Azure seperti aplikasi Azure App Service tanpa mengautentikasi setiap kali.

Anda memiliki beberapa opsi untuk menyambungkan ke Azure dengan menggunakan koneksi layanan Azure Resource Manager:

  • Perwakilan layanan atau identitas terkelola dengan federasi identitas beban kerja
  • Perwakilan layanan dengan rahasia
  • Identitas terkelola yang ditetapkan agen

Untuk mempelajari tentang jenis koneksi lain dan untuk informasi umum tentang membuat dan menggunakan koneksi, lihat Koneksi layanan untuk build dan rilis.

Membuat koneksi layanan Azure Resource Manager yang menggunakan federasi identitas beban kerja

Federasi identitas beban kerja menggunakan OpenID Koneksi (OIDC) untuk mengautentikasi dengan sumber daya yang dilindungi Microsoft Entra tanpa menggunakan rahasia.

Kami menyarankan agar Anda 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 ke Azure Government Cloud.
  • Tugas ekstensi Marketplace apa pun yang Anda gunakan diperbarui untuk mendukung federasi identitas beban kerja.

Membuat koneksi layanan federasi identitas beban kerja baru

  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.

    Cuplikan layar yang memperlihatkan memilih jenis koneksi layanan identitas beban kerja.

  3. Pilih Federasi identitas beban kerja (otomatis).

    Cuplikan layar yang memperlihatkan pemilihan jenis koneksi layanan identitas beban kerja.

  4. Tentukan parameter berikut:

    Parameter Deskripsi
    Langganan Pilih langganan Azure yang ada. Jika tidak ada langganan atau instans Azure yang muncul, lihat Memecahkan masalah koneksi layanan Azure Resource Manager.
    Grup Sumber Daya Biarkan kosong untuk memungkinkan pengguna mengakses semua sumber daya yang ditentukan dalam langganan. Untuk membatasi akses pengguna ke sumber daya, masukkan nama grup sumber daya. Pengguna kemudian hanya dapat mengakses sumber daya yang ditentukan untuk grup sumber daya tersebut.
    Nama koneksi layanan Harus diisi. Nama yang Anda gunakan untuk merujuk ke koneksi layanan ini di properti tugas. Bukan nama langganan Azure Anda.
  5. Setelah koneksi layanan baru dibuat, salin nama koneksi dan tempelkan ke kode Anda sebagai nilai untuk azureSubscription.

  6. Untuk menyebarkan ke sumber daya Azure tertentu, tugas memerlukan lebih banyak data tentang sumber daya tersebut. Buka sumber daya di portal Azure, lalu salin data ke dalam kode Anda. Misalnya, untuk menyebarkan aplikasi web, salin nama aplikasi Azure App Service dan tempelkan ke dalam kode Anda sebagai nilai untuk WebAppName.

Mengonversi koneksi layanan Azure Resource Manager 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 perwakilan layanan. 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 perwakilan layanan yang sudah ada dengan rahasia yang kedaluwarsa, Anda akan melihat opsi lain untuk mengonversi.

    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 Azure Resource Manager 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. Anda akan diminta untuk mengonfirmasi bahwa Anda ingin mengonversi setiap koneksi layanan terkait yang tidak menggunakan federasi identitas beban kerja. Jika Anda mengonfirmasi, skrip menggunakan REST API Azure DevOps untuk memperbarui setiap koneksi layanan untuk sekarang menggunakan federasi identitas beban kerja. Skrip memerlukan PowerShell 7.3 atau yang lebih baru dan Azure CLI untuk dijalankan. Simpan skrip ke file .ps1 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)'"
}

Mengembalikan koneksi Azure Resource Manager Service yang sudah ada yang menggunakan rahasia perwakilan layanan

Anda dapat mengembalikan koneksi layanan otomatis yang dikonversi dengan 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 Koneksi Layanan Alur>.

  2. Pilih koneksi layanan yang sudah ada untuk dikembalikan.

  3. Pilih Kembalikan konversi ke skema asli.

    Cuplikan layar yang memperlihatkan pemilihan kembali untuk kredensial federasi.

  4. Pilih Kembalikan lagi untuk mengonfirmasi pilihan Anda.

Membuat koneksi layanan Azure Resource Manager yang menggunakan rahasia perwakilan layanan

Kami menyarankan agar Anda menggunakan pendekatan ini jika semua item berikut ini benar untuk skenario Anda:

  • Anda masuk sebagai pemilik organisasi Azure Pipelines dan langganan Azure.
  • Anda tidak perlu membatasi izin lebih lanjut untuk sumber daya Azure yang diakses pengguna melalui koneksi layanan.
  • Anda tidak tersambung ke Azure Stack atau ke Azure Government Cloud.
  • Anda tidak tersambung dari Azure DevOps Server 2019 atau versi Team Foundation Server yang lebih lama.

Untuk membuat koneksi layanan:

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

    Di Team Foundation Server, pilih ikon Pengaturan di bilah menu atas untuk masuk ke halaman Layanan.

    Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.

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

    Cuplikan layar yang memperlihatkan memilih jenis koneksi layanan.

  3. Masukkan atau pilih parameter berikut:

    Parameter Deskripsi
    Nama Koneksi Harus diisi. Nama yang Anda gunakan untuk merujuk ke koneksi layanan ini di properti tugas. Bukan nama langganan Azure Anda.
    Tingkat cakupan Pilih Langganan atau Grup Manajemen. Grup manajemen adalah kontainer yang membantu Anda mengelola akses, kebijakan, dan kepatuhan di beberapa langganan.
    Langganan Jika Anda memilih Langganan untuk cakupan, pilih langganan Azure yang sudah ada. Jika tidak ada langganan atau instans Azure yang muncul, lihat Memecahkan masalah koneksi layanan Azure Resource Manager.
    Grup Manajemen Jika Anda memilih Grup Manajemen untuk cakupan, pilih grup manajemen Azure yang sudah ada. Untuk informasi selengkapnya, lihat Membuat grup manajemen.
    Grup Sumber Daya Biarkan kosong untuk memungkinkan pengguna mengakses semua sumber daya yang ditentukan dalam langganan. Untuk membatasi akses pengguna ke sumber daya, masukkan nama grup sumber daya. Pengguna kemudian hanya dapat mengakses sumber daya yang ditentukan untuk grup sumber daya tersebut.
  4. Setelah koneksi layanan baru dibuat:

    • Jika Anda menggunakan editor klasik, pilih nama koneksi yang Anda tetapkan di pengaturan langganan Azure alur Anda.
    • Jika Anda menggunakan file YAML, salin nama koneksi ke dalam kode Anda sebagai nilai untuk azureSubscription.
  5. Untuk menyebarkan ke sumber daya Azure tertentu, tambahkan informasi selengkapnya tentang sumber daya ke tugas:

    • Jika Anda menggunakan editor klasik, pilih data untuk ditambahkan ke tugas. Misalnya, pilih nama App Service.
    • Jika Anda menggunakan file YAML, buka sumber daya di portal Azure. Salin data yang Anda butuhkan dan tempelkan ke kode tugas Anda. Misalnya, untuk menyebarkan aplikasi web, salin nama aplikasi App Service dan tempelkan sebagai nilai untuk WebAppName dalam YAML tugas.

Catatan

Saat Anda mengikuti pendekatan ini, Azure DevOps terhubung dengan ID Microsoft Entra dan membuat pendaftaran aplikasi dengan rahasia yang berlaku selama tiga bulan. Ketika koneksi layanan akan kedaluwarsa, ID Microsoft Entra menampilkan perintah ini: Sertifikat atau rahasia akan segera kedaluwarsa. Buat yang baru. Dalam skenario ini, Anda harus menyegarkan koneksi layanan.

Untuk me-refresh koneksi layanan, di portal Azure DevOps, edit koneksi, lalu pilih Verifikasi. Setelah Anda menyimpan pengeditan, koneksi layanan berlaku selama tiga bulan lagi.

Kami menyarankan agar Anda menggunakan federasi identitas beban kerja alih-alih membuat rahasia. Jika Anda menggunakan federasi identitas beban kerja, Anda tidak perlu memutar rahasia, dan pendaftaran aplikasi mempertahankan tujuan yang dimaksudkan. Untuk mulai menggunakan federasi identitas beban kerja, buka halaman detail koneksi layanan dan pilih Konversi. Koneksi layanan dikonversi untuk menggunakan federasi identitas beban kerja alih-alih rahasia. Untuk informasi selengkapnya, lihat Mengonversi koneksi layanan Azure Resource Manager yang sudah ada untuk menggunakan federasi identitas beban kerja.

Untuk informasi selengkapnya, lihat Memecahkan masalah koneksi layanan Azure Resource Manager.

Jika Anda mengalami masalah saat menggunakan pendekatan ini (seperti tidak ada langganan yang ditampilkan dalam daftar dropdown) atau jika Anda ingin membatasi izin pengguna lebih lanjut, Anda dapat menggunakan perwakilan layanan atau komputer virtual dengan identitas layanan terkelola.

Membuat koneksi layanan Azure Resource Manager yang menggunakan perwakilan layanan yang ada

  1. 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:

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

    Di Team Foundation Server, pilih ikon Pengaturan di bilah menu atas untuk masuk ke halaman Layanan.

    Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.

  3. Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager.

    Cuplikan layar yang memperlihatkan memilih jenis koneksi layanan.

  4. Pilih opsi Perwakilan Layanan (manual), lalu masukkan detail perwakilan layanan.

    Cuplikan layar yang memperlihatkan pembukaan versi lengkap dialog layanan.

  5. Untuk nama Koneksi ion, masukkan nama tampilan yang akan digunakan untuk merujuk ke koneksi layanan ini.

  6. Untuk Lingkungan, pilih nama lingkungan (Azure Cloud, Azure Stack, atau Azure Government Cloud).

  7. Jika Anda tidak memilih Azure Cloud, masukkan URL lingkungan. Untuk Azure Stack, URL lingkungan adalah sesuatu seperti https://management.local.azurestack.external.

  8. Untuk Tingkat cakupan, pilih cakupan untuk koneksi:

    • Jika Anda memilih Langganan, pilih langganan Azure yang sudah ada. Jika tidak ada langganan atau instans Azure yang muncul, lihat Memecahkan masalah koneksi layanan Azure Resource Manager.
    • Jika Anda memilih Grup Manajemen, pilih grup manajemen Azure yang sudah ada. Untuk informasi selengkapnya, lihat Membuat grup manajemen.
  9. Dalam dialog langganan Azure, masukkan informasi berikut tentang perwakilan layanan Anda:

    • ID Langganan
    • Nama langganan
    • ID perwakilan layanan
    • Baik kunci klien perwakilan layanan atau, jika Anda memilih Sertifikat, masukkan konten sertifikat dan bagian kunci privat dari file *.pem .
    • ID Penyewa

    Anda bisa mendapatkan informasi ini dengan mengunduh dan menjalankan skrip Azure PowerShell. Saat diminta, masukkan nama langganan, kata sandi, peran (opsional), dan jenis cloud, seperti Azure Cloud (default), Azure Stack, atau Azure Government Cloud.

  10. Pilih Verifikasi koneksi untuk memvalidasi pengaturan yang Anda masukkan.

  11. Setelah koneksi layanan baru dibuat:

    • Jika Anda menggunakan koneksi layanan di UI, pilih nama koneksi yang Anda tetapkan di pengaturan langganan Azure alur Anda.
    • Jika Anda menggunakan koneksi layanan dalam file YAML, salin nama koneksi dan tempelkan ke dalam kode Anda sebagai nilai untuk azureSubscription.
  12. Jika perlu, ubah perwakilan layanan untuk mengekspos izin yang sesuai.

    Untuk informasi selengkapnya tentang mengautentikasi dengan menggunakan perwakilan layanan, lihat Menggunakan kontrol akses berbasis peran untuk mengelola akses ke sumber daya langganan Azure Anda atau posting blog Mengotomatiskan penyebaran grup sumber daya Azure dengan menggunakan perwakilan layanan di Visual Studio.

Untuk informasi selengkapnya, lihat Memecahkan masalah koneksi layanan Azure Resource Manager.

Membuat koneksi layanan Azure Resource Manager ke VM yang menggunakan identitas layanan terkelola

Catatan

Untuk menggunakan identitas layanan terkelola untuk mengautentikasi, Anda harus menggunakan agen yang dihost sendiri pada komputer virtual (VM) Azure.

Anda dapat mengonfigurasi agen berbasis Azure VM untuk menggunakan Identitas Layanan Terkelola Azure di ID Microsoft Entra. Dalam skenario ini, Anda menggunakan identitas yang ditetapkan sistem (perwakilan layanan) untuk memberikan akses agen berbasis Azure VM ke sumber daya Azure apa pun yang mendukung ID Microsoft Entra, seperti instans Azure Key Vault, alih-alih menyimpan kredensial di Azure DevOps untuk koneksi.

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

    Di Team Foundation Server, pilih ikon Pengaturan di bilah menu atas untuk masuk ke halaman Layanan.

    Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.

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

    Cuplikan layar yang memperlihatkan memilih jenis koneksi layanan.

  3. Pilih opsi Autentikasi Identitas Terkelola.

    Cuplikan layar yang memperlihatkan masuk ke pengaturan identitas layanan terkelola.

  4. Untuk nama Koneksi ion, masukkan nama tampilan yang akan digunakan saat Anda merujuk ke koneksi layanan ini.

  5. Untuk Lingkungan, pilih nama lingkungan (Azure Cloud, Azure Stack, atau Azure Government Cloud).

  6. Dalam dialog koneksi, masukkan nilai berikut dari langganan Anda:

    • ID Langganan
    • Nama langganan
    • ID Penyewa
  7. Setelah koneksi layanan baru dibuat:

    • Jika Anda menggunakan koneksi layanan di UI, pilih nama koneksi yang Anda tetapkan di pengaturan langganan Azure alur Anda.
    • Jika Anda menggunakan koneksi layanan dalam file YAML, salin nama koneksi ke dalam kode Anda sebagai nilai untuk azureSubscription.
  8. Pastikan bahwa VM (agen) memiliki izin yang sesuai.

    Misalnya, jika kode Anda perlu memanggil Azure Resource Manager, tetapkan VM peran yang sesuai dengan menggunakan kontrol akses berbasis peran (RBAC) di ID Microsoft Entra.

    Untuk informasi selengkapnya, lihat Bagaimana cara menggunakan identitas terkelola untuk sumber daya Azure? dan Menggunakan kontrol akses berbasis peran untuk mengelola akses ke sumber daya langganan Azure Anda.

Untuk informasi selengkapnya tentang proses ini, lihat Memecahkan masalah koneksi layanan Azure Resource Manager.

Koneksi ke Azure Government Cloud

Untuk informasi tentang menyambungkan ke Azure Government Cloud, lihat Koneksi dari Azure Pipelines (Azure Government Cloud).

Sambungkan ke Azure Stack

Untuk informasi tentang menyambungkan ke Azure Stack, lihat artikel berikut ini:

Bantuan dan dukungan