2.3. メッセージブローカーのインストール

完全な Red Hat OpenStack Platform 環境をデプロイするには、稼働中のメッセージブローカーを以下の OpenStack コンポーネントに設定する必要があります。
  • Block Storage サービス
  • Compute サービス
  • OpenStack Networking
  • Orchestration サービス
  • Image サービス
  • Telemetry サービス

2.3.1. RabbitMQ メッセージブローカーパッケージのインストール

RabbitMQ はデフォルト (かつ推奨) のメッセージブローカーです。RabbitMQ メッセージングサービスは rabbitmq-server パッケージにより提供されます。
RabbitMQ をインストールします。
# yum install rabbitmq-server

2.3.2. メッセージブローカーのトラフィックを許可するためのファイアウォール設定

メッセージブローカーをインストールおよび設定する前には、使用するポートで受信接続を許可しておく必要があります。メッセージブローカー (AMQP) のトラフィック用のデフォルトポートは 5672 です。以下の手順で記載するステップはすべて、メッセージングサービスをホストするサーバーに root ユーザーとしてログインして実行する必要があります。

手順2.8 メッセージブローカーのトラフィックのファイアウォール設定

  1. テキストエディターで /etc/sysconfig/iptables ファイルを開きます。
  2. このファイルに、ポート 5672 で 受信接続を許可する INPUT ルールを追加します。新規ルールは、トラフィックを REJECT する INPUT ルールよりも前に記載する必要があります。
    -A INPUT -p tcp -m tcp --dport 5672  -j ACCEPT
  3. /etc/sysconfig/iptables ファイルへの変更を保存します。
  4. iptables サービスを再起動して、ファイアウォールの変更を有効にします。
    # systemctl restart iptables.service

2.3.3. RabbitMQ メッセージブローカーの起動と設定

手順2.9 RabbitMQ メッセージブローカーを OpenStack で使用するための起動および設定手順

  1. rabbitmq-server サービスを立ち上げ、ブート時に起動するように設定します。
    # systemctl start rabbitmq-server.service
    # systemctl enable rabbitmq-server.service
  2. rabbitmq-server パッケージのインストール時には、RabbitMQ サービスの guest ユーザーは、デフォルトの guest パスワードとともに自動的に作成されます。Red Hat では、特に IPv6 が利用可能な場合には、このデフォルトパスワードを変更することを強くお勧めします。IPv6 では、RabbitMQ はネットワーク外部からアクセスが可能となる場合があります。
    # rabbitmqctl change_password guest NEW_RABBITMQ_PASS
    NEW_RABBITMQ_PASS は、よりセキュアなパスワードに置き換えます。
  3. Block Storage サービス、Compute サービス、OpenStack Networking、Orchestration サービス、Image サービス、Telemetry サービス用の RabbitMQ ユーザーアカウントを作成します。
    # rabbitmqctl add_user cinder CINDER_PASS
    # rabbitmqctl add_user nova NOVA_PASS
    # rabbitmqctl add_user neutron NEUTRON_PASS
    # rabbitmqctl add_user heat HEAT_PASS
    # rabbitmqctl add_user glance GLANCE_PASS
    # rabbitmqctl add_user ceilometer CEILOMETER_PASS
    CINDER_PASSNOVA_PASSNEUTRON_PASSHEAT_PASSGLANCE_PASSCEILOMETER_PASS は、各サービスのセキュアなパスワードに置き換えてください。
  4. これらの RabbitMQ ユーザーに、全リソースに対する読み取り/書き込みのパーミッションを付与します。
    # rabbitmqctl set_permissions cinder ".*" ".*" ".*"
    # rabbitmqctl set_permissions nova ".*" ".*" ".*"
    # rabbitmqctl set_permissions neutron ".*" ".*" ".*"
    # rabbitmqctl set_permissions heat ".*" ".*" ".*"
    # rabbitmqctl set_permissions glance ".*" ".*" ".*"
    # rabbitmqctl set_permissions ceilometer ".*" ".*" ".*"

2.3.4. RabbitMQ メッセージブローカーでの SSL の有効化

RabbitMQ メッセージブローカーには SSL 機能が組み込まれており、トラフィックのセキュリティー保護に使用することができます。SSL 通信に必要な証明書を作成して、/etc/rabbitmq/rabbitmq.config 設定ファイルで RabbitMQ に SSL を設定します。

手順2.10 RabbitMQ メッセージブローカーでの SSL の有効化

  1. 必要な証明書を保管するためのディレクトリーを作成します。
    # mkdir /etc/pki/rabbitmq
  2. 証明書用のセキュアなパスワードを選択して、/etc/pki/rabbitmq ディレクトリー内にファイル形式で保存します。
    # echo SSL_RABBITMQ_PW > /etc/pki/rabbitmq/certpw
    SSL_RABBITMQ_PW は、証明書のパスワードに置き換えます。このパスワードは、後で必要な証明書をさらにセキュリティー保護する際に使用します。
  3. 証明書のディレクトリーとパスワードファイルのパーミッションを設定します。
    # chmod 700 /etc/pki/rabbitmq
    # chmod 600 /etc/pki/rabbitmq/certpw
  4. /etc/pki/rabbitmq/certpw ファイル内のパスワードを使用して /etc/pki/rabbitmq ディレクトリーに証明書データベースファイル (*.db) を作成します。
    # certutil -N -d /etc/pki/rabbitmq -f /etc/pki/rabbitmq/certpw
  5. 実稼働環境では、信頼のできるサードパーティーの証明局 (CA) を使用して証明書に署名することを推奨します。サードパーティーの CA には、証明書署名要求 (CSR) が必要となります。
    # certutil -R -d /etc/pki/rabbitmq -s "CN=RABBITMQ_HOST" \
     -a -f /etc/pki/rabbitmq/certpw > RABBITMQ_HOST.csr
    RABBITMQ_HOST は、RabbitMQ メッセージブローカーをホストするサーバーの IP アドレスまたはホスト名に置き換えます。このコマンドにより、RABBITMQ_HOST.csr という名前の CSR とキーファイル (keyfile.key) が生成されます。このキーファイルは、後で RabbitMQ メッセージブローカーが SSL を使用するように設定する際に使用します。

    注記

    一部の CA には、"CN=RABBITMQ_HOST" 以外の追加の値が必要な場合があります。
  6. RABBITMQ_HOST.csr をサードパーティーの CA に提供して署名を受けます。CA は署名済みの証明書 (server.crt) と CA ファイル (ca.crt) を提供します。これらのファイルを証明書のデータベースに追加します。
    # certutil -A -d /etc/pki/rabbitmq -n RABBITMQ_HOST -f /etc/pki/rabbitmq/certpw \
     -t u,u,u -a -i /path/to/server.crt
    # certutil -A -d /etc/pki/rabbitmq -n "Your CA certificate" \
     -f /etc/pki/rabbitmq/certpw -t CT,C,C -a -i /path/to/ca.crt
  7. RabbitMQ メッセージブローカーがセキュアな通信に証明書ファイルを使用するように設定します。テキストエディターで /etc/rabbitmq/rabbitmq.config の設定ファイルを開き、以下のようにrabbit のセクションを編集します。
    1. 以下の行を探します。
         %% {ssl_listeners, [5671]},
      パーセントの記号を削除して、設定をアンコメントします。
         {ssl_listeners, [5671]},
    2. 次に以下の行まで、下方向にスクロールします。
         %% {ssl_options, [{cacertfile,           "/path/to/testca/cacert.pem"},
      この行と、その次の ssl_options で構成される数行を、以下の内容に置き換えます。
         {ssl_options, [{cacertfile,           "/path/to/ca.crt"},
                        {certfile,             "/path/to/server.crt"},
                        {keyfile,              "/path/to/keyfile.key"},
                        {verify,               verify_peer},
                        {versions,             ['tlsv1.2','tlsv1.1',tlsv1]},
                        {fail_if_no_peer_cert, false}]}
      • /path/to/ca.crt は、CA 証明書への絶対パスに置き換えます。
      • /path/to/server.crt は、署名済みの証明書への絶対パスに置き換えます。
      • /path/to/keyfile.key はキーファイルへの絶対パスに置き換えます。
  8. 特定の TLS 暗号化バージョンのみのサポートを含めるように rabbitmq.config を編集して、SSLv3 を無効化します。
    {rabbit, [
    {ssl_options, [{versions, ['tlsv1.2','tlsv1.1',tlsv1]}]},
    ]}
  9. RabbitMQ サービスを再起動し、変更を有効にします。
    # systemctl restart rabbitmq-server.service

2.3.5. クライアント用 SSL 証明書のエクスポート

サーバーで SSL を有効にする場合には、セキュアな接続を確立するために、クライアントにその SSL 証明書のコピーが必要です。
以下のコマンド例は、メッセージブローカーの証明書データベースからのクライアント用証明書と秘密鍵をエクスポートするのに使用することができます。
# pk12util -o <p12exportfile> -n <certname> -d <certdir> -w <p12filepwfile>
# openssl pkcs12 -in <p12exportfile> -out <clcertname> -nodes -clcerts -passin pass:<p12pw>
SSL コマンドとオプションに関する詳細情報は、OpenSSL のマニュアル を参照してください。または、Red Hat Enterprise Linux では、openssl のマニュアルページを参照してください。