Menggunakan Azure PowerShell untuk membuat perwakilan layanan dengan sertifikat
Saat memiliki aplikasi atau skrip yang perlu mengakses sumber daya, Anda dapat menyiapkan identitas untuk aplikasi dan mengautentikasi aplikasi dengan kredensialnya sendiri. Identitas ini dikenal sebagai perwakilan layanan. Pendekatan ini memungkinkan Anda:
- Menetapkan izin ke identitas aplikasi yang berbeda dari izin Anda sendiri. Biasanya, izin ini dibatasi untuk apa tepatnya yang perlu dilakukan aplikasi.
- Menggunakan sertifikat untuk autentikasi ketika menjalankan skrip tanpa pengawasan.
Penting
Alih-alih membuat perwakilan layanan, pertimbangkan untuk menggunakan identitas terkelola untuk sumber daya Azure untuk identitas aplikasi Anda. Jika kode Anda berjalan pada layanan yang mendukung identitas terkelola dan mengakses sumber daya yang mendukung autentikasi Microsoft Entra, identitas terkelola adalah opsi yang lebih baik untuk Anda. Untuk mempelajari selengkapnya tentang identitas terkelola untuk sumber daya Azure, termasuk layanan mana yang saat ini mendukungnya, lihat Apa itu identitas terkelola untuk sumber daya Azure?.
Artikel ini memperlihatkan cara membuat perwakilan layanan yang mengautentikasi dengan sertifikat. Untuk menyiapkan perwakilan layanan dengan kata sandi, lihat Membuat perwakilan layanan Azure dengan Microsoft Azure PowerShell.
Anda harus memiliki PowerShell versi terbaru untuk artikel ini.
Catatan
Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.
Izin yang diperlukan
Untuk menyelesaikan artikel ini, Anda harus memiliki izin yang memadai di ID Microsoft Entra dan langganan Azure Anda. Secara khusus, Anda harus dapat membuat aplikasi di ID Microsoft Entra, dan menetapkan perwakilan layanan ke peran.
Cara term mudah untuk memeriksa apakah akun Anda memiliki izin yang memadai adalah melalui pusat admin Microsoft Entra.
Menetapkan aplikasi ke peran
Untuk mengakses sumber daya di langganan Anda, Anda harus menetapkan aplikasi ke peran. Tentukan peran mana yang menawarkan izin yang tepat untuk aplikasi. Untuk mempelajari tentang peran yang tersedia, lihat Peran bawaan Azure.
Anda dapat menetapkan cakupan di tingkat langganan, grup sumber daya, atau sumber daya. Izin diturunkan ke tingkat cakupan yang lebih rendah. Misalnya, menambahkan aplikasi ke peran Pembaca untuk grup sumber daya berarti dapat membaca grup sumber daya dan sumber daya apa pun di dalamnya. Untuk mengizinkan aplikasi menjalankan tindakan seperti instans boot ulang, mulai, dan hentikan, pilih peran Kontributor.
Membuat perwakilan layanan dengan sertifikat yang ditandatangani sendiri
Contoh berikut mencakup skenario sederhana. Hal ini menggunakan New-AzADServicePrincipal untuk membuat perwakilan layanan dengan sertifikat yang ditandatangani sendiri, dan menggunakan New-AzRoleAssignment untuk menetapkan peran Pembaca kepada perwakilan pelayanan. Penetapan peran dicakup ke langganan Azure yang Anda pilih saat ini. Untuk memilih langganan lain, gunakan Set-AzContext.
Catatan
Cmdlet New-SelfSignedCertificate dan modul PKI saat ini tidak didukung di PowerShell Core.
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" `
-Subject "CN=exampleappScriptCert" `
-KeySpec KeyExchange
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$sp = New-AzADServicePrincipal -DisplayName exampleapp `
-CertValue $keyValue `
-EndDate $cert.NotAfter `
-StartDate $cert.NotBefore
Sleep 20
New-AzRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $sp.AppId
Contoh tidur selama 20 detik untuk memungkinkan beberapa waktu bagi perwakilan layanan baru untuk menyebar ke seluruh ID Microsoft Entra. Jika skrip Anda tidak menunggu cukup lama, Anda akan melihat kesalahan yang menyatakan: "Utama {ID} tidak ada di direktori {DIR-ID}." Untuk mengatasi kesalahan ini, tunggu sebentar lalu jalankan perintah New-AzRoleAssignment lagi.
Anda dapat menjangkau penetapan peran ke grup sumber daya tertentu menggunakan parameter ResourceGroupName. Anda dapat menjangkau ke sumber daya tertentu juga dengan menggunakan parameter ResourceType dan ResourceName.
Jika Anda tidak memiliki Windows 10 atau Windows Server 2016, unduh cmdlet New-SelfSignedCertificateEx dari Solusi PKI. Ekstrak isinya dan impor cmdlet yang Anda butuhkan.
# Only run if you could not use New-SelfSignedCertificate
Import-Module -Name c:\ExtractedModule\New-SelfSignedCertificateEx.ps1
Dalam skrip, ganti dua baris berikut untuk membuat sertifikat.
New-SelfSignedCertificateEx -StoreLocation CurrentUser `
-Subject "CN=exampleapp" `
-KeySpec "Exchange" `
-FriendlyName "exampleapp"
$cert = Get-ChildItem -path Cert:\CurrentUser\my | where {$PSitem.Subject -eq 'CN=exampleapp' }
Menyediakan sertifikat melalui skrip PowerShell otomatis
Tiap kali Anda masuk sebagai perwakilan layanan, berikan ID penyewa direktori untuk aplikasi AD Anda. Penyewa adalah instans ID Microsoft Entra.
$TenantId = (Get-AzSubscription -SubscriptionName "Contoso Default").TenantId
$ApplicationId = (Get-AzADApplication -DisplayNameStartWith exampleapp).AppId
$Thumbprint = (Get-ChildItem cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq "CN=exampleappScriptCert" }).Thumbprint
Connect-AzAccount -ServicePrincipal `
-CertificateThumbprint $Thumbprint `
-ApplicationId $ApplicationId `
-TenantId $TenantId
Membuat perwakilan layanan dengan sertifikat dari Otoritas Sertifikat
Contoh berikut menggunakan sertifikat yang dikeluarkan dari Otoritas Sertifikat untuk membuat perwakilan layanan. Penugasan dicakup ke langganan Azure yang ditentukan. Ini menambahkan perwakilan layanan ke peran Pembaca. Jika terjadi kesalahan selama penetapan peran, ini akan mencoba kembali tugas tersebut.
Param (
[Parameter(Mandatory=$true)]
[String] $ApplicationDisplayName,
[Parameter(Mandatory=$true)]
[String] $SubscriptionId,
[Parameter(Mandatory=$true)]
[String] $CertPath,
[Parameter(Mandatory=$true)]
[String] $CertPlainPassword
)
Connect-AzAccount
Import-Module Az.Resources
Set-AzContext -Subscription $SubscriptionId
$CertPassword = ConvertTo-SecureString $CertPlainPassword -AsPlainText -Force
$PFXCert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList @($CertPath, $CertPassword)
$KeyValue = [System.Convert]::ToBase64String($PFXCert.GetRawCertData())
$ServicePrincipal = New-AzADServicePrincipal -DisplayName $ApplicationDisplayName
New-AzADSpCredential -ObjectId $ServicePrincipal.Id -CertValue $KeyValue -StartDate $PFXCert.NotBefore -EndDate $PFXCert.NotAfter
Get-AzADServicePrincipal -ObjectId $ServicePrincipal.Id
$NewRole = $null
$Retries = 0;
While ($NewRole -eq $null -and $Retries -le 6)
{
# Sleep here for a few seconds to allow the service principal application to become active (should only take a couple of seconds normally)
Sleep 15
New-AzRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $ServicePrincipal.AppId | Write-Verbose -ErrorAction SilentlyContinue
$NewRole = Get-AzRoleAssignment -ObjectId $ServicePrincipal.Id -ErrorAction SilentlyContinue
$Retries++;
}
$NewRole
Menyediakan sertifikat melalui skrip PowerShell otomatis
Tiap kali Anda masuk sebagai perwakilan layanan, berikan ID penyewa direktori untuk aplikasi AD Anda. Penyewa adalah instans ID Microsoft Entra.
Param (
[Parameter(Mandatory=$true)]
[String] $CertPath,
[Parameter(Mandatory=$true)]
[String] $CertPlainPassword,
[Parameter(Mandatory=$true)]
[String] $ApplicationId,
[Parameter(Mandatory=$true)]
[String] $TenantId
)
$CertPassword = ConvertTo-SecureString $CertPlainPassword -AsPlainText -Force
$PFXCert = New-Object `
-TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 `
-ArgumentList @($CertPath, $CertPassword)
$Thumbprint = $PFXCert.Thumbprint
Connect-AzAccount -ServicePrincipal `
-CertificateThumbprint $Thumbprint `
-ApplicationId $ApplicationId `
-TenantId $TenantId
ID aplikasi dan ID penyewa tidak sensitif, sehingga Anda dapat menyematkannya langsung di skrip Anda. Jika Anda perlu mengambil ID penyewa, gunakan:
(Get-AzSubscription -SubscriptionName "Contoso Default").TenantId
Jika Anda perlu mengambil ID aplikasi, gunakan:
(Get-AzADApplication -DisplayNameStartWith {display-name}).AppId
Mengubah kredensial
Untuk mengubah kredensial aplikasi AD, baik karena kompromi keamanan maupun masa berakhir kredensial, gunakan cmdlet Remove-AzADAppCredential dan New-AzADAppCredential.
Untuk menghapus semua kredensial aplikasi, gunakan:
Get-AzADApplication -DisplayName exampleapp | Remove-AzADAppCredential
Untuk menambahkan nilai sertifikat, buat sertifikat yang ditandatangani sendiri seperti yang diperlihatkan dalam artikel ini. Selanjutnya, gunakan:
Get-AzADApplication -DisplayName exampleapp | New-AzADAppCredential `
-CertValue $keyValue `
-EndDate $cert.NotAfter `
-StartDate $cert.NotBefore
Debug
Anda mungkin mendapatkan kesalahan berikut saat membuat perwakilan layanan:
"Authentication_Unauthorized" atau "Tidak ada langganan yang ditemukan dalam konteks." - Anda melihat kesalahan ini saat akun Anda tidak memiliki izin yang diperlukan pada ID Microsoft Entra untuk mendaftarkan aplikasi. Biasanya, Anda melihat kesalahan ini saat hanya pengguna admin di ID Microsoft Entra yang dapat mendaftarkan aplikasi, dan akun Anda bukan admin. Minta administrator Anda untuk menetapkan Anda ke peran administrator, atau untuk memungkinkan pengguna mendaftarkan aplikasi.
Akun Anda "tidak memiliki otorisasi untuk melakukan tindakan 'Microsoft.Authorization/roleAssignments/write' melalui cakupan '/subscriptions/{guid}'." - Anda melihat kesalahan ini ketika akun Anda tidak memiliki izin yang memadai untuk menetapkan peran ke identitas. Minta administrator langganan Anda untuk menambahkan Anda ke peran Administrator Akses Pengguna.
Langkah berikutnya
- Untuk menyiapkan perwakilan layanan dengan kata sandi, lihat Membuat perwakilan layanan Azure dengan Azure PowerShell atau Membuat perwakilan layanan Azure dengan Azure CLI.
- Untuk penjelasan lebih detail tentang aplikasi dan perwakilan layanan, lihat Objek Aplikasi dan Objek Perwakilan layanan.
- Untuk informasi selengkapnya tentang autentikasi Microsoft Entra, lihat Skenario Autentikasi untuk ID Microsoft Entra.
- Untuk informasi tentang bekerja dengan pendaftaran aplikasi menggunakan Microsoft Graph, lihat referensi API Aplikasi.