どうも、Tです。
vSphereの権限・ロールの前提知識をまとめてみました。
今回は実機でどのような動作になるか確認してみます。細かく書くときりがないのでざっくりで書いてます。いい感じで読み取ってください。
目次
ここでの結論
動作確認してみた結論です。
- 【確認2】同一オブジェクトに1つのユーザー(もしくはグループ)に複数のロールを作るときはSSOグループを使う
- 【確認3】オブジェクトに設定する権限は集合(積み上げ)になる
- 【確認4】オブジェクトに設定する権限はグループ単位よりもユーザー単位が優先される
- 【確認5】階層のあるオブジェクトの権限付与は、親より子が優先される(子のロールでオーバーライドされる)
環境
バージョン
下記の環境で確認しました。
- vCenterServer:7.0.2 17958471
- vSphere ESXi: 7.0.2 17867351
ソースID側
また、権限を付与するユーザーとして、外部ADのドメインアカウントを使用しました。
下記の設定で、ADをソースとして追加しています。
ロールの作成からオブジェクト割当までの流れ
基本的なロールの作成、SSOグループの作成、インベントリオブジェクトへのロールの設定を記載しておきます。
新規ロール作成
まずロールを作成します。
「管理」->「アクセスコントロール」->「ロール」->「+」をクリックします。
左欄からロールに追加したい権限グループを選択し、右の欄から権限を選択し「Next」をクリックします。
任意のロール名を入力して「FINISH」をクリックします。
ロールが作成できました。権限タブを見るとロールに追加している権限の一覧をみることができます。
SSOグループ作成
必要に応じSSOグループを作ることがあるので、SSOグループ作成の仕方になります。
「管理」->「Single Sign-On」->「グループタブ」->「追加」をクリックします。
任意のグループ名を入力します。メンバー追加の上の段で検索するソース(ADやSSOドメインなど)を選択し、下の検索バーにSSOグループに追加するユーザーもしくはグループを検索してクリックすると画面のように追加されます。例ではADドメインのセキュリティグループを入れています。「追加」をクリックします。
追加できました。SSOグループの一覧画面は非常に見づらいので、追加したら検索からグループを検索して作成されているか確認しましょう。
インベントリオブジェクトへの追加
ロールとユーザー・グループをインベントリオブジェクトへ設定する方法です。
「追加したいオブジェクトを選択」->「権限タブ」->「+」をクリックします。
オブジェクトに追加したいユーザー・グループ・ロールを選択して、「子で伝達」にチェックをいれて「OK」をクリックします。※子へ伝達することによって、配下のオブジェクトに対しても同じロールが割り当たります。本記事の検証では、子への伝達にチェックをいれて確認しています。
SSOグループを追加したいときは、SSOドメイン(vphsere.local)を選択します。
確認1:1グループ・1ロール・1オブジェクト
1つの確認内容です。非常にシンプルな構成です。グループ・ロール・オブジェクトを1つずつ紐づけて権限が機能するか確認します。
構成
仮想マシンフォルダGroupAとGroupBオブジェクトに、それぞれのロールとADグループを割り当てます。testRoleAには、仮想マシンすべての操作権限、testRoleBには、パワーオンとパワーオフのみ許可する権限構成になっています。
確認
左がGroupB、右がGroupAです。それぞれのユーザーでログインしているので、権限のないオブジェクトは表示されていません。
左はパワーオンオフ(シャットダウン含む)は行えますが、仮想コンソール操作などはできません。
仮想マシンのメニューもGroupBのほうは、グレーアウトしている項目が多いことがわかります。
このくらいのシンプルな構成であれば、ロールだけ作成できておければ苦も無く設定できそうです。
確認2:複数のグループからの権限の継承
下記ドキュメントのような複数のグループを1つのオブジェクトに権限を割り当てるとどうなるか確認します。
構成
GroupAオブジェクトに、仮想マシンコンソール操作とパワーオンオフのロール2つ追加します。なお、ADグループは2つのSSOグループに参加して、SSOグループに対してロールを組み合わせます。
以前の記事でも書きましたが、1つのオブジェクトに対して、1つのADグループ(もしくはユーザー)に複数のロールを直接持たせることができたないためです。
確認
testRoleA_Addロール(仮想マシンのパワーオフオン)だけGroupAに割り当てた状態です。仮想コンソールはグレーアウトして触れなくなっています。※右上の電源ボタンをグレーアウトしていますが、仮想マシンの右クリックメニューから電源操作が行える状態でした。
testRoleA(仮想マシンのコンソール操作)をGroupAに追加しました。仮想コンソールが操作できるようになります。
権限の設定では、SSOグループとロールのセットを追加しています。
SSOグループSSO画面のほうで作成しています。
ドキュメントにあるように、2つのRoleが有効になっていることがわかります。
確認3:複数のグループからの権限の継承(強い権限+弱い権限)
「確認2:複数のグループからの権限の継承」では、仮想マシンという操作に対して、コンソール操作とパワーオンオフという小さい権限のロールと2つ追加しました。
今回は、片方のロールはすべての操作(強い権限)を許可して、片方のロールはパワーオンオフという一部の権限(弱い権限)を割り当てるとどうなるか試してみます。
構成
testRoleAには、仮想マシンすべての操作権限を付与しました。testRoleA_Addには仮想マシンのパワーオンオフ権限のみ付与しています。これをGroupAオブジェクトに追加します。
確認
2つのロールを追加した状態です。仮想コンソールやスナップショットなど、仮想マシンのパワーオンオフ以外の操作も行えます。
これは下記ドキュメントの記載からも想定できます。今回はグループに対してロールを設定していますが、その場合は、権限の集合がオブジェクトに対して反映されます。つまり、権限の積み上げ方式ということです。
オブジェクトに対し、ユーザーの権限が直接定義されていない。この場合は、ユーザーが所属するグループがオブジェクトに対して持っている権限の集合を取得します。
2021年9月6日追記
SSOグループではなく、下記のように一人のユーザーが二つのADグループに属しているパターンでも試したところ同じ結果になりました。つまりSSOグループ・ADグループに限らず権限の集合がオブジェクトに対して反映されるということです。
確認4:ユーザーロールによるグループのオーバーライド
下記ドキュメントの例を確認してみます。
タイトル名が大きく変わっていますが、「確認3:複数のグループからの権限の継承(同じ権限グループ)」の続きの確認になります。
1つのオブジェクトに複数のロールを追加した場合、権限の集合が反映されることはわかりましたが、この人だけは別の権限を付与したいというパターンです。
構成
少々複雑になります。testaduseraは、ADグループに所属し、SSOグループに所属しtestRoleA(仮想マシンの操作すべて)とセットになっています。
かつ、testaduseraには、個別にtestRoleA_Add(仮想マシンのパワーオンオフのみ)も付与されています。
確認
この場合、testaduseraは、ユーザー個別に付与されたtestRoleA_Add(仮想マシンのパワーオンオフ)しか行えません。testaduseraの所属しているグループに対してのtestRoleA(仮想マシン操作すべて)は適用されていないことになります。
これも下記のドキュメントの説明から正しい動作になります。ユーザー権限個別に指定したロール(権限)が他のすべてのグループに指定したロール(権限)よりも強いということになります。
オブジェクトに対し、ユーザーの権限が直接定義されている。この場合は、ユーザーの権限が、すべてのグループ権限より優先されます。
検証で確認したところ、ここのグループとは、SSOグループとAD上のセキュリティグループの両方をの意味になりました。つまり、1つのオブジェクトに対して、権限のない(制限をついた)ロールを付与する場合は、ユーザー個別に設定する必要があります。(結構面倒・・・・)
権限の設定は、下記のようになっています。
確認5:子の権限による親の権限のオーバーライド
最後の確認は、下記ドキュメントのパターンになります。親オブジェクトでロールを設定し、その下の子オブジェクトで別のロールを指定した場合どうなるかというパターンです。
構成
GroupAオブジェクトの下に、GroupA-Child、GroupA-Child-Overrideオブジェクトを作成しました。GroupAには仮想マシンすべての操作の権限、GroupA-Child-Overrideは仮想マシンパワーオンオフのみの権限のロールを追加します。
確認
GroupA-Childオブジェクト配下の仮想マシンに対してすべての操作が可能です。GroupAに設定したtestRoleA(仮想マシンのすべての操作)が子の伝達によって継承されているためです。
GroupA-Child-Overrideオブジェクト配下の仮想マシンは、testRoleA_Add(仮想マシンのパワーオンオフ)の操作しか行えません。仮想コンソールやスナップショットなどは権限ないためグレーアウトします。
これは、GroupAに設定したRoleA(仮想マシンのすべての操作)をtestRoleA_Add(仮想マシンのパワーオンオフ)で上書き(オーバーライド)しているためになります。
2021年9月6日追記
念のためSSOグループではなく、下記のように一人のユーザーが二つのADグループに属しているパターンでも試したところ同じ結果になりました。ちゃんと親の権限をオーバーライドしていました。
まとめ
色々なパターンがあって難しいですね・・・・やはり、ロール(権限)制御するにしても、仮想マシン関連のオブジェクトのみに抑えたいところです。あとは、管理者権限で良しなにしてねと・・・・ダメかな(´・ω・`)