どうも、Tです。
Power CLIを使ってSSOユーザーとグループの操作を試します。
目次
やりたいこと
SSOユーザー
Single Sign-Onのローカルドメイン(vsphere.local)のユーザーを操作したい。
グループ
ローカルグループを操作したい。
注意事項
標準のPower CLIでは、SSO管理系のAPIがない
2021年10月現在、Power CLIの機能としてSSOユーザー、グループ関連について、Get-VIAccountコマンドでユーザーを表示する機能しかないようです。(表示もvSphere Client上と異なり内部のシステムユーザーも表示されているっぽい)
これはVMware社内でも話題に上がっておりSSOの管理を行うオープンソースモジュールとして公開されたとのことです。
下記がそのオープンソースモジュール(VMware.vSphere.SsoAdmin )です。現在も開発は続いています。ソースコードは読んでいませんが、vCenterの中のSSO CLIsを使っているようです。
今回は、上記モジュールを使います。
VMware.vSphere.SsoAdminのインストール
Power Shellで下記を実行してインストールします。
Install-Module VMware.vSphere.SsoAdmin
下記コマンドを実行してインストールできたことを確認します。
Get-Module VMware* -ListAvailable
2021年12月2日追記
オフライン環境のインストール方法をまとめました。
どんな機能があるのか
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」オプションをつけろと書いておりました。
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の「パスワードポリシー」「ロックアウトポリシー」「トークンの信頼性」もある程度設定できそうでした。
参考
まとめ
Power CLIについて下記の記事にまとめていっています。