Menyambungkan ke Azure dengan koneksi layanan Azure Resource Manager
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
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. Opsi yang direkomendasikan adalah menggunakan federasi identitas beban kerja dengan pendaftaran aplikasi atau identitas terkelola.
Opsi koneksi layanan Azure Resource Manager yang direkomendasikan adalah:
- Pendaftaran aplikasi (otomatis) dengan federasi identitas beban kerja atau rahasia
- Identitas terkelola yang membuat kredensial federasi identitas beban kerja dan terhubung ke identitas terkelola yang ditetapkan pengguna yang ada. Gunakan opsi ini saat Anda tidak memiliki izin untuk membuat pendaftaran aplikasi.
Ada opsi autentikasi koneksi layanan Azure Resource Manager lainnya yang tidak disertakan dalam artikel ini:
Membuat pendaftaran aplikasi Azure Resource Manager (otomatis)
Saat membuat koneksi layanan Azure Resource Manager, Anda akan memilih antara dua jenis kredensial yang berbeda - federasi identitas beban kerja atau rahasia.
Membuat pendaftaran aplikasi Azure Resource Manager 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 meminta langganan, grup manajemen, atau Pembelajaran Mesin ruang kerja yang ingin Anda sambungkan dan membuat federasi identitas beban kerja untuk autentikasi.
Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.
Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.
Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager dan Berikutnya.
Pilih Pendaftaran aplikasi (otomatis) dengan federasi identitas Beban Kerja kredensial.
Pilih tingkat Cakupan. Pilih Langganan, Grup Manajemen, atau Pembelajaran Mesin Ruang Kerja. 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:
Parameter Deskripsi Langganan Harus diisi. Pilih langganan Azure. Grup sumber daya Harus diisi. Pilih grup sumber daya Azure. Untuk cakupan Grup Manajemen, pilih grup manajemen Azure.
Untuk cakupan ruang kerja Pembelajaran Mesin, masukkan parameter berikut:
Parameter 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 Azure Pembelajaran Mesin.
Masukkan nama koneksi Layanan.
Secara opsional, masukkan deskripsi untuk koneksi layanan.
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.
Pilih Simpan.
Setelah koneksi layanan baru dibuat, salin nama koneksi dan tempelkan ke kode Anda sebagai nilai untuk azureSubscription
.
Membuat pendaftaran aplikasi Azure Resource Manager dengan rahasia (otomatis)
Dengan pilihan ini, Azure DevOps secara otomatis meminta langganan, grup manajemen, atau ruang kerja Pembelajaran Mesin yang ingin Anda sambungkan dan buat rahasia untuk autentikasi.
Peringatan
Menggunakan rahasia memerlukan rotasi dan manajemen manual dan tidak disarankan. Federasi identitas beban kerja adalah jenis kredensial pilihan.
Anda dapat 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 lingkungan Azure US Government .
- Anda tidak tersambung dari Azure DevOps Server 2019 atau versi Team Foundation Server yang lebih lama.
Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.
Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.
Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager dan Berikutnya.
Pilih Pendaftaran aplikasi (otomatis) dengan Rahasia kredensial.
Pilih tingkat Cakupan. Pilih Langganan, Grup Manajemen, atau Pembelajaran Mesin Ruang Kerja. 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:
Parameter Deskripsi Langganan Harus diisi. Pilih langganan Azure. Grup sumber daya Harus diisi. Pilih grup sumber daya Azure. Untuk cakupan Grup Manajemen, pilih grup manajemen Azure.
Untuk cakupan ruang kerja Pembelajaran Mesin, masukkan parameter berikut:
Parameter 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 Azure Pembelajaran Mesin.
Masukkan nama koneksi Layanan.
Secara opsional, masukkan deskripsi untuk koneksi layanan.
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.
Pilih Simpan.
Setelah koneksi layanan baru dibuat, salin nama koneksi dan tempelkan ke kode Anda sebagai nilai untuk azureSubscription
.
Membuat koneksi layanan Azure Resource Manager 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 pengguna sebelum memulai.
Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.
Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.
Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager dan Berikutnya.
Pilih Identitas terkelola.
Di Langkah 1: Detail identitas terkelola:
- Pilih Langganan untuk Identitas Terkelola. Ini adalah langganan Azure yang berisi identitas terkelola Anda.
- Pilih Grup sumber daya untuk Identitas Terkelola. Ini adalah grup sumber daya yang berisi identitas terkelola Anda.
- Pilih Identitas Terkelola. Ini adalah identitas terkelola dalam grup sumber daya yang akan Anda gunakan untuk mengakses sumber daya.
Di Langkah 2: Cakupan Azure:
Pilih Tingkat Cakupan. Pilih Langganan, Grup Manajemen, atau Pembelajaran Mesin Ruang Kerja. 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:
Parameter Deskripsi Langganan untuk koneksi layanan Harus diisi. Pilih nama langganan Azure yang akan diakses 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:
Parameter Deskripsi Grup Manajemen Harus diisi. Pilih grup manajemen Azure. Untuk cakupan ruang kerja Pembelajaran Mesin, masukkan parameter berikut:
Parameter 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.
Di bagian Langkah 3: Detail koneksi layanan: masukkan atau pilih parameter berikut:
Parameter 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. 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.
Pilih Simpan untuk memvalidasi dan membuat koneksi layanan.
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 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:
Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.
Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.
Pilih koneksi layanan yang ingin Anda konversi untuk menggunakan identitas beban kerja.
Pilih Konversi.
Jika Anda memiliki kredensial yang sudah ada dengan rahasia kedaluwarsa, Anda akan melihat opsi lain untuk dikonversi.
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.
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)'"
}
Mengembalikan koneksi Azure Resource Manager Service yang sudah ada yang menggunakan rahasia
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:
Di proyek Azure DevOps, buka Koneksi Layanan Alur>.
Pilih koneksi layanan yang sudah ada untuk dikembalikan.
Pilih Kembalikan konversi ke skema asli.
Pilih Kembalikan lagi untuk mengonfirmasi pilihan Anda.
Membuat koneksi layanan Azure Resource Manager yang menggunakan perwakilan 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:
- Menggunakan portal untuk membuat aplikasi Microsoft Entra dan perwakilan layanan yang dapat mengakses sumber daya
- Menggunakan Azure PowerShell untuk membuat perwakilan layanan Azure yang memiliki sertifikat
Untuk membuat koneksi layanan yang menggunakan perwakilan layanan yang ada:
Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.
Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.
Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager dan Berikutnya.
Pilih Perwakilan layanan (manual) dan Berikutnya.
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
.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:
Parameter Deskripsi ID Langganan Harus diisi. Masukkan ID langganan Azure. Nama Langganan Harus diisi. Masukkan nama langganan Azure. Untuk cakupan Grup Manajemen, masukkan parameter berikut:
Parameter Deskripsi Id Grup Manajemen Harus diisi. Masukkan ID grup manajemen Azure. Nama Grup Manajemen Harus diisi. Masukkan nama grup manajemen Azure.
Di bagian Autentikasi , masukkan atau pilih parameter berikut:
Parameter Deskripsi Id Perwakilan Layanan Harus diisi. Masukkan ID perwakilan layanan. Informasi masuk Pilih Kunci Perwakilan Layanan atau Sertifikat. Jika Anda memilih Kunci Perwakilan 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. Di bagian Detail, masukkan 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. 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. Pilih Verifikasi dan simpan untuk memvalidasi dan membuat koneksi layanan.
Di proyek Azure DevOps, buka Pengaturan proyek>Koneksi layanan.
Untuk informasi selengkapnya, lihat Membuka pengaturan proyek.
Pilih Koneksi layanan baru, lalu pilih Azure Resource Manager.
Pada dialog Tambahkan koneksi layanan Azure Resource Manager, isi bidang sebagai berikut:
Masukkan Nama koneksi.
Pilih Lingkungan. Jika Anda memilih Azure Stack, masukkan URL lingkungan, yang merupakan sesuatu seperti
https://management.local.azurestack.external
.Pilih tingkat Cakupan, **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:
Parameter Deskripsi ID Langganan Harus diisi. Masukkan ID langganan Azure. Nama Langganan Harus diisi. Masukkan nama langganan Azure. Untuk cakupan Grup Manajemen, masukkan parameter berikut:
Parameter Deskripsi Id Grup Manajemen Harus diisi. Masukkan ID grup manajemen Azure. Nama Grup Manajemen Harus diisi. Masukkan nama grup manajemen Azure.
Masukkan Id Perwakilan layanan.
Pilih jenis kredensial:
- Kunci perwakilan layanan: Masukkan kunci perwakilan layanan (kata sandi).
- Sertifikat: Masukkan konten file .perm termasuk bagian sertifikat dan kunci privat.
Masukkan Id Penyewa.
Pilih Verifikasi koneksi untuk memvalidasi koneksi layanan.
Secara opsional, pilih Izinkan semua alur untuk menggunakan koneksi ini. Jika Anda tidak memilih opsi ini, Anda harus memberikan akses secara manual ke setiap alur yang menggunakan koneksi layanan ini.
Pilih Simpan untuk membuat koneksi layanan.
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
.
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.
Bantuan dan dukungan
- Jelajahi tips pemecahan masalah.
- Dapatkan saran tentang Stack Overflow.
- Posting pertanyaan Anda, cari jawaban, atau sarankan fitur di Komunitas Pengembang Azure DevOps.
- Dapatkan dukungan untuk Azure DevOps.