crmシェル(crmsh)またはHawkなどのクラスタ管理ツールは、rootユーザまたはhaclientグループ内のユーザが使用できます。デフォルトで、これらのユーザは完全な読み込み/書き込みのアクセス権を持ちます。アクセスを制限するか、または詳細なアクセス権を割り当てるには、「アクセス制御リスト」(ACL)を使用できます。
アクセス制御リストは、順序付けされたアクセスルールセットで構成されています。各ルールにより、クラスタ設定の一部への読み込みまたは書き込みアクセスの許可、またはアクセスの拒否が行われます。ルールは通常、組み合わせて特定の役割を生成し、ユーザを自分のタスクに一致する役割に割り当てることができます。
クラスタでACLの使用を開始する前に、次の条件が満たされていることを確認します。
NIS、Active Directoryを使用するか、またはすべてのノードに同じユーザを手動で追加して、クラスタ内のすべてのノード上に同じユーザがいることを確認します。
ACLでアクセス権を変更したいすべてのユーザがhaclientグループに属している必要があります。
すべてのユーザが絶対パス/usr/sbin/crmでcrmshを実行する必要があります。
権限のないユーザがcrmshを実行する場合は、/usr/sbinを使用して、PATH変数を展開する必要があります。
ACLはオプションの機能です。デフォルトでは、ACLの使用は無効になっています。
ACL機能が無効化された場合、rootおよびhaclientグループに属するすべてのユーザは、クラスタ設定への完全な読み込み/書き込みアクセス権を持ちます。
ACLが有効化され、設定される場合でも、rootおよびデフォルトのCRM所有者haclientは両方とも、「常に」クラスタ設定への完全なアクセス権を持ちます。
ACLを使用するには、XPathに関するいくらかの知識が必要になります。XPathはXMLドキュメントでノードを選択するための言語です。http://en.wikipedia.org/wiki/XPathを参照するか、http://www.w3.org/TR/xpath/の仕様を確認してください。
ACLの設定を開始する前に、ACLの使用を「有効にする」必要があります。有効にするには、crmshで次のコマンドを使用します。
root #crmconfigure property enable-acl=true
または、手順9.1「HawkでのACLの使用の有効化」で説明するように、Hawkを使用します。
5.1.1項 「Hawkの起動とログイン」で説明したように、Webブラウザを起動してクラスタにログインします。
左のナビゲーションバーで、を選択します。
グループで、空のドロップダウンボックスから属性を選択し、プラスアイコンをクリックして追加します。
enable-acl=trueを設定するには、enable-aclの隣のチェックボックスをオンにして、変更内容を確認します。
アクセス制御リストは、順序付けされたアクセスルールセットで構成されています。各ルールにより、クラスタ設定の一部への読み込みまたは書き込みアクセスの許可、またはアクセスの拒否が行われます。ルールは通常、組み合わせて特定の役割を生成し、ユーザを自分のタスクに一致する役割に割り当てることができます。ACLの役割はCIBへのアクセス権を表すルールのセットです。ルールは次の要素で構成されています。
read、write、またはdenyのようなアクセス権。
ルールを適用する場所の指定。この指定には、タグやID参照、これら両方の組み合わせ、またはXPath式を使用できます。
通常、ACLを役割にバンドルし、ユーザに特定の役割を割り当てると便利です。個々のユーザにACLを直接設定することもできます。
ACLルールを作成するためには、次の2つの方法があります。
9.3.1項 「XPath式によるACLルールの設定」。ACLルールを作成するためには、その記述言語であるXMLの構造を理解している必要があります。
9.3.2項 「タグの短縮によるACLルールの設定」。簡略構文を作成し、ACLルールが一致するオブジェクトに適用します。
XPathによってACLルールを管理するには、その記述言語であるXMLの構造を理解している必要があります。XMLでクラスタ設定を表示する次のコマンドで構造を取得します(例9.1「XML内のクラスタ設定の例」を参照)。
root #crmconfigure show xml
<num_updates="59"
dc-uuid="175704363"
crm_feature_set="3.0.9"
validate-with="pacemaker-2.0"
epoch="96"
admin_epoch="0"
cib-last-written="Fri Aug 8 13:47:28 2014"
have-quorum="1">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair name="stonith-enabled" value="true" id="cib-bootstrap-options-stonith-enabled"/>
<nvpair name="no-quorum-policy" value="ignore" id="cib-bootstrap-options-no-quorum-policy"/>
[...]
</cluster_property_set>
</crm_config>
<nodes>
<node id="175704363" uname="alice"/>
<node id="175704619" uname="bob"/>
</nodes>
<resources> [...] </resources>
<constraints/>
<rsc_defaults> [...] </rsc_defaults>
<op_defaults> [...] </op_defaults>
<configuration>
</cib> XPath言語を使用して、このXMLドキュメント内のノードを見つけることができます。たとえば、ルートノード(cib)を選択するには、XPath式/cibを使用します。グローバルクラスタ設定を見つけるには、XPath式/cib/configuration/crm_configを使用します。
一例として、表9.1「オペレータ役割 - アクセスタイプおよびXPath式」は、「オペレータ」の役割を作成するためのパラメータ(アクセスタイプおよびXPath式)を示しています。この役割を持つユーザは、2番目の列で説明されるタスクのみ実行することができ、リソースを再構成することはできません(たとえば、パラメータや操作の変更など)。また、コロケーションや順序の制約の設定を変更することもできません。
|
タイプ |
XPath/説明 |
|---|---|
|
書き込み |
//crm_config//nvpair[@name='maintenance-mode'] 保守モードをオンまたはオフにします。 |
|
書き込み |
//op_defaults//nvpair[@name='record-pending'] 保留中の操作を記録するかを選択します。 |
|
書き込み |
//nodes/node//nvpair[@name='standby'] ノードをオンラインまたはスタンバイモードで設定します。 |
|
書き込み |
//resources//nvpair[@name='target-role'] リソースを開始、停止、昇格または降格します。 |
|
書き込み |
//resources//nvpair[@name='is-managed'] リソースを管理するか、しないかを選択します。 |
|
書き込み |
//constraints/rsc_location リソースをノードから別のノードにマイグレート/移動します。 |
|
読み込み |
/cib クラスタのステータスを表示します。 |
XML構造を扱いたくないユーザ向には、より簡単な方法があります。それは、タグ指示子および/または参照の組み合わせです。
たとえば、次のXPathを検討します。
/cib/resources/primitive[@id='rsc1']
プリミティブは参照rsclを持つリソースです。短縮構文は次のとおりです。
tag: "primitive" ref:"rsc1"
これは制約にも使用できます。これが冗長なXPathです。
/cib/constraint/rsc_location
短縮構文はこのように書かれます。
tag: "rsc_location"
短縮構文はcrmshおよびHawkで使用できます。CIBデーモンは一致するオブジェクトにACLルールを適用する方法を認識しています。
次の手順は、monitor役割を定義し、それをユーザに割り当てることで、クラスタ設定への読み込み専用アクセスを設定する方法を示しています。または、手順9.3「監視の役割を追加して、crmshを持つユーザに割り当てる」で説明されているように、crmshを使用してこの操作を実行することもできます。
5.1.1項 「Hawkの起動とログイン」で説明したように、Webブラウザを起動してクラスタにログインします。
左のナビゲーションバーで、を選択します。このビューには、すでに定義済みのとが表示されます。
ACLの役割を定義するには、次のとおり実行します。
カテゴリを選択し、プラスアイコンをクリックします。
固有なとして、monitorなどを入力します。
monitor役割を定義する例として、ドロップダウンボックスからreadを選択します。
テキストボックスに、Xpath式/cibを入力し、をクリックします。
この操作は、monitorの名前を持つ新しい役割を作成して、readの権利を設定し、XPath式/cibを使用してCIB内のすべての要素に適用します。
必要に応じて、プラスアイコンをクリックして各パラメータを指定し、さらにアクセス権およびXPath引数を追加できます。変更内容を確認します。
次のようにユーザに役割を割り当てます。
カテゴリを選択し、プラスアイコンをクリックします。
ビューに使用可能な役割が表示されます。このビューにはそのユーザの個別ACLルールを設定するための追加の行も含まれます。このビューでは、ユーザに1つまたは複数の役割を割り当てたり、ユーザに1つ以上の個別ルールを定義することもできます。役割を選択すると、個別ルールの行が非表示となり、その逆も同様になります。役割と個別ルールを割り当てることはできません。
固有なとして、tuxなどを入力します。このユーザがhaclientグループに属することを確認します。
ユーザに役割を割り当てるには、から各エントリを選択します。例では、作成したmonitor役割を選択します。
1つまたは複数の役割を選択解除するには、各エントリをもう一度クリックします。役割が選択されていない場合は、個別ルールを定義するための行が再表示されます。
代わりに個別ルールを定義する場合は、を選択し、ルールに対する各Xpathパラメータを入力します。追加のルールを定義するには、プラスアイコンをクリックします。
選択内容を確認し、をクリックしてユーザに役割またはルールを割り当てます。
リソースや制約に対するアクセス権を設定するには、9.3.2項 「タグの短縮によるACLルールの設定」で説明したように、短縮構文も使用できます。たとえば、ID rsc1を持つプリミティブリソースがある場合は、およびにprimitiveおよびrsc1の値を入力します。としてrsc1のみを入力する場合は、プリミティブリソースおよびローカルリソースマネージャリソース(LRM)に一致させることができるという利点があります。これにより、rsc1の設定とそのステータスのクリーンアップを同時に行うことができます。
次の手順は、monitor役割を定義し、それをユーザに割り当てることで、クラスタ設定への読み込み専用アクセスを設定する方法を示しています。
rootとしてログインします。
crmshの対話モードを開始します。
root #crmconfigurecrm(live)configure#
ACLの役割を次のとおり定義します。
roleコマンドを使用して、新しい役割を定義します。
crm(live)configure#rolemonitor read xpath:"/cib"
前のコマンドは、monitorの名前を持つ新しい役割を作成して、readの権利を設定し、XPath式/cibを使用してCIB内のすべての要素に適用します。必要な場合は、アクセス権およびXPath引数をさらに追加できます。
必要に応じてさらに役割を追加します。
役割を1人または複数のユーザに割り当てます。ユーザがhaclientグループに属していることを確認します。
crm(live)configure#acl_targettux monitor
変更を確認します:
crm(live)configure#show
変更をコミットします:
crm(live)configure#commit
リソースや制約に対するアクセス権を設定するには、9.3.2項 「タグの短縮によるACLルールの設定」で説明したように、短縮構文も使用できます。ID rsclを持つプリミティブリソースがある場合、次の表記を使用して、アクセス権を設定します:書き込みタグ :"primitive" 参照:"rsc1"。書き込み参照:"rsc1"を持つIDを参照することもできます。これには、プリミティブリソースおよびローカルリソースマネージャリソース(LRM)に一致させることができるという利点があります。これにより、rsc1の設定とそのステータスのクリーンアップを同時に行うことができます。
http://www.clusterlabs.org/doc/acls.htmlを参照してください。