このセクションでは、OpenStack の鍵管理サービス( Barbican )のインストールと設定について紹介します。Barbican は、パスワードや認証といったセキュリティ事項アンリのための REST API を提供します。

データベースクライアントを使用して、データベースサーバーに root ユーザーとして接続します。

[root@controller ~]# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16588346
Server version: 10.1.20-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

データベース barbican を作成します。

MariaDB [(none)]> CREATE DATABASE barbican;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> 

データベースに適切なアクセス権を付与します。ここでは barbican データベースに接続するパスワードは BARBICAN_DB_PASS としているので、実際の情報に置き換えてください。

MariaDB [(none)]> GRANT ALL PRIVILEGES ON barbican.* TO 'barbican'@'localhost' IDENTIFIED BY 'BARBICAN_DB_PASS';
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON barbican.* TO 'barbican'@'%' IDENTIFIED BY 'BARBICAN_DB_PASS';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> 
MariaDB [(none)]> exit
Bye
[root@controller ~]# 

クレデンシャル, エンティティ, エンドポイントの作成

admin クレデンシャルを読み込み、管理者専用 CLI コマンドへのアクセス権を取得します。

[root@controller ~]# . openrc/admin-openrc 
[root@controller ~]# 

barbican ユーザーを作成します。ここでは、barbican ユーザーのパスワードは BARBICAN_PASS としているので、適宜変更して下さい。

[root@controller ~]# openstack user create --domain default --password-prompt barbican
User Password: BARBICAN_PASS
Repeat User Password: BARBICAN_PASS
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | e3aea96c100e49bbaae205ae821ee31e |
| name                | barbican                         |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
[root@controller ~]# 

admin の ロールを barbican ユーザーと service プロジェクトに追加します。

[root@controller ~]# openstack role add --project service --user barbican admin
[root@controller ~]# 

creater ロールを作成します。

[root@controller ~]# openstack role create creator
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | ba12513fe02941ae803168d50f8ba57b |
| name      | creator                          |
+-----------+----------------------------------+
[root@controller ~]# 

creator の ロールを barbican ユーザーと service プロジェクトに追加します。

[root@controller ~]# openstack role add --project service --user barbican creator
[root@controller ~]# 

barbican サービスエンティティーを作成します。

[root@controller ~]# openstack service create --name barbican --description "Key Manager" key-manager
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Key Manager                      |
| enabled     | True                             |
| id          | a7e20a1119d24a5fbe6ca439d5e6a84d |
| name        | barbican                         |
| type        | key-manager                      |
+-------------+----------------------------------+
[root@controller ~]# 

key-manager サービスのAPI エンドポイントを作成します。

[root@controller ~]# openstack endpoint create --region RegionOne \
  key-manager public http://controller:9311
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 9cbfbef99e10429d82b0644ada8565e8 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | a7e20a1119d24a5fbe6ca439d5e6a84d |
| service_name | barbican                         |
| service_type | key-manager                      |
| url          | http://controller:9311           |
+--------------+----------------------------------+
[root@controller ~]# 
[root@controller ~]# openstack endpoint create --region RegionOne \
  key-manager internal http://controller:9311
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | cd27a0de167145f4b5de3db4c6a5715a |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | a7e20a1119d24a5fbe6ca439d5e6a84d |
| service_name | barbican                         |
| service_type | key-manager                      |
| url          | http://controller:9311           |
+--------------+----------------------------------+
[root@controller ~]# 
[root@controller ~]# openstack endpoint create --region RegionOne \
  key-manager admin http://controller:9311
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 57c7b9414cf04f31915eb3ac6a2b2d0a |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | a7e20a1119d24a5fbe6ca439d5e6a84d |
| service_name | barbican                         |
| service_type | key-manager                      |
| url          | http://controller:9311           |
+--------------+----------------------------------+
[root@controller ~]# 

コンポーネントのインストールと設定

openstack-rocky の yum リポジトリ(CentOS-Openstack-rocky.repo)を使って、 鍵管理サービス ( Barbican ) に必要なパッケージをインストールします。

[root@controller ~]# yum --enablerepo=centos-openstack-rocky -y install openstack-barbican
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ openstack-barbican.noarch 0:7.0.0-1.el7 を インストール
--> 依存性の処理をしています: python-barbican のパッケージ: openstack-barbican-7.0.0-1.el7.noarch
--> 依存性の処理をしています: openstack-barbican-worker のパッケージ: openstack-barbican-7.0.0-1.el7.noarch
--> 依存性の処理をしています: openstack-barbican-api のパッケージ: openstack-barbican-7.0.0-1.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ openstack-barbican-api.noarch 0:7.0.0-1.el7 を インストール
--> 依存性の処理をしています: openstack-barbican-common のパッケージ: openstack-barbican-api-7.0.0-1.el7.noarch
---> パッケージ openstack-barbican-worker.noarch 0:7.0.0-1.el7 を インストール
---> パッケージ python-barbican.noarch 0:7.0.0-1.el7 を インストール
--> 依存性の処理をしています: python2-ldap3 のパッケージ: python-barbican-7.0.0-1.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ openstack-barbican-common.noarch 0:7.0.0-1.el7 を インストール
---> パッケージ python2-ldap3.noarch 0:2.5.1-2.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package                    アーキテクチャー
                                    バージョン    リポジトリー             容量
================================================================================
インストール中:
 openstack-barbican         noarch  7.0.0-1.el7   centos-openstack-rocky  7.4 k
依存性関連でのインストールをします:
 openstack-barbican-api     noarch  7.0.0-1.el7   centos-openstack-rocky   23 k
 openstack-barbican-common  noarch  7.0.0-1.el7   centos-openstack-rocky  4.9 k
 openstack-barbican-worker  noarch  7.0.0-1.el7   centos-openstack-rocky  4.3 k
 python-barbican            noarch  7.0.0-1.el7   centos-openstack-rocky  417 k
 python2-ldap3              noarch  2.5.1-2.el7   epel                    507 k

トランザクションの要約
================================================================================
インストール  1 パッケージ (+5 個の依存関係のパッケージ)

総ダウンロード容量: 963 k
インストール容量: 5.5 M
Downloading packages:
(1/6): openstack-barbican-7.0.0-1.el7.noarch.rpm           | 7.4 kB   00:01     
(2/6): openstack-barbican-api-7.0.0-1.el7.noarch.rpm       |  23 kB   00:01     
(3/6): openstack-barbican-common-7.0.0-1.el7.noarch.rpm    | 4.9 kB   00:00     
(4/6): openstack-barbican-worker-7.0.0-1.el7.noarch.rpm    | 4.3 kB   00:00     
(5/6): python2-ldap3-2.5.1-2.el7.noarch.rpm                | 507 kB   00:01     
(6/6): python-barbican-7.0.0-1.el7.noarch.rpm              | 417 kB   00:01     
--------------------------------------------------------------------------------
合計                                               305 kB/s | 963 kB  00:03     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : python2-ldap3-2.5.1-2.el7.noarch                1/6 
  インストール中          : python-barbican-7.0.0-1.el7.noarch              2/6 
  インストール中          : openstack-barbican-common-7.0.0-1.el7.noarch    3/6 
  インストール中          : openstack-barbican-worker-7.0.0-1.el7.noarch    4/6 
  インストール中          : openstack-barbican-api-7.0.0-1.el7.noarch       5/6 
  インストール中          : openstack-barbican-7.0.0-1.el7.noarch           6/6 
  検証中                  : openstack-barbican-7.0.0-1.el7.noarch           1/6 
  検証中                  : openstack-barbican-common-7.0.0-1.el7.noarch    2/6 
  検証中                  : openstack-barbican-worker-7.0.0-1.el7.noarch    3/6 
  検証中                  : openstack-barbican-api-7.0.0-1.el7.noarch       4/6 
  検証中                  : python2-ldap3-2.5.1-2.el7.noarch                5/6 
  検証中                  : python-barbican-7.0.0-1.el7.noarch              6/6 

インストール:
  openstack-barbican.noarch 0:7.0.0-1.el7                                       

依存性関連をインストールしました:
  openstack-barbican-api.noarch 0:7.0.0-1.el7                                   
  openstack-barbican-common.noarch 0:7.0.0-1.el7                                
  openstack-barbican-worker.noarch 0:7.0.0-1.el7                                
  python-barbican.noarch 0:7.0.0-1.el7                                          
  python2-ldap3.noarch 0:2.5.1-2.el7                                            

完了しました!
[root@controller ~]# 

Barbican の設定ファイル( /etc/barbican/barbican.conf )を編集し、以下の設定をします。

[root@controller ~]# vi /etc/barbican/barbican.conf 

[ DEFAULT ]セクションで、データベースアクセスを設定します。ここでは、barbican データベースに接続するパスワードは BARBICAN_DB_PASS としているので、実際の情報に置き換えてください。

[DEFAULT]
...
sql_connection = mysql+pymysql://barbican:BARBICAN_DB_PASS@controller/barbican

[ DEFAULT ] セクションで、RabbitMQ メッセージキューのアクセス方法を設定します。RABBIT_PASS は、RabbitMQ の openstack ユーザー用に選択したパスワードに置き換えてください。

[DEFAULT]
...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[ keystone_authtoken ] に、認証サービス( Keystone )へのアクセス方法を設定します。ここでは、barbican ユーザーのパスワードは BARBICAN_PASS としているので、実際の情報に置き換えてください。

[keystone_authtoken]
...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = barbican
password = BARBICAN_PASS

Barbican データベースを展開します。

[root@controller ~]# su -s /bin/sh -c "barbican-manage db upgrade" barbican
2019-02-16 18:41:08.549 9455 WARNING oslo_db.sqlalchemy.engines [-] MySQL SQL mode is 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION', consider enabling TRADITIONAL or STRICT_ALL_TABLES: Empty
2019-02-16 18:41:08.553 9455 INFO alembic.runtime.migration [-] Context impl MySQLImpl.
2019-02-16 18:41:08.553 9455 INFO alembic.runtime.migration [-] Will assume non-transactional DDL.
2019-02-16 18:41:08.629 9455 INFO alembic.runtime.migration [-] Running upgrade  -> 1a0c2cdafb38, create test table
2019-02-16 18:41:08.636 9455 INFO alembic.runtime.migration [-] Running upgrade 1a0c2cdafb38 -> juno, juno_initial
2019-02-16 18:41:08.962 9455 INFO alembic.runtime.migration [-] Running upgrade juno -> 13d127569afa, create_secret_store_metadata_table
2019-02-16 18:41:08.997 9455 INFO alembic.runtime.migration [-] Running upgrade 13d127569afa -> 1e86c18af2dd, add new columns type meta containerId
2019-02-16 18:41:09.128 9455 INFO alembic.runtime.migration [-] Running upgrade 1e86c18af2dd -> cd4106a1a0, add-cert-to-container-type
2019-02-16 18:41:09.137 9455 INFO alembic.runtime.migration [-] Running upgrade cd4106a1a0 -> 47b69e523451, Made plugin names in kek datum non nullable
2019-02-16 18:41:09.143 9455 INFO alembic.runtime.migration [-] Running upgrade 47b69e523451 -> 4070806f6972, Add orders plugin metadata table and relationships
2019-02-16 18:41:09.180 9455 INFO alembic.runtime.migration [-] Running upgrade 4070806f6972 -> 2ab3f5371bde, dsa in container type modelbase_to
2019-02-16 18:41:09.460 9455 INFO alembic.runtime.migration [-] Running upgrade 2ab3f5371bde -> 2843d6469f25, add sub status info for orders
2019-02-16 18:41:09.533 9455 INFO alembic.runtime.migration [-] Running upgrade 2843d6469f25 -> 254495565185, removing redundant fields from order
2019-02-16 18:41:09.728 9455 INFO alembic.runtime.migration [-] Running upgrade 254495565185 -> 795737bb3c3, Change tenants to projects
2019-02-16 18:41:10.263 9455 INFO alembic.runtime.migration [-] Running upgrade 795737bb3c3 -> 256da65e0c5f, Change keystone_id for external_id in Project model
2019-02-16 18:41:10.318 9455 INFO alembic.runtime.migration [-] Running upgrade 256da65e0c5f -> aa2cf96a1d5, Add OrderRetryTask
2019-02-16 18:41:10.346 9455 INFO alembic.runtime.migration [-] Running upgrade aa2cf96a1d5 -> 443d6f4a69ac, added secret type column to secrets table
2019-02-16 18:41:10.387 9455 INFO alembic.runtime.migration [-] Running upgrade 443d6f4a69ac -> 3d36a26b88af, Add OrderBarbicanMetadata table
2019-02-16 18:41:10.418 9455 INFO alembic.runtime.migration [-] Running upgrade 3d36a26b88af -> 2d21598e7e70, Added CA related tables
2019-02-16 18:41:10.522 9455 INFO alembic.runtime.migration [-] Running upgrade 2d21598e7e70 -> 1c0f328bfce0, Fixing composite primary keys and adding indexes to foreign key
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `ix_preferred_certificate_authorities_project_id`. This is deprecated and will be disallowed in a future release.')
  result = self._query(query)
2019-02-16 18:41:11.007 9455 INFO alembic.runtime.migration [-] Running upgrade 1c0f328bfce0 -> 1a7cf79559e3, New secret and container ACL tables
2019-02-16 18:41:11.286 9455 INFO alembic.runtime.migration [-] Running upgrade 1a7cf79559e3 -> 3041b53b95d7, Remove size limits on meta table values
2019-02-16 18:41:11.396 9455 INFO alembic.runtime.migration [-] Running upgrade 3041b53b95d7 -> 30dba269cc64, Update order_retry_tasks table
2019-02-16 18:41:11.550 9455 INFO alembic.runtime.migration [-] Running upgrade 30dba269cc64 -> 6a4457517a3, rename ACL creator_only to project_access
2019-02-16 18:41:11.624 9455 INFO alembic.runtime.migration [-] Running upgrade 6a4457517a3 -> 1bc885808c76, Add project id to Secrets
2019-02-16 18:41:11.717 9455 INFO alembic.runtime.migration [-] Running upgrade 1bc885808c76 -> 161f8aceb687, fill project_id to secrets where missing
2019-02-16 18:41:11.877 9455 INFO alembic.runtime.migration [-] Running upgrade 161f8aceb687 -> 1bece815014f, remove ProjectSecret table
2019-02-16 18:41:11.892 9455 INFO alembic.runtime.migration [-] Running upgrade 1bece815014f -> kilo, kilo
2019-02-16 18:41:11.895 9455 INFO alembic.runtime.migration [-] Running upgrade kilo -> 46b98cde536, Add project quotas table
2019-02-16 18:41:11.940 9455 INFO alembic.runtime.migration [-] Running upgrade 46b98cde536 -> 156cd9933643, Add project column to consumer table
2019-02-16 18:41:12.084 9455 INFO alembic.runtime.migration [-] Running upgrade 156cd9933643 -> 3c3b04040bfe, add owning project and creator to CAs
2019-02-16 18:41:12.182 9455 INFO alembic.runtime.migration [-] Running upgrade 3c3b04040bfe -> 10220ccbe7fa, Remove transport keys column from project quotas table
2019-02-16 18:41:12.216 9455 INFO alembic.runtime.migration [-] Running upgrade 10220ccbe7fa -> 4ecde3a3a72a, Add cas column to project quotas table
2019-02-16 18:41:12.247 9455 INFO alembic.runtime.migration [-] Running upgrade 4ecde3a3a72a -> 39a96e67e990, Add missing constraints
2019-02-16 18:41:12.269 9455 INFO alembic.runtime.migration [-] Running upgrade 39a96e67e990 -> dce488646127, add-secret-user-metadata
2019-02-16 18:41:12.303 9455 INFO alembic.runtime.migration [-] Running upgrade dce488646127 -> d2780d5aa510, change_url_length
2019-02-16 18:41:12.308 9455 INFO alembic.runtime.migration [-] Running upgrade d2780d5aa510 -> 39cf2e645cba, Model for multiple backend support
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `ix_project_secret_store_project_id`. This is deprecated and will be disallowed in a future release.')
  result = self._query(query)
[root@controller ~]# 

暗号プラグインの設定

Barbican の設定ファイル( /etc/barbican/barbican.conf )を編集し、以下の設定をします。

[root@controller ~]# vi /etc/barbican/barbican.conf 

[ secretstore ] セクションで、暗号プラグインを有効します。 暗号プラグインは、Barbican データベース内の暗号化された BLOB に秘密情報を格納します。

[secretstore]
namespace = barbican.secretstore.plugin
enabled_secretstore_plugins = store_crypto

[ crytpo ] セクションで、使用するプラグインを指定します。利用できるプラグインには、Simple Crypto プラグインと PKCS#11 暗号プラグインの 2種類あります。ここでは、単純に Simple Crypto プラグインを指定しています。ただし、Simple Crypto プラグインは完全に安全ではなく開発テストのみに適しています。

[crypto]
enabled_crypto_plugins = simple_crypto

[ simple_crypto_plugin ] セクションで、Simple Crypto プラグインで暗号化するための鍵情報を指定します。指定は、Base 64 エンコードされた 32バイト値でなければなりません。

[simple_crypto_plugin]
kek = dGhpcnR5X3R3b19ieXRlX2tleWJsYWhibGFoYmxhaGg=

インストールの最後

wsgi-barbican 設定ファイル(  /etc/httpd/conf.d/wsgi-barbican.conf )を新規作成し、設定します。

[root@controller ~]# vi /etc/httpd/conf.d/wsgi-barbican.conf
Listen 9311

<VirtualHost *:9311>
    ServerName controller

    WSGIApplicationGroup %{GLOBAL}
    WSGIDaemonProcess barbican-api display-name=barbican-api group=barbican processes=2 threads=8 user=barbican
    WSGIProcessGroup barbican-api
    WSGIScriptAlias / "/usr/lib/python2.7/site-packages/barbican/api/app.wsgi"
    WSGIPassAuthorization On

    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    ErrorLog /var/log/httpd/barbican_error.log
    CustomLog /var/log/httpd/barbican_access.log combined

    <Directory /usr/lib/python2.7/site-packages/barbican/api>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>

</VirtualHost>

設定を反映するために、httpd サービスを再起動します。

■ 再起動
[root@controller ~]# systemctl restart httpd.service
[root@controller ~]#

■ 起動状態の確認 
[root@controller ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           └─openstack-dashboard.conf
        /etc/systemd/system/httpd.service.d
           └─override.conf
   Active: active (running) since 土 2019-02-16 18:45:25 JST; 8s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 10418 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 10454 ExecStartPre=/usr/bin/python /usr/share/openstack-dashboard/manage.py compress --force -v0 (code=exited, status=0/SUCCESS)
  Process: 10432 ExecStartPre=/usr/bin/python /usr/share/openstack-dashboard/manage.py collectstatic --noinput --clear -v0 (code=exited, status=0/SUCCESS)
 Main PID: 10846 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─10846 /usr/sbin/httpd -DFOREGROUND
           ├─10848 /usr/sbin/httpd -DFOREGROUND
           ├─10849 /usr/sbin/httpd -DFOREGROUND
           ├─10850 /usr/sbin/httpd -DFOREGROUND
           ├─10851 /usr/sbin/httpd -DFOREGROUND
           ├─10852 barbican-api    -DFOREGROUND
           ├─10853 barbican-api    -DFOREGROUND
           ├─10854 (wsgi:keystone- -DFOREGROUND
           ├─10855 (wsgi:keystone- -DFOREGROUND
           ├─10856 (wsgi:keystone- -DFOREGROUND
           ├─10857 (wsgi:keystone- -DFOREGROUND
           ├─10858 (wsgi:keystone- -DFOREGROUND
           ├─10859 /usr/sbin/httpd -DFOREGROUND
           ├─10860 /usr/sbin/httpd -DFOREGROUND
           ├─10861 /usr/sbin/httpd -DFOREGROUND
           ├─10862 /usr/sbin/httpd -DFOREGROUND
           ├─10863 /usr/sbin/httpd -DFOREGROUND
           ├─10933 /usr/sbin/httpd -DFOREGROUND
           ├─10960 /usr/sbin/httpd -DFOREGROUND
           ├─10961 /usr/sbin/httpd -DFOREGROUND
           ├─10970 /usr/sbin/httpd -DFOREGROUND
           ├─10971 /usr/sbin/httpd -DFOREGROUND
           ├─10972 /usr/sbin/httpd -DFOREGROUND
           └─10973 /usr/sbin/httpd -DFOREGROUND

 2月 16 18:44:24 controller systemd[1]: Starting The Apache HTTP Server...
 2月 16 18:45:25 controller python[10454]: Compressing... done
 2月 16 18:45:25 controller python[10454]: Compressed 7 block(s) from 4 tem....
 2月 16 18:45:25 controller systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@controller ~]#