ロールおよびリソースベースのアクセス制御の設定
Contrailの役割とリソースベースのアクセス(RBAC)の概要
Contrail Networkingは、API操作レベルのアクセス制御により、ロールおよびリソースベースのアクセス制御(RBAC)をサポートします。
RBAC の実装は、API リクエストに存在するトークンから Keystone から取得したユーザー資格情報に依存します。資格情報には、ユーザー、ロール、テナント、およびドメインの情報が含まれます。
API レベルのアクセスは、ルールのリストによって制御されます。ルールのアタッチ ポイントには、、ドメイン、およびプロジェクトが含まれます global-system-config
。リソースレベルのアクセスは、オブジェクトに埋め込まれたアクセス許可によって制御されます。
API レベルのアクセス制御
RBAC 機能が有効になっている場合、API サーバーは、受信要求の X-Auth-Token
に有効なトークンが存在する必要があります。APIサーバーは、Keystoneからのユーザー資格情報(ロール、ドメイン、プロジェクトなど)とトークンを交換します。
トークンが見つからないか無効な場合は、HTTP エラー 401 が返されます。
オブジェクトは api-access-list
、次の形式のアクセス規則を保持します。
<object, field> => list of <role:CRUD>
どこ:
object |
ネットワークやサブネットなどの API リソース。 |
field |
リソース内のプロパティまたは参照。オプションは |
role |
キーストーン ロール名。 |
各ルールでは、役割の一覧とそれに対応するアクセス許可を CRUD 操作のサブセットとして指定します。
例:ACL RBAC オブジェクト
次に示すのは、管理者とロールを持つ Development
ユーザーがプロジェクト内のネットワーク上で CRUD 操作を実行できるプロジェクトのアクセス制御リスト (ACL) オブジェクトの例です。ただし、ネットワーク内のポリシーと IP アドレス管理 (IPAM) の CRUD 操作を実行できるのはロール admin
だけです。
<virtual-network, network-policy> => admin:CRUD <virtual-network, network-ipam> => admin:CRUD <virtual-network, *> => admin:CRUD, Development:CRUD
ルール セットと ACL オブジェクト
Contrail のアクセス制御オブジェクトのルールセットの機能は次のとおりです。
検証用のルール セットは、次の宛先にアタッチされた ACL のルールの和集合です。
ユーザープロジェクト
ユーザードメイン
既定のドメイン
プロジェクトまたはドメイン アクセス オブジェクトが空である可能性があります。
アクセスは、結合されたルール セット内のルールがアクセスを許可する場合にのみ許可されます。
明示的な拒否ルールはありません。
ACL オブジェクトは、ドメイン内で共有できます。したがって、複数のプロジェクトが同じ ACL オブジェクトを指す可能性があります。ACL オブジェクトをデフォルトにすることができます。
オブジェクトレベルのアクセス制御
オブジェクトの permission プロパティを使用すると perms2
、リソースごとにきめ細かなアクセス制御を行うことができます。
このプロパティには perms2
、次のフィールドがあります。
owner |
このフィールドには、トークンから抽出されたテナント UUID 値が作成時に入力されます。 |
share list |
共有リストは、オブジェクトが他のユーザーと共有するために選択されたときに作成されます。これは、オブジェクトが共有されているタプルのリストです。 |
このフィールド permission
には、次のオプションがあります。
R
- オブジェクトの読み取りW
- オブジェクトの作成または更新X
- オブジェクトをリンク(参照)
アクセスは次のように許可されます。
ユーザーが所有者で、アクセス許可が許可されている場合 (rwx)
または、ユーザー テナントが共有リストに含まれていて、アクセス許可で許可されている場合
または、ワールドアクセスが許可されている場合
構成
このセクションでは、Contrail RBAC で使用されるパラメーターについて説明します。
パラメータ:aaaモード
RBAC は、 という名前の aaa-mode
パラメータによって制御されます。このパラメーターは、以前のリリースのマルチテナント機能パラメーターの代わりに使用されます。
は aaa-mode
、以下の値に設定できます。
no-auth
- 認証は実行されず、全員にフルアクセスが許可されます。cloud-admin
- 認証が実行され、管理者ロールのみがアクセスできます。rbac
- 認証が実行され、ロールに基づいてアクセスが許可されます。Contrail Ansible Deployer を使用して Contrail Networking をプロビジョニングする場合、 の値を
AAA_MODE
に設定rbac
して、デフォルトで RBAC を有効にします。contrail_configuration: . . . AAA_MODE: rbac
Contrail Command から Contrail Networking をインストールする場合は、[ステップ 2 プロビジョニング オプション] ページの [Contrail の設定] セクションで、キーと値を
AAA_MODE
rbac
それぞれ と に指定します。
RBAC を有効にした後、変更を有効にするには、 コマンドを実行して service neutron-server restart
neutron サーバーを再起動する必要があります。
このパラメーターは multi_tenancy
、Contrail 3.0 以降で非推奨になりました。パラメーターは構成から削除する必要があります。代わりに、RBAC を有効にするためのパラメーターを使用します aaa_mode
。
パラメーターが削除され multi_tenancy
ていない場合、 aaa-mode
設定は無視されます。
パラメータ: cloud_admin_role
割り当てられた cloud_admin_role
ユーザーは、すべてへのフル アクセス権を持ちます。
このロール名は、API サーバーのパラメーターを使用して cloud_admin_role
構成されます。パラメータのデフォルト設定は admin
です。このロールは、デフォルト値を変更するためにKeystoneで設定する必要があります。
ユーザーが cloud_admin_role
1 つのテナントに を持ち、そのユーザーが他のテナントにロールを持っている場合、その cloud_admin_role
ロールは他のテナントに含まれている必要があります。を持つ cloud_admin_role
ユーザーは、すべてのテナントでロールを持つ必要はありませんが、そのユーザーが別のテナントでロールを持っている場合、そのテナントには cloud_admin_role
.
クラウド管理者の資格情報を持つ構成ファイル
次の構成ファイルには、資格情報が含まれています cloud_admin_role
。
/etc/contrail/contrail-keystone-auth.conf
/etc/neutron/plugins/opencontrail/ContrailPlugin.ini
/etc/contrail/contrail-webui-userauth.js
クラウド管理構成ファイルの変更
ロールが変更された場合は cloud_admin_role
、クラウド管理者資格情報ファイルを変更します。
構成ファイルを新しい情報に変更します。
以下を再起動します。
APIサーバー
service supervisor-config restart
中性子サーバー
service neutron-server restart
Webui
service supervisor-webui restart
グローバルな読み取り専用ロール
グローバルな読み取り専用ロール(global_read_only_role
)を設定できます。
A global_read_only_role
を指定すると、すべての Contrail リソースへの読み取り専用アクセスが許可されます。は global_read_only_role
Keystoneで設定する必要があります。デフォルト global_read_only_role
はどの値にも設定されていません。
ユーザーは global_read_only_role
Contrail Web UI を使用して、Contrail のデフォルト設定のグローバル構成を表示できます。
グローバル読み取り専用ロールの設定
グローバルな読み取り専用ロールを設定するには:
cloud_admin
ユーザーが Contrail API で を設定しますglobal_read_only_role
。/etc/contrail/contrail-api.conf
global_read_only_role = <new-admin-read-role>
サービスを再起動します
contrail-api
。service contrail-api restart
/etc/neutron/api-paste.ini のパラメータ変更
Contrail RBAC の操作は、API リクエストのヘッダーで X-Auth-Token
受信したユーザー トークンに基づきます。 /etc/neutron/api-paste.ini で以下の変更を行い、Neutron がリクエスト内のユーザートークンを Contrail API サーバーに渡すように強制する必要があります。
keystone = user_token request_id catch_errors .... ... ... [filter:user_token] paste.filter_factory = neutron_plugin_contrail.plugins.opencontrail.neutron_middleware:token_factory
以前のリリースからのアップグレード
このパラメーターは multi_tenancy
非推奨です。パラメーターは構成から削除する必要があります。代わりに、RBAC を有効にするためのパラメーターを使用します aaa_mode
。
パラメーターが削除され multi_tenancy
ていない場合、 aaa-mode
設定は無視されます。
Contrail ユーザー インターフェイスを使用した RBAC の設定
RBAC で Contrail UI を使用するには、次の手順に従います。
[aaa_mode] を [no_auth] に設定します。
/etc/contrail/contrail-analytics-api.conf
aaa_mode = no-auth
サービスを再起動します
analytics-api
。service contrail-analytics-api restart
コンテナーを再起動してサービスを再起動します。
Contrail UI を使用して、API レベルとオブジェクト レベルの両方で RBAC を設定できます。API レベルのアクセス制御は、グローバル、ドメイン、およびプロジェクト レベルで構成できます。オブジェクトレベルのアクセス権は、Contrail UI のほとんどの作成画面または編集画面から利用できます。
グローバル レベルでの RBAC の設定
RBAC をグローバル レベルで構成するには、[ > インフラストラクチャの構成] > RBAC > [グローバル構成] に移動します ( 図 1 を参照)。

プロジェクト レベルでの RBAC の設定
プロジェクト レベルで RBAC を構成するには、「 RBAC > プロジェクトの構成」> に移動します ( 図 3 参照)。

RBAC の詳細の設定
RBAC の設定は、すべてのレベルで類似しています。API アクセス リストを追加または編集するには、グローバル、ドメイン、またはプロジェクト ページに移動し、プラス (+) アイコンをクリックしてリストを追加するか、歯車アイコンをクリックして [編集]、[後に挿入]、または [削除] から選択します ( 図 4 参照)。

API レベルのアクセスの作成または編集
後に [作成]、[編集]、または [挿入] をクリックすると、[API アクセスの編集] ポップアップ ウィンドウがアクティブになり、API アクセス ルールの詳細を入力します。[ロール] フィールドにユーザーの種類を入力し、[アクセス] フィールドの [+ ] アイコンを使用して、ロールに許可されるアクセスの種類 (作成、読み取り、更新、削除など) を入力します ( 図 5 参照)。

オブジェクトレベルアクセスの作成または編集
リソースごとにきめ細かなアクセス制御を構成できます。 [アクセス許可 ] タブは、リソースのすべての作成ポップアップまたは編集ポップアップで使用できます。 [アクセス許可] ポップアップを使用して、所有者のアクセス許可とグローバル共有のアクセス許可を構成します。リソースを [共有リスト] で構成して、他のテナントと共有することもできます ( 図 6 参照)。
