Mengautentikasi Permintaan REST Service Fabric
Kluster Service Fabric dapat diamankan menggunakan sertifikat X.509, Kerberos, atau kombinasi sertifikat X.509 dan Kerberos. Artikel ini menjelaskan:
Cara mengedit manifes kluster untuk membuat HttpGatewayEndpoints (titik akhir REST) mematuhi solusi keamanan tertentu.
Cara memodifikasi panggilan REST untuk bekerja dengan setiap solusi (X.509, Kerberos, atau X.509 dengan Kerberos).
Http Gateway dengan Keamanan X.509
Di Azure dan lokal, titik akhir REST dukungan Service Fabric menggunakan sertifikat X.509 untuk:
Autentikasi dan otorisasi klien: Service Fabric dapat dikonfigurasi untuk memberikan akses pengguna, akses admin, atau tidak ada akses ke klien REST, tergantung pada sertifikat.
Autentikasi node Service Fabric: Klien REST dapat memverifikasi bahwa mereka berkomunikasi dengan salah satu node Service Fabric yang benar.
Enkripsi pesan (permintaan dan respons REST).
Catatan
Klien dengan akses pengguna hanya memiliki izin untuk permintaan baca (misalnya, https://localhost:19007/Nodes?api-version=6.0
). Klien dengan akses admin memiliki izin untuk permintaan baca dan permintaan tulis (contoh permintaan tulis, https://localhost:19007/Nodes/<NodeName>/$/Deactivate?api-version=6.0
).
Perubahan Manifes Kluster
Bagian ini mengasumsikan bahwa Anda sudah memiliki manifes kluster yang dikonfigurasi untuk menggunakan sertifikat X.509. Untuk mempelajari lebih lanjut, baca Mengamankan Kluster Menggunakan Sertifikat X.509.
Untuk mengonfigurasi kluster untuk mendukung autentikasi dan otorisasi klien (Pengguna dan Admin) dan autentikasi node Service Fabric, parameter berikut harus diatur dalam manifes kluster:
Thumbprint sertifikat server dan klien untuk setiap jenis node
<ClientCertificate X509FindValue="..." />
<ServerCertificate X509FindValue="..." />
Bagian keamanan
<Parameter Name="ClientRoleEnabled" Value="true" />
<Parameter Name="ServerAuthCredentialType" Value="X509" />
Parameter ClientAuthAllowedCommonNames
Parameter AdminAllowedCommonNames
Parameter ServerAuthAllowedCommonNames
Untuk mengaktifkan HttpGateway pada manifes kluster, yang sudah diamankan dengan X.509 (yaitu, keamanan kluster dan klien/server sudah diaktifkan), hanya perubahan ini yang diperlukan:
Atur Protokol semua elemen HttpGatewayEndpoint ke "https". Misalnya, <HttpGatewayEndpoint Port="19017" Protocol="https"/>
Aktifkan HttpGateway di bagian HttpGateway. Misalnya, <Parameter Name="IsEnabled" Value="true"/>
Cara Menggunakan REST API dengan X.509
Untuk Permintaan HTTPS aman X.509, buat sertifikat klien yang relevan (yang nama umumnya ditentukan dalam ClientAuthAllowedCommonNames atau AdminAllowedCommonNames) dan thumbprint sertifikat server.
Untuk titik akhir HTTP aman X.509, REST API tidak berubah. URL, Header HTTP, Permintaan, dan Badan Respons panggilan REST tidak akan berubah.
Http Gateway dengan Keamanan Kerberos (atau NTLM)
Kluster Service Fabric lokal dapat menggunakan Kerberos dan NTLM untuk mengautentikasi dan mengotorisasi klien pengguna dan admin, serta mengautentikasi server (node Service Fabric). Namun, Kerberos atau NTLM tidak dapat digunakan untuk mengenkripsi pesan.
Catatan
Disarankan untuk menggunakan HTTPS dan untuk memastikan manifes kluster menyertakan sertifikat server saat menggunakan Kerberos.
Kami sangat menyarankan pelanggan yang menggunakan keamanan Kerberos untuk juga menggunakan HTTPS. Ini berarti bahwa kluster harus memiliki sertifikat server X.509. Dengan cara ini sertifikat server akan digunakan untuk mengenkripsi komunikasi.
Manfaat utama menggunakan autentikasi Kerberos alih-alih sertifikat X.509 untuk klien adalah kerberos menyederhanakan manajemen sertifikat klien.
Service Fabric memungkinkan klien untuk diautentikasi melalui NTLM alih-alih Kerberos. Microsoft tidak merekomendasikan penggunaan NTLM. Untuk informasi selengkapnya, lihat Pertimbangan Keamanan untuk Pelaksana.
Gunakan Kerberos alih-alih NTLM jika memungkinkan.
Perubahan Manifes Kluster
Bagian ini mengasumsikan bahwa Anda sudah memiliki manifes kluster yang dikonfigurasi untuk menggunakan Kerberos untuk autentikasi klien dan sertifikat X.509 untuk autentikasi dan enkripsi server. Untuk mempelajari lebih lanjut, baca Mengamankan Kluster Menggunakan Keamanan Windows.
Cara Menggunakan REST API dengan Kerberos
REST API tidak berubah saat menggunakan REST API untuk berkomunikasi dengan kluster yang diaktifkan Kerberos. URL, Header HTTP, Permintaan, dan Badan Respons panggilan REST tidak akan berubah.
Namun, Anda harus mengikuti proses Autentikasi HTTP Kerberos dan NTLM standar.
Perhatikan bahwa:
Sebagian besar klien HTTP secara otomatis mengikuti proses ini.
Jika server diketahui diamankan dengan Kerberos/NTLM, server dapat dimulai pada langkah 3 dalam proses berikut. Ini akan menghapus satu hop jaringan.
REST dengan Proses Autentikasi Kerberos
Berikut ini adalah contoh urutan proses autentikasi Kerberos menggunakan REST.
Panggil REST API tanpa header HTTP tambahan:
GET http://localhost:19007/Nodes?api-version=6.0 HTTP/1.1 User-Agent: Fiddler Host: localhost:19007
Kluster yang memungkinkan Kerberos akan membalas dengan 401 Tidak Sah dan mengatur header www-authenticate ke "Negosiasi":
HTTP/1.1 401 Unauthorized Server: Microsoft-HTTPAPI/2.0 WWW-Authenticate: Negotiate Date: Thu, 09 Jan 2014 08:20:55 GMT Content-Length: 0
Klien sekarang perlu mendapatkan Token dengan menghubungi AD-nya (federasi atau timbal balik) dengan SPN layanan.
SPN layanan ini adalah HTTP\FQDN dari node Service Fabric yang dihubungi".
Token yang dikembalikan oleh AD harus digunakan di Header Otorisasi dengan format "Negosiasikan <token>"
GET http://localhost:19007/Nodes?api-version=6.0 HTTP/1.1 User-Agent: Fiddler Host: localhost:19007 Authorization: Negotiate YH8GBisG<…>CSqGSIb3EgECAgYKKwYBBAGCNwICHqI/BD1OVE<…>RNT05E
Server akan mengautentikasi token dan jika klien berwenang untuk menyelesaikan operasi, server akan mulai menjalankan permintaan.
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Server: Microsoft-HTTPAPI/2.0 Date: Thu, 09 Jan 2014 08:38:43 GMT Content-Length: 1457 [{"Name":"Node4","IpAddressOrFQDN":"localhost","Type":"NodeType04","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":false,"UpgradeDomain":"MYUD1","FaultDomain":"fd:\/RACK2","Id":{"Id":"b5bd41bc26a079f4df3791b2b5d42e5"}},{"Name":"Node1","IpAddressOrFQDN":"localhost","Type":"NodeType01","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":true,"UpgradeDomain":"MYUD1","FaultDomain":"fd:\/RACK1","Id":{"Id":"10152272d1e44a94356a41d96dc9b466"}},{"Name":"Node2","IpAddressOrFQDN":"localhost","Type":"NodeType02","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":true,"UpgradeDomain":"MYUD2","FaultDomain":"fd:\/RACK2","Id":{"Id":"15091e9851978afe10f2f3ab37c1d2f0"}},{"Name":"Node5","IpAddressOrFQDN":"localhost","Type":"NodeType05","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":false,"UpgradeDomain":"MYUD2","FaultDomain":"fd:\/RACK1","Id":{"Id":"6e48b9c722325a66f805e2890bb7dd30"}},{"Name":"Node3","IpAddressOrFQDN":"localhost","Type":"NodeType03","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":true,"UpgradeDomain":"MYUD3","FaultDomain":"fd:\/RACK1","Id":{"Id":"880f1f5072c2c4805e9cb15ec710d083"}}]