Keamanan pesan

Bagian ini membahas pendekatan pengerasan keamanan untuk tiga solusi antrian pesan paling umum yang digunakan di OpenStack: RabbitMQ, Qpid, dan ZeroMQ.

Keamanan pengiriman pesan

Solusi berbasis AMQP (Qpid and RabbitMQ) mendukung keamanan tingkat transportasi menggunakan TLS. Pesan ZeroMQ tidak mendukung TLS, namun keamanan tingkat transportasi dimungkinkan menggunakan label jaringan CIPSO atau labelled IPsec.

Kami sangat menyarankan mengaktifkan kriptografi tingkat transportasi untuk antrean pesan Anda. Menggunakan TLS untuk koneksi klien pesan memberi perlindungan terhadap komunikasi dari gangguan dan penyadapan transit ke server pesan. Berikut adalah panduan tentang bagaimana TLS biasanya dikonfigurasi untuk dua server pesan populer Qpid dan RabbitMQ. Saat mengkonfigurasi bundle certificate authority (CA) terpercaya dimana server pesan Anda memverifikasi koneksi klien, kami sarankan agar ini hanya terbatas pada CA yang digunakan untuk nodus Anda, sebaiknya CA dikelola secara internal. Paket CA yang tepercaya akan menentukan sertifikat klien mana yang akan diberi otorisasi dan melewati langkah verifikasi klien-server untuk menyiapkan koneksi TLS. Catatan, saat menginstal sertifikat dan file kunci, pastikan hak akses file dibatasi, misalnya menggunakan chmod 0600, dan kepemilikan dibatasi pada pengguna daemon server pesan untuk mencegah akses yang tidak sah oleh proses dan pengguna lain di server pesan

Konfigurasi SSL server RabbitMQ

Baris berikut harus ditambahkan ke file konfigurasi RabbitMQ sistem secara keseluruhan /etc/rabbitmq/rabbitmq.config:

[
  {rabbit, [
     {tcp_listeners, [] },
     {ssl_listeners, [{"<IP address or hostname of management network interface>", 5671}] },
     {ssl_options, [{cacertfile,"/etc/ssl/cacert.pem"},
                    {certfile,"/etc/ssl/rabbit-server-cert.pem"},
                    {keyfile,"/etc/ssl/rabbit-server-key.pem"},
                    {verify,verify_peer},
                    {fail_if_no_peer_cert,true}]}
   ]}
].

Perhatikan, opsi tcp_listeners diset ke [] untuk mencegahnya mendengarkan port non-SSL. Opsi ssl_listeners harus dibatasi hanya untuk mendengarkan pada jaringan manajemen untuk layanan.

Untuk informasi lebih lanjut tentang konfigurasi SSL RabbitMQ lihat:

Konfigurasi SSL server Qpid

Apache Foundation memiliki panduan keamanan olahpesan untuk Qpid. Lihat:

Antrian otentikasi dan kontrol akses

RabbitMQ dan Qpid menawarkan otentikasi dan mekanisme kontrol akses untuk mengendalikan akses ke antrian. ZeroMQ tidak menawarkan mekanisme semacam itu.

Simple Authentication and Security Layer (SASL) adalah kerangka kerja untuk otentikasi dan keamanan data dalam protokol Internet. Kedua RabbitMQ dan Qpid menawarkan SASL dan mekanisme otentikasi pluggable lainnya di luar nama pengguna dan password sederhana yang memungkinkan peningkatan keamanan otentikasi. Sementara RabbitMQ mendukung SASL, dukungan di OpenStack saat ini tidak mengizinkan mekanisme otentikasi SASL yang spesifik. Dukungan RabbitMQ di OpenStack memungkinkan otentikasi nama pengguna dan password melalui koneksi atau nama pengguna dan password yang tidak dienkripsi bersamaan dengan sertifikat klien X.509 untuk menetapkan koneksi TLS yang aman.

Sebaiknya konfigurasikan sertifikat klien X.509 pada semua node layanan OpenStack untuk koneksi klien ke antrian pesan dan jika mungkin (saat ini hanya Qpid) melakukan otentikasi dengan sertifikat klien X.509. Bila menggunakan nama pengguna dan kata sandi, akun harus dibuat per-service dan node untuk mendapatkan aksesibilitas yang lebih halus terhadap antrian.

Sebelum diterapkan, pertimbangkan perpustakaan TLS yang digunakan oleh server antrian. Qpid menggunakan perpustakaan NSS milik Mozilla, sedangkan RabbitMQ menggunakan modul TLS Erlang yang menggunakan OpenSSL.

​Contoh konfigurasi otentikasi: RabbitMQ

Di server RabbitMQ, hapus pengguna guest default:

# rabbitmqctl delete_user guest

Di server RabbitMQ, untuk setiap layanan atau simpul OpenStack yang berkomunikasi dengan antrian pesan, siapkan akun pengguna dan hak istimewa (privileges):

# rabbitmqctl add_user compute01 RABBIT_PASS
# rabbitmqctl set_permissions compute01 ".*" ".*" ".*"

Ganti RABBIT _PASS dengan password yang sesuai.

Untuk informasi konfigurasi tambahan lihat:

Konfigurasi layanan OpenStack: RabbitMQ

[DEFAULT]
rpc_backend = nova.openstack.common.rpc.impl_kombu
rabbit_use_ssl = True
rabbit_host = RABBIT_HOST
rabbit_port = 5671
rabbit_user = compute01
rabbit_password = RABBIT_PASS
kombu_ssl_keyfile = /etc/ssl/node-key.pem
kombu_ssl_certfile = /etc/ssl/node-cert.pem
kombu_ssl_ca_certs = /etc/ssl/cacert.pem

Contoh konfigurasi otentikasi: Qpid

Untuk informasi konfigurasi, lihat:

Konfigurasi layanan OpenStack: Qpid

[DEFAULT]
rpc_backend = nova.openstack.common.rpc.impl_qpid
qpid_protocol = ssl
qpid_hostname = <IP or hostname of management network interface of messaging server>
qpid_port = 5671
qpid_username = compute01
qpid_password = QPID_PASS

Opsional, jika menggunakan SASL dengan Qpid tentukan mekanisme SASL yang digunakan dengan menambahkan:

qpid_sasl_mechanisms = <space separated list of SASL mechanisms to use for auth>

Isolasi proses antrian pesan dan kebijakan

Setiap proyek menyediakan sejumlah layanan yang mengirim dan mengkonsumsi pesan. Setiap biner yang mengirimkan pesan diharapkan bisa mengkonsumsi pesan dari antrian, jika hanya menjawab.

Proses pelayanan antrian pesan harus diisolasi satu sama lain dan proses lainnya pada mesin.

Namespace

Namespace jaringan sangat dianjurkan untuk semua layanan yang berjalan di OpenStack Compute Hypervisors. Ini akan membantu mencegah terjerembabnya lalu lintas jaringan antara VM guest dan jaringan manajemen.

Saat menggunakan pesan ZeroMQ, setiap host harus menjalankan setidaknya satu penerima pesan ZeroMQ untuk menerima pesan dari jaringan dan meneruskan pesan ke proses lokal melalui IPC. Adalah mungkin dan disarankan untuk menjalankan penerima pesan independen per proyek dalam ruang nama IPC, bersama dengan layanan lainnya dalam proyek yang sama.

Kebijakan jaringan

Server antrian seharusnya hanya menerima koneksi dari jaringan manajemen. Ini berlaku untuk semua implementasi. Ini harus dilaksanakan melalui konfigurasi layanan dan secara opsional ditegakkan melalui kebijakan jaringan global.

Saat menggunakan pesan ZeroMQ, setiap proyek harus menjalankan proses penerima ZeroMQ terpisah di port yang didedikasikan untuk layanan yang termasuk dalam proyek itu. Ini setara dengan konsep AMQP tentang pertukaran kontrol.

Kontrol akses wajib (Mandatory Access Control)

Gunakan kontrol akses wajib (mandatory access control / MACs) dan discretionary access controls (DAC) untuk membatasi konfigurasi proses hanya pada proses tersebut. Pembatasan ini mencegah proses ini terisolasi dari proses lain yang berjalan pada mesin yang sama.