[ English | 한국어 (대한민국) | English (United Kingdom) | Indonesia | français | русский | Deutsch ]

Sicherheitseinstellungen

Dieses Kapitel enthält Informationen zum Konfigurieren bestimmter Sicherheitseinstellungen für Ihre OpenStack-Ansible-Cloud.

Zum Verständnis des Sicherheitsdesigns siehe Sicherheit.

[ English | 한국어 (대한민국) | English (United Kingdom) | Indonesia | français | русский | Deutsch ]

Sichern von Diensten mit SSL-Zertifikaten

Das OpenStack Security Guide empfiehlt die sichere Kommunikation zwischen verschiedenen Diensten in einer OpenStack-Bereitstellung. Das OpenStack-Ansible-Projekt bietet derzeit die Möglichkeit, SSL-Zertifikate für die sichere Kommunikation zwischen Diensten zu konfigurieren:

Alle öffentlichen Endpoints befinden sich hinter haproxy, was zur Folge hat, dass die einzige Umgebung, die die meisten Umgebungen benötigen, die Zertifikate für haproxy sind.

Bei der Bereitstellung mit OpenStack-Ansible können Sie entweder selbst signierte Zertifikate verwenden, die während des Bereitstellungsprozesses generiert werden, oder SSL-Zertifikate, Schlüssel und CA-Zertifikate von Ihrer eigenen vertrauenswürdigen Zertifizierungsstelle bereitstellen. In stark gesicherten Umgebungen werden vertrauenswürdige, vom Benutzer bereitgestellte Zertifikate für so viele Dienste wie möglich verwendet.

Bemerkung

Führen Sie die Konfiguration des SSL-Zertifikats in der Datei `` / etc / openstack_deploy / user_variables.yml`` durch. Bearbeiten Sie die Playbooks oder Rollen nicht selbst.

Selbstsignierte Zertifikate

Mit selbstsignierten Zertifikaten können Sie Daten schnell starten und verschlüsseln. Sie bieten jedoch kein hohes Maß an Vertrauen für hochsichere Umgebungen. Standardmäßig werden selbstsignierte Zertifikate in OpenStack-Ansible verwendet. Wenn selbstsignierte Zertifikate verwendet werden, wird die Zertifikatsprüfung automatisch deaktiviert.

Subjektdaten für selbstsignierte Zertifikate einstellen

Ändern Sie die Betreffdaten jedes selbstsignierten Zertifikats mithilfe von Konfigurationsvariablen. Die Konfigurationsvariable für jeden Dienst ist als `` formatiert <servicename> _ssl_self_signed_subject``. Um beispielsweise die Betreffdaten des SSL-Zertifikats für HAProxy zu ändern, passen Sie die Datei &quot;/ etc / openstack_deploy / user_variables.yml&quot; wie folgt an:

haproxy_ssl_self_signed_subject: "/C=US/ST=Texas/L=San Antonio/O=IT/CN=haproxy.example.com"

Weitere Informationen zu den verfügbaren Feldern im Zertifikatsbetreff finden Sie in der OpenSSL-Dokumentation für den Unterbefehl req.

Generieren und Regenerieren von selbstsignierten Zertifikaten

Während der ersten Ausführung des Playbooks werden für jeden Dienst selbstsignierte Zertifikate generiert.

Um ein neues selbstsigniertes Zertifikat für einen Service zu generieren, müssen Sie das `` 'festlegen <servicename> _ssl_self_signed_regen`` Variable auf eine der folgenden Weisen auf true:

  • Um zu erzwingen, dass ein selbstsigniertes Zertifikat neu generiert wird, können Sie die Variable in der Befehlszeile an &quot;openstack-ansible&quot; übergeben:

    # openstack-ansible -e "horizon_ssl_self_signed_regen=true" os-horizon-install.yml
    
  • Um zu erzwingen, dass sich ein selbstsigniertes Zertifikat bei jedem Playbook-Lauf neu generiert, setzen Sie die entsprechende Regenerierungsoption auf True. Wenn Sie beispielsweise das Playbook &quot;haproxy&quot; bereits ausgeführt haben, aber das selbstsignierte Zertifikat neu generieren möchten, setzen Sie die Variable `` haproxy_ssl_self_signed_regen`` auf `` true`` im `` /etc/openstack_deploy/user_variables.yml`` Datei:

    haproxy_ssl_self_signed_regen: true
    

Bemerkung

Das erneute Generieren selbstsignierter Zertifikate ersetzt die vorhandenen Zertifikate unabhängig davon, ob sie selbstsigniert oder vom Benutzer bereitgestellt werden.

Vom Benutzer bereitgestellte Zertifikate

Für zusätzliches Vertrauen in hochsichere Umgebungen können Sie Ihre eigenen SSL-Zertifikate, Schlüssel und CA-Zertifikate bereitstellen. Das Abrufen von Zertifikaten von einer vertrauenswürdigen Zertifizierungsstelle liegt außerhalb des Geltungsbereichs dieses Dokuments. Im Abschnitt Certificate Management des Linux-Dokumentationsprojekts wird jedoch erläutert, wie Sie Ihre eigene Zertifizierungsstelle erstellen und Zertifikate signieren.

Verwenden Sie den folgenden Prozess, um von Benutzern bereitgestellte SSL-Zertifikate in OpenStack-Ansible bereitzustellen:

  1. Kopieren Sie Ihre SSL-Zertifikat-, Schlüssel- und CA-Zertifikatdateien auf den Bereitstellungshost.

  2. Geben Sie den Pfad zu Ihrem SSL-Zertifikat, Schlüssel und CA-Zertifikat in der Datei `` / etc / openstack_deploy / user_variables.yml`` an.

  3. Führen Sie das Playbook für diesen Dienst aus.

Beispiel für HAProxy

Die zu setzenden Variablen, die den Zertifikaten für die HAProxy-Konfiguration den Pfad auf dem Implementierungsknoten bereitstellen, sind:

haproxy_user_ssl_cert: /etc/openstack_deploy/ssl/example.com.crt
haproxy_user_ssl_key: /etc/openstack_deploy/ssl/example.com.key
haproxy_user_ssl_ca_cert: /etc/openstack_deploy/ssl/ExampleCA.crt

RabbitMQ Beispiel

Um von Benutzern bereitgestellte Zertifikate für RabbitMQ bereitzustellen, kopieren Sie die Zertifikate auf den Implementierungshost, bearbeiten Sie die Datei `` / etc / openstack_deploy / user_variables.yml`` und legen Sie die folgenden drei Variablen fest:

rabbitmq_user_ssl_cert:    /etc/openstack_deploy/ssl/example.com.crt
rabbitmq_user_ssl_key:     /etc/openstack_deploy/ssl/example.com.key
rabbitmq_user_ssl_ca_cert: /etc/openstack_deploy/ssl/ExampleCA.crt

Führen Sie dann das Playbook aus, um die Zertifikate anzuwenden:

# openstack-ansible rabbitmq-install.yml

Das Playbook stellt das von Ihnen bereitgestellte SSL-Zertifikat, den Schlüssel und das CA-Zertifikat für jeden RabbitMQ-Container bereit.

Der Prozess ist für die anderen Dienste identisch. Ersetzen Sie rabbitmq in den vorhergehenden Konfigurationsvariablen durch` horizon`, haproxy oder` keystone`. Führen Sie dann das Playbook für diesen Dienst aus, um von Benutzern bereitgestellte Zertifikate für diese Dienste bereitzustellen.

LetsEncrypt certificates

The HAProxy ansible role supports using LetsEncrypt to automatically deploy trusted SSL certificates for the public endpoint. Each HAProxy server will individually request a LetsEncrypt certificate.

The http-01 type challenge is used by certbot to deploy certificates so it is required that the public endpoint is accessible directly on the internet.

Deployment of certificates using LetsEncrypt has been validated for openstack-ansible using Ubuntu Bionic. Other distributions should work but are not tested.

To deploy certificates with LetsEncrypt, add the following to /etc/openstack_deploy/user_variables.yml to enable the letsencrypt function in the haproxy ansible role, and to create a new backend service called letsencrypt to service http-01 challenge requests.

haproxy_ssl: true
haproxy_ssl_letsencrypt_enable: True
haproxy_ssl_letsencrypt_install_method: "distro"
haproxy_ssl_letsencrypt_setup_extra_params: "--http-01-address {{ ansible_host }} --http-01-port 8888"
haproxy_ssl_letsencrypt_email: "email.address@example.com"

haproxy_extra_services:
  # an internal only service for acme-challenge whose backend is certbot running on any haproxy instance
  - service:
      haproxy_service_name: letsencrypt
      haproxy_backend_nodes: "{{ groups['haproxy_all'] }}"
      backend_rise: 1                       #rise quickly to detect certbot running without delay
      backend_fall: 2
      haproxy_bind:
        - 127.0.0.1                         #bind to the localhost as the host internal IP will be used by certbot
      haproxy_port: 8888
      haproxy_balance_type: http

Copy the whole variable haproxy_default_services from /opt/openstack-ansible/inventory/group_vars/haproxy/haproxy.yml to /etc/openstack_deploy/group_vars/haproxy/haproxy_all.yml and update the section for horizon to include the ACL redirects http-01 challenges to the HAProxy letsencrypt backend as follows:

- service:
    haproxy_service_name: horizon
    haproxy_backend_nodes: "{{ groups['horizon_all'] | default([]) }}"
    haproxy_ssl: "{{ haproxy_ssl }}"
    haproxy_ssl_all_vips: true
    haproxy_port: "{{ haproxy_ssl | ternary(443,80) }}"
    haproxy_backend_port: 80
    haproxy_redirect_http_port: 80
    haproxy_balance_type: http
    haproxy_balance_alg: source
    haproxy_backend_options:
      - "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
    haproxy_service_enabled: "{{ groups['horizon_all'] is defined and groups['horizon_all'] | length > 0 }}"
    haproxy_redirect_scheme: "https if !{ ssl_fc } !{ path_beg /.well-known/acme-challenge/ }"   #redirect all non-ssl traffic to ssl except acme-challenge
    haproxy_frontend_acls:                                 #use a frontend ACL specify the backend to use for acme-challenge
      letsencrypt-acl:
          rule: "path_beg /.well-known/acme-challenge/"
          backend_name: letsencrypt

[ English | 한국어 (대한민국) | English (United Kingdom) | Indonesia | français | русский | Deutsch ]

Aufhärtbar auftragen

Die ansible-hardening -Rolle gilt für physische Hosts innerhalb einer OpenStack-Ansible-Bereitstellung, die als ein beliebiger Typ von Knoten, Infrastruktur oder Computer ausgeführt werden. Standardmäßig ist die Rolle aktiviert. Sie können es deaktivieren, indem Sie den Wert der Variablen `` apply_security_hardening`` in der `` user_variables.yml`` Datei auf `` false`` setzen:

apply_security_hardening: false

Sie können Konfigurationen zur Sicherheitssicherung auf eine vorhandene Umgebung anwenden oder eine Umgebung mithilfe eines mit OpenStack-Ansible gelieferten Playbooks überwachen:

# Apply security hardening configurations
  openstack-ansible security-hardening.yml

# Perform a quick audit by using Ansible's check mode
  openstack-ansible --check security-hardening.yml

Weitere Informationen zu den Sicherheitskonfigurationen finden Sie in der Dokumentation security hardening role.