第1章 Trove の管理

1.1. Trove コントローラーのインストールと設定

Trove コントローラーに必要なパケージのインストールと環境の設定方法に関する詳しい説明は、『インストールリファレンス』を参照してください。

1.2. Trove のセキュリティー保護

Red Hat OpenStack Platform の以前のバージョンでは、Trove ゲストエージェントは、RabbitMQ メッセージバスへの認証情報を使用して実行されていました。RabbitMQ メッセージバスは、管理コントローラー全体で、機密データを含む全トラフィックに使用されていたので、Trove のインスタンスは、メッセージバスで送信される全データを表示することが可能でした。このため、インスタンスがこのバスを共有する他のサービスを誤用したり、攻撃したりできてしまう可能性がありました。Red Hat OpenStack Platform 8 では、Trove は、分離されたテナントに配置され、管理コントローラーの他の部分にはアクセスできなくなりましたが、DBaaS のセキュリティーをさらに強化するには、別のホストと別の RabbitMQ メッセージバスに Trove インスタンスを設定することが可能です。この設定を使用するには、以下の手順を実行してください。

  1. 管理コントローラー上での操作

    1. RabbitMQ のユーザーとパスワードをカスタムの値に設定します。この値は、Trove テナントとは共有されません。たとえば、guest アカウントと / デフォルト vhost に変更したパスワードを使用することができます。

      # rabbitmqctl change_password guest password

      このパスワードは、サービスがメッセージバスに接続するように設定している全設定ファイルで変更されます。

    2. Trove データベースエンドポイントを更新して、サービスカタログルックアップが別のホスト上で Trove を使用するようにします。まず現在のエンドポイント UUID を特定してから削除し、最後に別の Trove ホストの IP アドレスを使用して新規エンドポイントを作成します。

      # keystone endpoint-list
      # keystone endpoint-delete current_trove_endpoint_uuid
      # keystone endpoint-create --service trove --publicurl http://IP:8779/v1.0/\$\(tenant_id\)s --region RegionOne
  2. Trove コントローラー上での操作

    1. リモート管理コントローラーホストの WSGI 設定で認証トークンフィルターをポイントします。/etc/trove/api-paste.ini ファイルで、以下のオプションと値を指定します。IP は管理コントローラーホストの IP アドレスに置き換えます。

      [filter:authtoken]
      paste.filter_factory = keystonemiddleware.auth_token:filter_factory
      service_protocol = http
      service_host = IP
      service_port = 5000
      auth_host = IP
      auth_port = 35357
      auth_protocol = http
      auth_uri = http://IP:35357/v2.0/
      signing_dir = /tmp/keystone-signing-trove
      admin_tenant_name = admin
      admin_user = admin
      admin_password = admin
    2. 管理ユーザーを追加して、Trove ゲストエージェントには、管理コントローラーで使用しているのとは異なるシークレットが設定されるようにします。

      # rabbitmqctl add_user isolated isolated
      # rabbitmqctl set_permissions isolated ".*" ".*" ".*"
    3. /etc/trove/trove.conf ファイルで以下オプションと値を指定して、Trove コントロールプレーンがローカルの RabbitMQ インスタンスに接続して認証を行うように設定します。

      # AMQP Connection info
      rabbit_userid=isolated
      rabbit_password=isolated
      rabbit_host=TROVE_IP
      
      # single instance tenant
      nova_proxy_admin_user = user
      nova_proxy_admin_pass = password
      nova_proxy_admin_tenant_name = tenant
      trove_auth_url = http://MGMT_IP:5000/v2.0
      nova_compute_service_type = compute
      cinder_service_type = volumev2
      os_region_name = RegionOne
      nova_compute_url = http://MGMT_IP:8774/v3
      
      remote_nova_client = trove_ext.cloudos.remote.nova_client_trove_admin
      remote_cinder_client = trove_ext.cloudos.remote.cinder_client_trove_admin
      remote_neutron_client = trove_ext.cloudos.remote.neutron_client_trove_admin
  3. 管理コントローラーに戻り、/etc/trove/trove-guestagent.conf ファイルを以下のように編集します。

    # AMQP Connection info
    rabbit_userid=isolated
    rabbit_password=isolated
    rabbit_host=TROVE_IP
    
    # single tenant config
    nova_proxy_admin_user = user
    nova_proxy_admin_pass = password
    nova_proxy_admin_tenant_name = tenant
    trove_auth_url = http://MGMT_IP:5000/v2.0
    swift_url = http://MGMT_IP:8080/v1/AUTH_

また、RabbitMQ vhost の提供する ACL ポリシーを活用してセキュリティーを強化することができます。この場合には、vhost ごとに異なるパーミッションのある異なるユーザーを割り当てることができます。たとえば、/isolated という名前の vhost を定義して、isolated ユーザーに vhost の適切なパーミッションを割り当てます。このように設定するには、以下の手順を実行します。

  1. デフォルトの / vhost 用の guest アカウントのパスワードを変更します。

    # rabbitmqctl change_password guest password
  2. 新規ユーザーと vhost を追加して、パーミッションを適切に設定します。

    # rabbitmqctl add_user isolated isolated
    # rabbitmqctl add_vhost /isolated
    # rabbitmqctl -p /isolated set_permissions isolated ".*" ".*" ".*"
  3. Trove の設定を編集します。編集するファイルは 2 つあります。/etc/trove/trove-guestmanager.conf は、puppet-trove から packstack によって生成され、ゲストインスタンスに挿入されます。/etc/trove/trove-conductor.conf は、Trove インスタンスからの非同期ステータス更新のための Trove コントロールプレーンサービスを設定します。

    [oslo_messaging_rabbit]
    rabbit_host=IP
    rabbit_virtual_host=/isolated
    rabbit_userid=isolated
    rabbit_password=isolated
    rabbit_port=5672
    rabbit_ha_queues=False
    rabbit_hosts=IP:5672
    rabbit_use_ssl=False

この方法の利点は、別のホストとメッセージキューを使用する場合のシナリオよりもシンプルであることです。これは、Red Hat OpenStack Platform director を使用するなどの方法で、プロビジョニングを自動的に実行する場合に役立てることができます。