Mesajlaşma güvenliği

Bu bölümde, OpenStack’da kullanılan üç en yaygın mesaj kuyruklama çözümü olan RabbitMQ, Qpid ve ZeroMQ için güvenlik sıkılaştırma yaklaşımları anlatılmaktadır.

Mesajlaşma taşıma güvenliği

AMQP tabanlı çözümler (Qpid ve RabbitMQ), TLS’yi kullanarak taşıma seviyesinde güvenliği desteklemektedir. ZeroMQ mesajlaşma doğal olarak TLS’yi desteklemez; ancak etiketli IPsec veya CIPSO ağ etiketleri kullanılarak taşıma seviyesinde güvenlik mümkündür.

Mesaj kuyruğunuz için taşıma düzeyinde şifrelemeyi etkinleştirmenizi şiddetle öneririz. Mesajlaşma istemcisi bağlantıları için TLS’i kullanmak, iletişimin mesajlaşma sunucusuna geçişte müdahale ve dinlemesini önler. TLS’nin tipik olarak iki popüler mesajlaşma sunucusu Qpid ve RabbitMQ için nasıl yapılandırıldığı hakkında rehberlik aşağıda verilmektedir. Mesajlaşma sunucunuzun istemci bağlantılarını doğrulamak için kullandığı güvenilir sertifika yetkilisi (CA) paketini yapılandırırken, bunun yalnızca düğümleriniz için kullanılan CA ile sınırlandırılması önerilir, tercihen de dahili olarak yönetilen bir CA’dır. Güvenilen CA’ların paketi, hangi istemci sertifikalarının yetkili olacağını belirleyecek ve TLS bağlantısını kurma istemci-sunucu doğrulama adımını iletecektir. Sertifika ve anahtar dosyalarını yüklerken, dosya izinlerinin sınırlandırıldığına, örneğin chmod 0600 kullanarak kısıtlandığına ve sahipliğin mesajlaşma sunucusundaki diğer süreçler ve kullanıcılar tarafından yetkisiz erişimi önlemek adına mesajlaşma sunucusu servis programı kullanıcısı olduğuna dikkat edin.

RabbitMQ sunucu SSL yapılandırması

Aşağıdaki satırlar sistem genelindeki RabbitMQ yapılandırma dosyasına eklenmelidir, genellikle /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}]}
   ]}
].

Not: tcp_listeners seçeneği, SSL olmayan bir portta dinlemesini önlemek için [] ya ayarlıdır. ssl_listeners seçeneği yalnızca yönetim ağında servisler için dinlenmek için sınırlandırılmalıdır.

RabbitMQ SSL yapılandırması hakkında daha fazla bilgi için bkz.:

Qpid sunucu SSL yapılandırması

Apache Vakfı, Qpid için bir mesaj güvenlik rehberi sunmaktadır. Bkz:

Kuyruk kimlik doğrulaması ve erişim kontrolü

RabbitMQ ve Qpid, kuyruklara erişimi kontrol etmek için kimlik doğrulama ve erişim kontrol mekanizmaları sunar. ZeroMQ’da böyle bir mekanizma bulunmamaktadır.

Basit Kimlik Doğrulama ve Güvenlik Katmanı (SASL), Internet protokollerinde kimlik doğrulama ve veri güvenliği için bir çatıdır. Hem RabbitMQ hem de Qpid, basit kullanıcı adlarının ve parolalarının ötesinde, artan kimlik doğrulama güvenliğine izin veren SASL ve diğer takılabilir kimlik doğrulama mekanizmalarını sunar. RabbitMQ, SASL’yi desteklerken, OpenStack’deki destek şu anda belirli bir SASL kimlik doğrulama mekanizması talep etmeye izin vermiyor. OpenStack’deki RabbitMQ desteği, şifrelenmemiş bir bağlantı üzerinden kullanıcı adı ve parola kimlik doğrulamasına veya güvenli TLS bağlantısını oluşturmak için X.509 istemci sertifikalarıyla birlikte kullanıcı adı ve parolasına izin verir.

Mesajlaşma sırasına istemci bağlantıları için tüm OpenStack servis düğümlerinde X.509 istemci sertifikalarını yapılandırmayı ve mümkün olan yerlerde (şu an sadece Qpid) X.509 istemci sertifikalarıyla kimlik doğrulama gerçekleştirmenizi öneririz. Kullanıcı adlarını ve parolaları kullanırken, kuyruğa erişimin daha hassas bir şekilde denetlenebilmesi için hesaplar servis başına ve düğüm başına oluşturulmalıdır.

Yayına almadan önce, kuyruklama sunucularının kullandığı TLS kitaplıklarını göz önünde bulundurun. Qpid, Mozilla’nın NSS kitaplığını kullanırken, RabbitMQ, OpenSSL’yi kullanan Erlang’in TLS modülünü kullanıyor.

Kimlik doğrulama yapılandırma örneği: RabbitMQ

RabbitMQ sunucusunda, öntanımlı guest kullanıcısını silin:

# rabbitmqctl delete_user guest

RabbitMQ sunucusunda, mesaj sırası ile iletişim kuran her OpenStack servisi veya düğüm için kullanıcı hesaplarını ve ayrıcalıkları ayarlayın:

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

RABBIT_PASS yerine uygun bir parola yazın.

Ek yapılandırma bilgisi için bkz.:

OpenStack servis yapılandırması: 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

Kimlik doğrulama yapılandırma örneği: Qpid

Yapılandırma bilgisi için bkz:

OpenStack servis yapılandırması: 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

İsteğe bağlı olarak, Qpid ile SASL kullanılıyorsa, kullanımdaki SASL mekanizmalarını aşağıdakileri ekleyerek belirtin:

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

Mesaj kuyruğu işlemi izolasyonu ve politikası

Her proje, mesaj gönderip tüketen bir dizi servis sunmaktadır. Bir ileti gönderen her ikili, yalnızca yanıtlarsa iletileri sıradan tüketmesi beklenir.

Mesaj kuyruğu servis işlemleri birbirinden ve diğer makinelerdeki işlemlerden izole edilmelidir.

İsim uzayları

Ağ ad alanları, OpenStack Hesaplama Hipervizörlerinde çalışan tüm servisler için şiddetle tavsiye edilir. Bu, VM konukları ve yönetim ağları arasındaki ağ trafiğinin köprülmesine karşı önlemeye yardımcı olur.

ZeroMQ mesajlaşmasını kullanırken, her sunucu, ağdan mesaj almak ve mesajları IPC aracılığıyla yerel süreçlere yönlendirmek için en az bir ZeroMQ mesaj alıcısı çalıştırmalıdır. Aynı proje içindeki diğer servisler ile birlikte, bir IPC ad alanında bir proje için bağımsız bir ileti alıcısı çalıştırmak mümkündür ve önerilir.

Ağ kuralı

Kuyruk sunucuları yalnızca yönetim ağından bağlantıları kabul etmelidir. Bu, tüm uygulamalar için de geçerlidir. Bu, servislerin yapılandırılması yoluyla uygulanmalı ve isteğe bağlı olarak küresel ağ ilkesi aracılığıyla uygulanmalıdır.

ZeroMQ mesajlaşmasını kullanırken, her proje, o projeye ait servisler için ayrılmış bir portta ayrı bir ZeroMQ alıcı işlemi çalıştırmalıdır. Bu, kontrol alışverişlerinin AMQP konseptine eşdeğerdir.

Sorunlu erişim kontrolleri

İşlemlerin yapılandırmasını yalnızca bu işlemlere sınırlandırmak için zorunlu erişim kontrollerini (MAC’ler) ve isteğe bağlı erişim denetimlerini (DAC’ler) kullanın. Bu kısıtlama, bu işlemlerin aynı makinede (çalışanların) çalıştığı diğer süreçlerden izole edilmesini önler.