Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

1.2. Fernet 鍵のローテーション

ローテーションプロセスは比較的簡単に実行できるため、ローテーションサイクルの長さを考慮すると、Red Hat はセキュリティー側で警告することを推奨します。セキュリティー体制からのガイダンスがない場合は、毎月のローテーションサイクルが適切な開始地点となります。

Fernet は、/var/lib/config-data/puppet-generated/keystone/etc/keystone/fernet-keys に保存されている 3 種類のキーを使用します。最も番号の大きいディレクトリーには、新しいトークンを生成し、既存のトークンを復号化するために使用されるプライマリーキーが含まれます。

キーローテーションプロセスで、プライマリーキーはセカンダリーキーのステータスに委任され、新しいプライマリーキーが発行されるため、危険にさらされたプライマリーキーの値が減少します。セカンダリーキーは、以前のプライマリーキーで作成されたトークンを復号化するためにのみ使用でき、新しいキーを発行できません。

注記

Fernet キーのローテーションを実行する前に、すべてのオーバークラウドノードがオンラインであることを確認します。そうしないと、deploy_ssh_key タスクでプロセスが失敗します。

1.2.1. Mistral を使用した Fernet 鍵のローテーション

デフォルトでは、director はオーバークラウドの Fernet キーを管理するように設定されています。この設定は、ManageKeystoneFernetKeys を使用して環境ファイルで管理されます。その結果、Fernet キーは Mistral ( KeystoneFernetKeys下)に保存されます。この方法では、Fernet キーを Mistral でローテーションでき、スタックの更新後も維持されます。

  1. 既存の Fernet キーを確認します。

    1. Fernet キーの場所を特定します。

      # SSH back to the controller
      [heat-admin@overcloud-controller-0 ~]$ sudo crudini --get /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf fernet_tokens key_repository
      /etc/keystone/fernet-keys
      注記

      /etc/keystone/ ディレクトリーは、コンテナーのファイルシステムのパスを参照します。

    2. 現在の Fernet キーディレクトリーを確認します。

      [heat-admin@overcloud-controller-0 ~]$ sudo ls /var/lib/config-data/puppet-generated/keystone/etc/keystone/fernet-keys
      0  1  2
      • 0 - ステージングされた キー(次のプライマリーキーになる)が含まれ、番号は常に 0 になります。
      • 1 - セカンダリー キーが含まれます。
      • 2 - プライマリー キー が含まれます。この数はキーがローテーションされるたびに増分し、最大数は常にプライマリーキーとして機能します。

        注記
        • キーの最大数は、デフォルトで 5 つのキーである max_active_keys プロパティーによって決定されます。
        • キーはすべてのコントローラーで伝播されます。
  2. Mistral ワークフローを使用して Fernet キーをローテーションします。

    [stack@director ~]$ source ~/stackrc
    [stack@director ~]$ openstack workflow execution create tripleo.fernet_keys.v1.rotate_fernet_keys '{"container": "overcloud"}'
    +-------------------+-------------------------------------------+
    | Field             | Value                                     |
    +-------------------+-------------------------------------------+
    | ID                | 58c9c664-b966-4f82-b368-af5ed8de5b47      |
    | Workflow ID       | 78f0990a-3d34-4bf2-a127-10c149bb275c      |
    | Workflow name     | tripleo.fernet_keys.v1.rotate_fernet_keys |
    | Description       |                                           |
    | Task Execution ID | <none>                                    |
    | State             | RUNNING                                   |
    | State info        | None                                      |
    | Created at        | 2017-12-20 11:13:50                       |
    | Updated at        | 2017-12-20 11:13:50                       |
    +-------------------+-------------------------------------------+
  3. ID を取得し、ワークフローが正常に実行されたことを確認します。

    [stack@director ~]$ openstack workflow execution show 58c9c664-b966-4f82-b368-af5ed8de5b47
    +-------------------+-------------------------------------------+
    | Field             | Value                                     |
    +-------------------+-------------------------------------------+
    | ID                | 58c9c664-b966-4f82-b368-af5ed8de5b47      |
    | Workflow ID       | 78f0990a-3d34-4bf2-a127-10c149bb275c      |
    | Workflow name     | tripleo.fernet_keys.v1.rotate_fernet_keys |
    | Description       |                                           |
    | Task Execution ID | <none>                                    |
    | State             | SUCCESS                                   |
    | State info        | None                                      |
    | Created at        | 2017-12-20 11:13:50                       |
    | Updated at        | 2017-12-20 11:15:00                       |
    +-------------------+-------------------------------------------+
  4. コントローラーノードで Fernet キーの数を確認し、前の結果と比較します。

    [heat-admin@overcloud-controller-0 ~]$ sudo ls /var/lib/config-data/puppet-generated/keystone/etc/keystone/fernet-keys
    0  1  2  3
    • 0: ステージングされ キーが含まれ、番号は常に 0 になります。このキーは、次のローテーション中にプライマリーキーにプロモートされます。
    • 1 & 2 - セカンダリー キーが含まれます。
    • 3 - プライマリー キーが含まれます。この数はキーがローテーションされるたびに増分し、最大数は常にプライマリーキーとして機能します。

      注記
      • キーの最大数は、デフォルトで 5 つのキーである max_active_keys プロパティーによって決定されます。
      • キーはすべてのコントローラーで伝播されます。