Membuat prinsipal layanan Azure dengan Microsoft Azure PowerShell

Peringatan

Modul AzureRM PowerShell telah resmi tidak digunakan lagi per 29 Februari 2024. Pengguna disarankan untuk bermigrasi dari AzureRM ke modul Az PowerShell untuk memastikan dukungan dan pembaruan yang berkelanjutan.

Meskipun modul AzureRM mungkin masih berfungsi, modul tersebut tidak lagi dipertahankan atau didukung, menempatkan penggunaan berkelanjutan berdasarkan kebijaksanaan dan risiko pengguna. Silakan merujuk ke sumber daya migrasi kami untuk panduan tentang transisi ke modul Az.

Jika Anda berencana mengelola aplikasi atau layanan dengan Azure PowerShell, Anda harus menjalankannya di bawah perwakilan layanan Azure Microsoft Entra, bukan kredensial Anda sendiri. Artikel ini akan menjelaskan cara membuat prinsipal keamanan dengan Azure PowerShell.

Catatan

Anda juga dapat membuat prinsipal layanan melalui portal Microsoft Azure. Untuk informasi selengkapnya, baca Menggunakan portal untuk membuat aplikasi dan prinsipal layanan Active Directory yang dapat mengakses sumber daya.

Apa itu prinsipal layanan?

Perwakilan layanan Azure adalah identitas keamanan yang digunakan oleh aplikasi, layanan, dan alat otomatisasi yang dibuat pengguna untuk mengakses sumber daya Azure tertentu. Anggap saja sebagai 'identitas pengguna' (nama pengguna dan kata sandi atau sertifikat) dengan peran tertentu, dan izin yang dikontrol dengan ketat. Perwakilan layanan hanya perlu melakukan hal-hal tertentu, berbeda dengan identitas pengguna umum. Prinsipal layanan meningkatkan keamanan jika Anda hanya memberinya tingkat izin minimum yang diperlukan untuk melakukan tugas pengelolaan.

Memverifikasi tingkat izin Anda sendiri

Pertama, Anda harus memiliki izin yang memadai di ID Microsoft Entra dan langganan Azure Anda. Anda harus mampu membuat aplikasi di Active Directory dan menetapkan peran ke prinsipal layanan.

Cara termudah untuk memeriksa apakah akun Anda memiliki izin yang tepat adalah melalui portal. Lihat Memeriksa izin yang diperlukan di portal.

Membuat prinsipal layanan untuk aplikasi Anda

Setelah masuk ke akun Azure, Anda dapat membuat prinsipal layanan. Anda harus memiliki salah satu cara berikut untuk mengidentifikasi aplikasi yang disebarkan:

  • Nama unik aplikasi yang Anda sebarkan, seperti "MyDemoWebApp" dalam contoh berikut, atau
  • ID Aplikasi, GUID unik yang terkait dengan aplikasi, layanan, atau objek yang disebarkan

Mendapatkan informasi tentang aplikasi Anda

Cmdlet Get-AzureRmADApplication dapat digunakan untuk mendapatkan informasi tentang aplikasi Anda.

Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName             : MyDemoWebApp
ObjectId                : 775f64cd-0ec8-4b9b-b69a-8b8946022d9f
IdentifierUris          : {http://MyDemoWebApp}
HomePage                : http://www.contoso.com
Type                    : Application
ApplicationId           : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
AvailableToOtherTenants : False
AppPermissions          :
ReplyUrls               : {}

Buat perwakilan layanan untuk aplikasi Anda

Cmdlet New-AzureRmADServicePrincipal digunakan untuk membuat prinsipal layanan.

$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId 00c01aaa-1603-49fc-b6df-b78c4e5138b4
Secret                : System.Security.SecureString
ServicePrincipalNames : {00c01aaa-1603-49fc-b6df-b78c4e5138b4, http://MyDemoWebApp}
ApplicationId         : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
AdfsId                :
Type                  : ServicePrincipal

Dari sini, Anda dapat langsung menggunakan properti $servicePrincipal.Secret di Connect-AzureRmAccount (lihat "Masuk menggunakan perwakilan layanan" di bawah), atau Anda dapat mengonversi SecureString ini menjadi string teks biasa untuk penggunaan berikutnya:

$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)

Masuk menggunakan prinsipal layanan

Anda kini dapat masuk sebagai perwakilan layanan untuk aplikasi Anda menggunakan appId yang Anda sediakan dan kata sandi yang dibuat secara otomatis. Anda juga memerlukan ID Penyewa untuk perwakilan layanan. ID Penyewa ditampilkan saat Anda masuk ke Azure dengan kredensial pribadi Anda. Untuk masuk dengan perwakilan layanan, gunakan perintah berikut:

$cred = New-Object System.Management.Automation.PSCredential ("00c01aaa-1603-49fc-b6df-b78c4e5138b4", $servicePrincipal.Secret)
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId 00000000-0000-0000-0000-000000000000

Setelah berhasil masuk, Anda akan melihat output seperti:

Environment           : AzureCloud
Account               : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
TenantId              : 00000000-0000-0000-0000-000000000000
SubscriptionId        :
SubscriptionName      :
CurrentStorageAccount :

Selamat! Anda dapat menggunakan kredensial ini untuk menjalankan aplikasi Anda. Selanjutnya, Anda perlu menyesuaikan izin prinsipal layanan.

Mengelola peran

Catatan

Azure Role-Based Access Control (RBAC) adalah model untuk menentukan dan mengelola peran pengguna dan prinsipal layanan. Peran memiliki serangkaian izin yang terkait dengannya, yang menentukan sumber daya yang dapat dibaca, diakses, ditulis, atau dikelola oleh prinsipal. Untuk informasi selengkapnya tentang RBAC dan peran, lihat RBAC: Peran bawaan.

Azure PowerShell menyediakan cmdlet berikut untuk mengelola penetapan peran:

Peran default untuk perwakilan layanan adalah Kontributor. Peran ini mungkin bukan pilihan terbaik tergantung pada ruang lingkup interaksi aplikasi Anda dengan layanan Azure, mengingat izinnya yang luas. Peran Pembaca lebih ketat dan dapat menjadi pilihan yang baik untuk aplikasi baca-saja. Anda dapat melihat detail tentang izin khusus peran atau membuat peran khusus melalui portal Azure.

Dalam contoh ini, kami menambahkan peran Pembaca ke contoh sebelumnya, dan menghapus Kontributor:

New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : b24988ac-6180-42a0-ab88-20f7382dd24c
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor

Untuk melihat peran yang ditetapkan saat ini:

Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal

Cmdlet Azure PowerShell lainnya untuk manajemen peran:

Mengubah kredensial prinsipal keamanan

Meninjau izin dan memperbarui kata sandi secara berkala merupakan praktik keamanan yang baik. Sebaiknya Anda juga mengelola dan mengubah kredensial keamanan saat aplikasi Anda berubah. Misalnya, kita dapat mengubah kata sandi prinsipal layanan dengan membuat kata sandi baru dan menghapus yang lama.

Menambahkan kata sandi baru untuk prinsipal layanan

New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
Secret    : System.Security.SecureString
StartDate : 11/16/2018 12:38:23 AM
EndDate   : 11/16/2019 12:38:23 AM
KeyId     : 6f801c3e-6fcd-42b9-be8e-320b17ba1d36
Type      : Password

Mendapatkan daftar kredensial untuk prinsipal layanan

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM ca9d4846-4972-4c70-b6f5-a4effa60b9bc Password

Menghapus kata sandi lama dari prinsipal layanan

Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId ca9d4846-4972-4c70-b6f5-a4effa60b9bc
Confirm
Are you sure you want to remove credential with keyId '6f801c3e-6fcd-42b9-be8e-320b17ba1d36' for
service principal objectId '698138e7-d7b6-4738-a866-b4e3081a69e4'.
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y

Memverifikasi daftar kredensial untuk prinsipal layanan

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password

Mendapatkan informasi tentang prinsipal layanan

$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object -Property *
ServicePrincipalNames : {http://MyDemoWebApp, 00c01aaa-1603-49fc-b6df-b78c4e5138b4}
ApplicationId         : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type                  : ServicePrincipal