【PowerCLI】SSOユーザーとグループの操作

どうも、Tです。

Power CLIを使ってSSOユーザーとグループの操作を試します。

やりたいこと

SSOユーザー

Single Sign-Onのローカルドメイン(vsphere.local)のユーザーを操作したい。

グループ

ローカルグループを操作したい。

注意事項

標準のPower CLIでは、SSO管理系のAPIがない

2021年10月現在、Power CLIの機能としてSSOユーザー、グループ関連について、Get-VIAccountコマンドでユーザーを表示する機能しかないようです。(表示もvSphere Client上と異なり内部のシステムユーザーも表示されているっぽい)

Module to manage vCenter SSO Admin functionality | VMware PowerCLI

これはVMware社内でも話題に上がっておりSSOの管理を行うオープンソースモジュールとして公開されたとのことです。

https://blogs.vmware.com/PowerCLI/2020/10/new-open-source-powercli-module-for-managing-vcenter-single-sign-on-sso.html

下記がそのオープンソースモジュール(VMware.vSphere.SsoAdmin )です。現在も開発は続いています。ソースコードは読んでいませんが、vCenterの中のSSO CLIsを使っているようです。

PowerCLI-Example-Scripts/Modules/VMware.vSphere.SsoAdmin at master · vmware/PowerCLI-Example-Scripts
Contribute to vmware/PowerCLI-Example-Scripts development by creating an account on GitHub.

今回は、上記モジュールを使います。

VMware.vSphere.SsoAdminのインストール

Power Shellで下記を実行してインストールします。

Install-Module VMware.vSphere.SsoAdmin

下記コマンドを実行してインストールできたことを確認します。

Get-Module VMware* -ListAvailable

どんな機能があるのか

Githubにまともに説明がないのですが、下記のようなコマンドがあるらしいです。

PS C:\WINDOWS\system32> Get-Command -Module VMware.vSphere.SsoAdmin
CommandType Name Version Source
----------- ---- ------- ------
Alias Add-ActiveDirectoryIdentitySource 1.3.5 VMware.vSphere.SsoAdmin
Function Add-GroupToSsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function Add-LDAPIdentitySource 1.3.5 VMware.vSphere.SsoAdmin
Function Add-UserToSsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function Connect-SsoAdminServer 1.3.5 VMware.vSphere.SsoAdmin
Function Disconnect-SsoAdminServer 1.3.5 VMware.vSphere.SsoAdmin
Function Get-IdentitySource 1.3.5 VMware.vSphere.SsoAdmin
Function Get-SsoAuthenticationPolicy 1.3.5 VMware.vSphere.SsoAdmin
Function Get-SsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function Get-SsoLockoutPolicy 1.3.5 VMware.vSphere.SsoAdmin
Function Get-SsoPasswordPolicy 1.3.5 VMware.vSphere.SsoAdmin
Function Get-SsoPersonUser 1.3.5 VMware.vSphere.SsoAdmin
Function Get-SsoTokenLifetime 1.3.5 VMware.vSphere.SsoAdmin
Function New-SsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function New-SsoPersonUser 1.3.5 VMware.vSphere.SsoAdmin
Function Remove-GroupFromSsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function Remove-IdentitySource 1.3.5 VMware.vSphere.SsoAdmin
Function Remove-SsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function Remove-SsoPersonUser 1.3.5 VMware.vSphere.SsoAdmin
Function Remove-UserFromSsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function Set-LDAPIdentitySource 1.3.5 VMware.vSphere.SsoAdmin
Function Set-SsoAuthenticationPolicy 1.3.5 VMware.vSphere.SsoAdmin
Function Set-SsoGroup 1.3.5 VMware.vSphere.SsoAdmin
Function Set-SsoLockoutPolicy 1.3.5 VMware.vSphere.SsoAdmin
Function Set-SsoPasswordPolicy 1.3.5 VMware.vSphere.SsoAdmin
Function Set-SsoPersonUser 1.3.5 VMware.vSphere.SsoAdmin
Function Set-SsoSelfPersonUserPassword 1.3.5 VMware.vSphere.SsoAdmin
Function Set-SsoTokenLifetime 1.3.5 VMware.vSphere.SsoAdmin

SSOサーバーへの接続

SSOサーバー接続

このコマンドを使うのにSSOサーバー(PCSサービス)に接続する必要があるようです。

下記コマンドで接続します。

形式

Connect-SsoAdminServer -Server <SSOサーバー(vCenter)> -User <接続ユーザー>-Password <パスワード>

サンプル

Connect-SsoAdminServer -Server testvcsa.testdev.lab -User Administrator@vsphere.local -Password <パスワード>

問題なく接続できましたが、なぜか数回目以降から下記のエラーが出力されました。その場合は、「-SkipCertificateCheck」オプションをつけることで回避できました。なぞ・・・。

2021年12月2日追記

下記のサイトにvCenterが自己証明書の場合は、「-SkipCertificateCheck」オプションをつけろと書いておりました。

https://blogs.vmware.com/PowerCLI/2020/10/new-open-source-powercli-module-for-managing-vcenter-single-sign-on-sso.html

Use the Connect-SsoAdminServer to connect to your vCenter Server. If you have a self-signed certificate, you will need to pass in the -SkipCertificateCheck parameter

Connect-SsoAdminServer -Server testvcsa.testdev.lab -User Administrator@vsphere.local -Password <パスワード> -SkipCertificateCheck

Connect-SsoAdminServer : 1 つ以上のエラーが発生しました。
発生場所 行:1 文字:1
+ Connect-SsoAdminServer -Server testvcsa.testdev.lab -User Administrat …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Connect-SsoAdminServer

SSOサーバー切断

切断は下記のコマンドです。

Disconnect-SsoAdminServer

SSOユーザー

SSOユーザー表示

SSOドメイン内の全ユーザー一覧

形式

Get-SsoPersonUser -Domain <SSOドメイン or ADドメイン>

サンプル

Get-SsoPersonUser -Domain vsphere.local
Get-SsoPersonUser -Domain vsphere.local| Format-Table -AutoSize -Wrap

標準だと縦表示なので、Format-Table使ってリスト化したほうが見やすいです。

SSOドメインの指定のユーザー

形式

 Get-SsoPersonUser -Name <ユーザー名> -Domain <SSOドメイン or ADドメイン>

サンプル

Get-SsoPersonUser -Name testuser -Domain vsphere.local
Get-SsoPersonUser -Name testuser -Domain vsphere.local | Format-Table -AutoSize -Wrap
Get-SsoPersonUser -Name test* -Domain vsphere.local | Format-Table -AutoSize -Wrap

標準だと縦表示なので、Format-Table使ってリスト化したほうが見やすいです。

ワイルドカードも使えます。

SSOユーザー作成

形式

 New-SsoPersonUser -UserName <ユーザー名> -Password <パスワード> -Description <説明> -EmailAddress <メールアドレス> -FirstName <名前(名)> -LastName <名前(性)>

サンプル

New-SsoPersonUser -UserName testuser -Password <パスワード> -Description 'これはテストです' -EmailAddress testuser@gmail.com -FirstName 'テスト' -LastName '太郎'

「-UserName」「-Password」は必須です。他項目は日本語も使えました。

SSOユーザー設定変更

形式

$<変数名>=Get-SsoPersonUser -Name <ユーザー名> -Domain <ドメイン名>
Set-SsoPersonUser -User $<変数名> -NewPassword <パスワード>

サンプル

$testuser=Get-SsoPersonUser -Name testuser -Domain vsphere.local
Set-SsoPersonUser -User $testuser -NewPassword <パスワード>

パスワードを変更してみました。注意点は、ユーザー名を直接指定してもエラーになることです。一旦変数に取得したユーザーオブジェクトを格納してから、Setコマンドで変数を指定します。

なお、再度設定できる項目はさほど多くありませんでした。説明、Eメールなどは変更できないので注意が必要です。

SSOユーザー削除

形式

$<変数名>=Get-SsoPersonUser -Name <ユーザー名> -Domain <ドメイン名>
Remove-SsoPersonUser -User $<変数名>

サンプル

$testuser=Get-SsoPersonUser -Name testuser -Domain vsphere.local
Remove-SsoPersonUser -User $testuser

こちらも一旦変数にユーザーオブジェクトを格納して、Removeコマンドで変数名を指定する必要があるのでご注意ください。

SSOグループ

SSOグループ表示

SSOドメイン内の全グループ一覧

形式

Get-SsoGroup -Domain <SSOドメイン or ADドメイン>

サンプル

Get-SsoGroup -Domain vsphere.local | Format-Table -AutoSize -Wrap

SSOドメインの指定のグループ

形式

 Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン>

サンプル

Get-SsoGroup -Name testgroup1 -Domain vsphere.local | Format-Table -AutoSize -Wrap
Get-SsoGroup -Name test* -Domain vsphere.local | Format-Table -AutoSize -Wrap

ワイルドカード使えます。

SSOグループの作成

形式

New-SsoGroup -Name <グループ名> -Description <説明>

サンプル

New-SsoGroup -Name testgroup3 -Description 'これはテストグループ3'

「-Name」は必須です。「-Description」は日本語も使えました。

SSOグループの変更

形式

$<変数名>=Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン>
Set-SsoGroup -Group $<変数名> -Description <説明>

サンプル

$testgroup3=Get-SsoGroup -Name testgroup3 -Domain vsphere.local
Set-SsoGroup -Group $testgroup3 -Description '変更しました'

一旦変数にグループオブジェクトを格納して、Removeコマンドで変数名を指定する必要があるのでご注意ください。

説明だけ変更が可能です。vSphere Client上ではグループ作成後の説明の変更はできないのでコマンドでできるのは驚きました。

SSOグループの削除

形式

$<変数名>=Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン>
Remove-SsoGroup -Group $<変数名>

サンプル

$testgroup3=Get-SsoGroup -Name testgroup3 -Domain vsphere.local
Remove-SsoGroup -Group $testgroup3

一旦変数にグループオブジェクトを格納して、Removeコマンドで変数名を指定する必要があるのでご注意ください。

グループへのメンバー追加

グループにユーザー追加

形式

$<変数名>=Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン>
Get-SsoPersonUser -Name <ユーザー名> -Domain  <SSOドメイン or ADドメイン> | Add-UserToSsoGroup -TargetGroup $<変数>

サンプル

$testgroup1=Get-SsoGroup -Name testgroup1 -Domain vsphere.local
Get-SsoPersonUser -Name testuser1 -Domain vsphere.local | Add-UserToSsoGroup -TargetGroup $testgroup1

少々面倒でした。対象のグループオブジェクトを変数に格納します。

その後、対象のユーザーをGetして、Add-UserToSsoGroupに渡す必要があります。

Getで存在しないものを指定してもエラーにならないためご注意ください。

グループからユーザー削除

形式

$<変数名>=Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン>
Get-SsoPersonUser -Name <ユーザー名> -Domain  <SSOドメイン or ADドメイン> | Remove-UserFromSsoGroup -TargetGroup $<変数>

サンプル

$testgroup1=Get-SsoGroup -Name testgroup1 -Domain vsphere.local
Get-SsoPersonUser -Name testuser1 -Domain vsphere.local | Remove-UserFromSsoGroup -TargetGroup $testgroup1

流れは追加と同じです。コマンドに「Remove-UserFromSsoGroup」を使います。

Getで存在しないものを指定してもエラーにならないためご注意ください。

グループにグループ追加

形式

$<変数名>=Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン>
Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン> | Add-GroupToSsoGroup -TargetGroup $<変数名>

サンプル

$testgroup1=Get-SsoGroup -Name testgroup1 -Domain vsphere.local
Get-SsoGroup -Name testgroup1-1 -Domain vsphere.local | Add-GroupToSsoGroup -TargetGroup $testgroup1

ユーザーの追加と同じです。ユーザーではなくグループが対象にかわりました。

Getで存在しないものを指定してもエラーにならないためご注意ください。

グループからグループ削除

形式

$<変数名>=Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン>
Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン> | Remove-GroupFromSsoGroup -TargetGroup $<変数名>

サンプル

$testgroup1=Get-SsoGroup -Name testgroup1 -Domain vsphere.local
Get-SsoGroup -Name testgroup1-1 -Domain vsphere.local | Remove-GroupFromSsoGroup -TargetGroup $testgroup1

ユーザーの削除と同じです。ユーザーではなくグループが対象にかわりました。

Getで存在しないものを指定してもエラーにならないためご注意ください。

グループの参加メンバー確認

グループに参加しているユーザー確認

形式

Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン> | Get-SsoPersonUser

サンプル

Get-SsoGroup -Name testgroup1 -Domain vsphere.local | Get-SsoPersonUser | Format-Table -AutoSize -Wrap

グループに参加しているグループ確認

形式

Get-SsoGroup -Name <グループ名> -Domain <SSOドメイン or ADドメイン> | Get-Ssogroup

サンプル

Get-SsoGroup -Name testgroup1 -Domain vsphere.local | Get-Ssogroup | Format-Table -AutoSize -Wrap

他にできそうなこと

試していませんが、コマンドが用意されているのでSSOの「パスワードポリシー」「ロックアウトポリシー」「トークンの信頼性」もある程度設定できそうでした。

参考

https://developer.vmware.com/docs/powercli/latest/products/vmwarevsphereandvsan/categories/viaccount/

まとめ

Power CLIについて下記の記事にまとめていっています。

【随時作成中】VMware vSphere PowerCLIまとめ
どうも、Tです。 以前、esxcliコマンドを使ってESXiホストを設定する際に使用しそうなコマンドをまとめました。 ...