Menyebarkan aplikasi dengan Identitas Terkelola ke kluster terkelola Service Fabric
Untuk menerapkan aplikasi Service Fabric dengan identitas terkelola, aplikasi perlu digunakan melalui Azure Resource Manager, biasanya dengan templat Azure Resource Manager. Untuk informasi selengkapnya tentang cara menyebarkan aplikasi Service Fabric melalui Azure Resource Manager, lihat Menyebarkan aplikasi ke kluster terkelola menggunakan Azure Resource Manager.
Catatan
Aplikasi yang tidak digunakan sebagai sumber daya Azure tidak dapat memiliki Identitas Terkelola.
Penyebaran aplikasi Service Fabric dengan Identitas Terkelola didukung dengan versi API "2021-05-01"
pada kluster terkelola.
Contoh templat klaster terkelola tersedia di sini: Templat kluster terkelola Service Fabric
Dukungan identitas terkelola di kluster terkelola Service Fabric
Ketika aplikasi Service Fabric dikonfigurasi dengan Identitas terkelola untuk sumber daya Azure dan disebarkan ke kluster, maka akan memicu konfigurasi otomatis Layanan Token Identitas Terkelola di kluster terkelola Service Fabric. Layanan ini bertanggung jawab atas autentikasi aplikasi Service Fabric menggunakan identitas terkelola mereka, dan untuk mendapatkan token akses atas nama mereka. Setelah layanan diaktifkan, Anda dapat melihatnya di Service Fabric Explorer di bagian Sistem di panel kiri, berjalan dengan nama fabric:/System/ManagedIdentityTokenService.
Catatan
Saat pertama kali aplikasi disebarkan dengan Identitas Terkelola, Anda akan melihat satu kali penyebaran yang lebih lama karena perubahan konfigurasi kluster otomatis. Diperkirakan ini akan memakan waktu dari 15 menit untuk kluster zona hingga 45 menit untuk kluster yang menjangkau zona. Jika ada penyebaran lain dalam penerbangan, konfigurasi Identitas Terkelola harus menunggu penyebaran selesai terlebih dahulu.
Sumber daya aplikasi mendukung penugasan SystemAssigned atau UserAssigned, dan penugasan dapat dilakukan seperti yang ditunjukkan pada cuplikan di bawah ini.
{
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"apiVersion": "2021-05-01",
"identity": {
"type": "SystemAssigned",
"userAssignedIdentities": {}
},
}
Identitas User-Assigned
Untuk mengaktifkan aplikasi dengan identitas User-Assigned, pertama-tama tambahkan properti identitas ke sumber daya aplikasi dengan jenis userAssigned dan identitas yang ditetapkan pengguna yang direferensikan. Kemudian tambahkan bagian managedIdentities di dalam bagian properti untuk sumber daya aplikasi yang berisi daftar nama yang ramah ke pemetaan principalId untuk setiap identitas user-assigned. Untuk informasi selengkapnya tentang Identitas User Assigned, lihat Membuat, mencantumkan, atau menghapus identitas user-assigned.
Templat aplikasi
Untuk mengaktifkan aplikasi dengan User Assigned identity, pertama-tama tambahkan properti identitas ke sumber daya aplikasi dengan jenis userAssigned dan identitas yang ditetapkan pengguna yang direferensikan, lalu tambahkan objek managedIdentities di dalam bagian properti yang berisi daftar nama yang mudah dipahami ke pemetaan principalId untuk setiap identitas yang ditetapkan pengguna.
{
"apiVersion": "2021-05-01",
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[parameters('applicationVersion')]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
],
"identity": {
"type" : "userAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]": {}
}
},
"properties": {
"version": "[parameters('applicationVersion')]",
"parameters": {
},
"managedIdentities": [
{
"name" : "[parameters('userAssignedIdentityName')]",
"principalId" : "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName')), '2018-11-30').principalId]"
}
]
}
}
Dalam contoh di atas, nama sumber daya identitas yang ditetapkan pengguna digunakan sebagai nama yang mudah dipahami dari identitas terkelola untuk aplikasi. Contoh berikut mengasumsikan nama yang mudah dipahami secara aktual adalah "AdminUser".
Paket aplikasi
Untuk setiap identitas yang ditentukan dalam bagian
managedIdentities
di templat Azure Resource Manager, tambahkan tag<ManagedIdentity>
dalam manifes aplikasi di bawah bagian Prinsipal. AtributName
harus cocok dengan propertiname
yang ditentukan di bagianmanagedIdentities
.ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="AdminUser" /> </ManagedIdentities> </Principals>
Di bagian ServiceManifestImport, tambahkan IdentityBindingPolicy untuk layanan yang menggunakan Managed Identity. Kebijakan ini memetakan identitas
AdminUser
ke nama identitas khusus layanan yang perlu ditambahkan ke dalam manifes layanan di kemudian hari.ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" /> </Policies> </ServiceManifestImport>
Perbarui manifes layanan untuk menambahkan ManagedIdentity di dalam bagian Sumber Daya dengan nama yang cocok dengan
ServiceIdentityRef
diIdentityBindingPolicy
manifes aplikasi:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Identitas terkelola yang ditetapkan sistem
Templat aplikasi
Untuk mengaktifkan aplikasi dengan identitas terkelola yang ditetapkan sistem, tambahkan properti identitas ke sumber daya aplikasi, dengan jenis systemAssigned seperti yang ditunjukkan pada contoh di bawah ini:
{
"apiVersion": "2021-05-01",
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'), '/versions/', parameters('applicationTypeVersion'))]"
],
"identity": {
"type" : "systemAssigned"
},
"properties": {
"typeName": "[parameters('applicationTypeName')]",
"typeVersion": "[parameters('applicationTypeVersion')]",
"parameters": {
}
}
}
Properti ini menyatakan (kepada Azure Resource Manager, dan Managed Identity and Service Fabric Resource Providers, masing-masing, bahwa sumber daya ini harus memiliki identitas terkelola implisit (system assigned
).
Paket aplikasi dan layanan
Perbarui manifes aplikasi untuk menambahkan elemen ManagedIdentity di bagian Prinsipal, yang berisi satu entri seperti yang ditunjukkan di bawah ini:
ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="SystemAssigned" /> </ManagedIdentities> </Principals>
Ini memetakan identitas yang ditetapkan ke aplikasi sebagai sumber daya untuk nama panggilan, untuk tugas lebih lanjut ke layanan yang terdiri dari aplikasi.
Di bagian ServiceManifestImport yang sesuai dengan layanan yang diberi identitas terkelola, tambahkan elemen IdentityBindingPolicy, seperti yang ditunjukkan di bawah ini:
ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" /> </Policies> </ServiceManifestImport>
Elemen ini menetapkan identitas aplikasi ke layanan; tanpa penugasan ini, layanan tidak akan dapat mengakses identitas aplikasi. Dalam potongan di atas,
SystemAssigned
identitas (yang merupakan kata kunci yang dipesan) dipetakan ke definisi layanan di bawah nama yang ramahWebAdmin
.Perbarui manifes layanan untuk menambahkan elemen ManagedIdentity di dalam bagian Sumber Daya dengan nama yang cocok dengan nilai setelan
ServiceIdentityRef
dari definisiIdentityBindingPolicy
dalam manifes aplikasi:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Ini adalah pemetaan identitas yang setara ke layanan seperti yang dijelaskan di atas, tetapi dari perspektif definisi layanan. Di sini identitas dirujuk dengan nama sapaannya (
WebAdmin
), seperti yang dideklarasikan dalam manifes aplikasi.