3.3.4. アクセス制御でのポリシーファイルの使用

デフォルトのルールを上書きするには、適切な OpenStack サービスの policy.json ファイルを編集します。たとえば、Compute サービスには nova ディレクトリーに policy.json があります。これは、コンテナーから表示する際にコンテナー化されたサービスの正しい場所となります。

注記
  • ステージング環境でポリシーファイルへの変更をよくテストしてから、それらを実稼働環境で実装する必要があります。
  • アクセス制御ポリシーへの変更が、リソースのセキュリティーを意図せずに脆弱化しないことを確認する必要があります。また、policy.json ファイルへの変更はすぐに有効であり、サービスの再起動は必要ありません。

3.3.4.1. 例: パワーユーザーロールの作成

keystone ロールのパーミッションをカスタマイズするには、サービスの policy.json ファイルを更新します。これは、ユーザーのクラスに割り当てるパーミッションをより詳細に定義できることを意味します。以下の例では、以下の特権を使用してデプロイメントの power user ロールを作成します。

  • インスタンスを起動するには、以下のコマンドを実行します。
  • インスタンスを停止します。
  • インスタンスに割り当てられているボリュームを管理します。

このロールの意図は、admin アクセスを付与せずに、特定のユーザーに追加のパーミッションを付与することです。これらの特権を使用するには、以下のパーミッションをカスタムロールに付与する必要があります。

  • インスタンスを起動する: "os_compute_api:servers:start": "role:PowerUsers"
  • インスタンスを停止する: "os_compute_api:servers:stop": "role:PowerUsers"
  • 特定のボリュームを使用するようにインスタンスを設定する: "os_compute_api:servers:create:attach_volume": "role:PowerUsers"
  • インスタンスに割り当てられているボリュームを一覧表示する: "os_compute_api:os-volumes-attachments:index": "role:PowerUsers"
  • ボリュームを割り当てる: "os_compute_api:os-volumes-attachments:create": "role:PowerUsers"
  • 割り当てられたボリュームの詳細を表示する: "os_compute_api:os-volumes-attachments:show": "role:PowerUsers"
  • インスタンスに割り当てられているボリュームを変更する: "os_compute_api:os-volumes-attachments:update": "role:PowerUsers"
  • インスタンスに割り当てられているボリュームを削除する: "os_compute_api:os-volumes-attachments:delete": "role:PowerUsers"
注記

policy.json ファイルを変更すると、デフォルトのポリシーを上書きします。その結果、PowerUsers のメンバーは、これらのアクションを実行できる唯一のユーザーになります。admin ユーザーがこれらのパーミッションを保持できるようにするには、admin_or_power_user. のルールを作成できます。また、基本的な条件ロジックを使用して role:PowerUsers or role:Admin を定義することもできます。

  1. コマンドラインセッションで keystone v3 API を使用するには、source コマンドで v3 エンドポイントおよび設定を定義する rc ファイルを読み込みます。

    OS_AUTH_URL=http://controller-hostname.lab.local:5000/v3
    OS_USERNAME=username
    OS_PASSWORD=password
    OS_USER_DOMAIN_NAME=Default
    OS_PROJECT_DOMAIN_NAME=Default
    OS_PROJECT_NAME=project-name
    OS_IDENTITY_API_VERSION=3
  2. カスタム keystone ロールを作成します。

    $ openstack role create PowerUsers
    +-----------+----------------------------------+
    | Field     | Value                            |
    +-----------+----------------------------------+
    | domain_id | None                             |
    | id        | 7061a395af43455e9057ab631ad49449 |
    | name      | PowerUsers                      |
    +-----------+----------------------------------+
  3. 既存のユーザーをロールに追加し、ロールをプロジェクトに割り当てます。

    $ openstack role add --project [PROJECT_NAME] --user [USER_ID] [PowerUsers-ROLE_ID]
    注記

    ロールの割り当ては、1 つのプロジェクトのみとペアになります。つまり、ロールをユーザーに割り当てると、ターゲットプロジェクトも同時に定義します。ユーザーが同じロールを受信し、別のプロジェクトを対象にする場合は、ロールを別々に割り当てる必要がありますが、別のプロジェクトが対象となります。

  4. デフォルトの nova ポリシー設定を表示します。

    $ oslopolicy-policy-generator --namespace nova
  5. 以下のエントリーを /etc/nova/policy.json に追加して、新しい PowerUsers ロールのカスタムパーミッションを作成します。

    注記

    デプロイメント前にポリシーの変更をテストし、想定通りに機能していることを確認します。

    {
    "os_compute_api:servers:start": "role:PowerUsers",
    "os_compute_api:servers:stop": "role:PowerUsers",
    "os_compute_api:servers:create:attach_volume": "role:PowerUsers",
    "os_compute_api:os-volumes-attachments:index": "role:PowerUsers",
    "os_compute_api:os-volumes-attachments:create": "role:PowerUsers",
    "os_compute_api:os-volumes-attachments:show": "role:PowerUsers",
    "os_compute_api:os-volumes-attachments:update": "role:PowerUsers",
    "os_compute_api:os-volumes-attachments:delete": "role:PowerUsers"
    }

    このファイルを保存すると、変更はすぐに有効になります。PowerUsers keystone ロールに追加したユーザーは、これらの権限を受信します。