Aplikasi Service Fabric dan manifes layanan

Arsitektur layanan mikro dapat memberikan banyak manfaat. Namun, mengelola keamanan layanan mikro adalah tantangan dan berbeda dengan mengelola keamanan aplikasi monolitik tradisional.

Dengan monolit, aplikasi biasanya berjalan pada satu atau lebih server dalam jaringan dan lebih mudah untuk mengidentifikasi port dan API dan alamat IP yang terbuka. Seringnya,ada satu perimeter atau batas dan satu database untuk dilindungi. Jika sistem itu rentan karena pelanggaran atau serangan keamanan, kemungkinan segala sesuatu dalam sistem akan tersedia untuk penyerang. Dengan layanan mikro, sistemnya lebih kompleks. Layanan terdesentralisasi dan didistribusikan di banyak host dan bermigrasi dari host ke host. Dengan keamanan yang tepat, Anda membatasi hak istimewa yang bisa diperoleh penyerang dan jumlah data yang tersedia dalam satu serangan dengan melanggar satu layanan. Komunikasi tidak internal, tetapi terjadi melalui jaringan, dan ada banyak port yang terbuka dan interaksi antara layanan. Mengetahui interaksi layanan ini dan waktu kejadian sangat penting untuk keamanan aplikasi Anda.

Artikel ini bukan panduan untuk keamanan layanan mikro, ada banyak sumber daya yang tersedia secara online, tetapi menggambarkan perbedaan berbagai aspek keamanan dapat dicapai dalam Service Fabric.

Autentikasi dan Otorisasi

Seringnya, sumber daya dan API butuh diekspos oleh layanan untuk dibatasi pada pengguna atau klien tepercaya tertentu. Autentikasi adalah proses memastikan identitas pengguna dengan andal. Otorisasi adalah proses yang membuat API atau layanan tersedia untuk beberapa pengguna yang diautentikasi tetapi bukan yang lain.

Autentikasi

Langkah pertama untuk membuat keputusan kepercayaan tingkat API adalah autentikasi. Autentikasi adalah proses memastikan identitas pengguna dengan andal. Dalam skenario layanan mikro, autentikasi biasanya ditangani secara terpusat. Jika Anda menggunakan API Gateway, Anda dapat membongkar autentikasi ke gateway. Jika Anda menggunakan pendekatan ini, pastikan bahwa masing-masing layanan tidak dapat dihubungi secara langsung (tanpa API Gateway) kecuali keamanan tambahan ada diterapkan untuk mengautentikasi pesan apakah ini berasal dari gateway atau tidak.

Jika layanan dapat diakses secara langsung, layanan autentikasi seperti ID Microsoft Entra atau layanan mikro autentikasi khusus yang bertindak sebagai layanan token keamanan (STS) dapat digunakan untuk mengautentikasi pengguna. Keputusan kepercayaan dibagikan antara layanan dengan token keamanan atau cookie.

Misalnya ASP.NET Core, mekanisme utama untuk mengautentikasi pengguna adalah sistem keanggotaan ASP.NET Core Identity. ASP.NET Core Identity menyimpan informasi pengguna (termasuk informasi masuk, peran, dan klaim) di penyimpanan data yang dikonfigurasi oleh developer. ASP.NET Core Identity mendukung autentikasi dua faktor. Penyedia autentikasi eksternal juga didukung, sehingga pengguna dapat login menggunakan proses autentikasi yang ada dari penyedia seperti Microsoft, Google, Facebook, atau Twitter.

Authorization

Setelah autentikasi, layanan perlu mengotorisasi akses pengguna atau menentukan hal yang dapat dilakukan pengguna. Proses ini memungkinkan layanan untuk membuat API tersedia untuk beberapa pengguna yang diautentikasi, tetapi tidak untuk semua. Otorisasi bersifat ortogonal dan terpisah dari autentikasi dan ini merupakan proses memastikan pengguna. Autentikasi dapat membuat satu atau beberapa identitas untuk pengguna saat ini.

Otorisasi ASP.NET Core dapat dilakukan berdasarkan peran pengguna atau berdasarkan kebijakan kustom yang mungkin termasuk memeriksa klaim atau heuristik lainnya.

Membatasi dan mengamankan akses menggunakan API gateway

Aplikasi cloud biasanya memerlukan gateway ujung depan untuk menyediakan satu titik masuk bagi pengguna, perangkat, atau aplikasi lainnya. Gateway API berada di antara klien dan layanan dan merupakan titik entri ke semua layanan yang menyediakan aplikasi Anda. Ini bertindak sebagai proksi terbalik, permintaan perutean dari klien ke layanan. Ini juga dapat melakukan berbagai tugas lintas sektor seperti autentikasi dan otorisasi, penghentian TLS, dan pembatasan tarif. Jika Anda tidak menggunakan gateway, klien harus mengirim permintaan langsung ke layanan front-end.

Dalam Service Fabric, gateway dapat berupa layanan stateless seperti aplikasi ASP.NET Core, atau layanan lain yang dirancang untuk jalan masuk lalu lintas, seperti Traefik, Event Hubs, IoT Hub, atau Azure API Management.

API Management terintegrasi langsung dengan Service Fabric, memungkinkan Anda menerbitkan API dengan serangkaian aturan perutean yang kaya ke layanan Service Fabric back-end Anda. Anda dapat mengamankan akses ke layanan backend, mencegah serangan DOS menggunakan pembatasan, atau memverifikasi key API, token JWT, sertifikat, dan kredensial lainnya. Untuk mempelajari selengkapnya, baca Service Fabric dengan ringkasan Azure API Management.

Mengelola rahasia aplikasi

Rahasia dapat berupa informasi sensitif apa pun, seperti string koneksi penyimpanan, kata sandi, atau nilai lain yang tidak boleh ditangani dalam teks biasa. Artikel ini menggunakan Azure Key Vault untuk mengelola key dan rahasia. Namun, menggunakan rahasia dalam aplikasi adalah cloud platform-agnostic untuk memungkinkan aplikasi disebarkan ke kluster yang di-host di mana saja.

Cara yang disarankan untuk mengelola pengaturan konfigurasi layanan adalah melalui paket konfigurasi layanan. Paket konfigurasi dibuat versinya dan dapat diperbarui melalui peningkatan bergulir terkelola dengan validasi kesehatan dan rollback otomatis. Ini lebih cocok untuk konfigurasi global karena mengurangi kemungkinan ketidaktersediaan layanan global. Begitu pula dengan rahasia terenkripsi. Service Fabric memiliki fitur bawaan untuk mengenkripsi dan mendekripsi nilai dalam paket konfigurasi Settings.xml menggunakan enkripsi sertifikat.

Diagram berikut mengilustrasikan alur dasar untuk manajemen rahasia dalam aplikasi Service Fabric:

secret management overview

Ada empat langkah utama dalam alur ini:

  1. Dapatkan sertifikat penyandian data.
  2. Pasang sertifikat di kluster Anda.
  3. Enkripsi nilai rahasia saat menyebarkan aplikasi dengan sertifikat dan injeksikan ke file konfigurasi Settings.xml layanan.
  4. Baca nilai terenkripsi dari Settings.xml dengan mendekripsi menggunakan sertifikat penyandian yang sama.

Azure Key Vault digunakan di sini sebagai lokasi penyimpanan yang aman untuk sertifikat dan sebagai cara untuk mendapatkan sertifikat yang dipasang pada klaster Service Fabric di Azure. Jika Anda tidak menerapkan Key Vault ke Azure, Anda tidak perlu menggunakannya untuk mengelola rahasia di aplikasi Service Fabric.

Untuk contohnya, lihat Mengelola rahasia aplikasi.

Mengamankan lingkungan hosting

Dengan menggunakan Azure Service Fabric, Anda dapat mengamankan aplikasi yang berjalan di kluster di bawah akun pengguna yang berbeda. Service Fabric juga membantu mengamankan sumber daya yang digunakan oleh aplikasi pada saat penyebaran pada akun pengguna - misalnya, file, direktori, dan sertifikat. Hal ini membuat aplikasi yang sedang berjalan, bahkan di lingkungan yang dihosting bersama, lebih aman satu sama lain.

Manifes aplikasi menyatakan prinsip keamanan (pengguna dan grup) yang diperlukan menjalankan layanan dan sumber daya yang aman. Prinsip keamanan ini disebutkan dalam kebijakan, misalnya kebijakan jalankan-sebagai, pengikatan titik akhir, berbagi paket, atau akses keamanan. Kebijakan kemudian diterapkan pada sumber daya layanan di bagian ServiceManifestImport dari manifes aplikasi.

Saat menyatakan prinsip, Anda juga dapat menentukan dan membuat grup pengguna sehingga satu atau beberapa pengguna dapat ditambahkan ke setiap grup untuk dikelola bersama- sama. Ini berguna jika ada beberapa pengguna untuk titik masuk layanan yang berbeda dan mereka harus memiliki hak istimewa umum tertentu yang tersedia di tingkat grup.

Secara default, aplikasi Service Fabric berjalan di bawah akun yang Fabric.exe berjalan di bawah. Service Fabric juga menyediakan kemampuan untuk menjalankan aplikasi berdasarkan akun pengguna lokal atau akun sistem lokal yang ditentukan dalam manifes aplikasi. Untuk informasi selengkapnya, lihat Menjalankan layanan sebagai akun pengguna lokal atau akun sistem lokal. Anda juga dapat Menjalankan skrip startup layanan sebagai pengguna lokal atau akun sistem.

Jika menjalankan Service Fabric pada kluster terpisah Windows, Anda dapat menjalankan layanan di akun domain Active Directory atau akun layanan terkelola grup.

Kontainer aman

Service Fabric menyediakan mekanisme untuk layanan di dalam kontainer untuk mengakses sertifikat yang diinstal pada node di kluster Windows atau Linux (versi 5.7 atau lebih tinggi). Sertifikat PFX ini dapat digunakan untuk mengautentikasi aplikasi atau layanan atau komunikasi yang aman dengan layanan lain. Untuk informasi selengkapnya, lihat Mengimpor sertifikat ke kontainer.

Selain itu, Service Fabric juga mendukung gMSA (group Managed Service Accounts) untuk kontainer Windows. Untuk informasi selengkapnya, lihat Menyiapkan gMSA untuk kontainer Windows.

Mengamankan komunikasi layanan

Dalam Service Fabric, layanan dijalankan di suatu tempat di kluster Service Fabric, biasanya didistribusikan di beberapa VM. Service Fabric menyediakan beberapa opsi untuk mengamankan komunikasi layanan Anda.

Anda dapat mengaktifkan titik akhir HTTPS di layanan web ASP.NET Core atau Java Anda.

Anda dapat membangun koneksi yang aman antara proksi dan layanan terbalik sehingga memungkinkan saluran aman end to end. Menyambungkan ke layanan aman hanya didukung ketika reverse proxy dikonfigurasi untuk mendengarkan di HTTPS. Untuk informasi tentang mengonfigurasi proksi terbalik, baca Proksi terbalik di Azure Service Fabric. Tersambung ke layanan aman menjelaskan cara membuat koneksi aman antara proksi terbalik dan layanan.

Kerangka kerja aplikasi Layanan Andal menyediakan beberapa tumpukan dan alat komunikasi bawaan yang dapat digunakan untuk meningkatkan keamanan. Pelajari cara meningkatkan keamanan saat Anda menggunakan remoting layanan (di C# atau Java)atau menggunakan WCF.

Menyertakan sertifikat titik akhir dalam aplikasi Service Fabric

Untuk mengonfigurasi sertifikat titik akhir aplikasi Anda, sertakan sertifikat dengan menambahkan elemen EndpointCertificate bersama dengan elemen Pengguna untuk akun utama ke manifes aplikasi. Secara default akun utama adalah NetworkService. Ini akan menyediakan manajemen kunci privat sertifikat aplikasi ACL untuk prinsipal yang disediakan.

<ApplicationManifest … >
  ...
  <Principals>
    <Users>
      <User Name="Service1" AccountType="NetworkService" />
    </Users>
  </Principals>
  <Certificates>
    <EndpointCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbprint]"/>
  </Certificates>
</ApplicationManifest>

Mengenkripsi data aplikasi tidak aktif

Setiap jenis node dalam kluster Service Fabric yang berjalan di Azure didukung oleh set skala komputer virtual. Menggunakan templat Azure Resource Manager, Anda dapat melampirkan disk data ke kumpulan skala yang membentuk kluster Service Fabric. Jika layanan menyimpan data ke disk data yang disertakan, Anda dapat mengenkripsi disk data tersebut untuk melindungi data aplikasi Anda.

Langkah berikutnya