【SharePoint Online & PowerShell】アクセス権の確認はPowerShellを使って簡単にしたい。
ISMS(情報セキュリティマネジメントシステム)を運用するうえで色んなシステムに設定されているアクセス権の実態が、想定のアクセス権と一致しているかの確認は重要です。ここではSharePoint Onlineのアクセス権をPowerShellで一気にひっこぬく方法を記載します。シチュエーションは限定的でSharePoint Onlineのドキュメントライブラリに権限グループを設定し、権限グループに割り当てられたユーザが正しいかどうかを確認する。といういたって個人的な業務目的のための内容になります。ゴールは「貴方のチームがアクセスしていいサイトのアクセス権はこんな感じになってるよ。」という資料が半自動で抽出できる事に設定しています。ニーズは少ないと思いますが同じような仕事をする人は必ずいるはずと信じてブログに残します。
はじめに
こんにちは。エンタプライズビジネスグループのizumiです。
この記事は アイソルート Advent Calendar 2020 25日目の記事です。
準備
PowerShellにSharePoint onlineモジュールが使えるようになっているか確認します。PowerShellで次のコマンドを実行します。
Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version
次のような感じになりました。
使えるようです。備忘録として使えない状態の時にPowerShellにSharePoint Onlineのモジュールを組み込む方法も記載します。PowerShellのバージョンが5以上の場合、次のコマンドで管理シェルを使えるようになります。
Install-Module -Name Microsoft.Online.SharePoint.PowerShell
ところでPowerShellのバージョンはどうやって確認すればいいのでしょうか?確認するには次のコマンドを実行します。
$PSVersionTable
PowerShellのバージョンは「5.1.18362.1171」という事がわかりました。さて、折角PowerShellのバージョンを確認してシェルからモジュールの組み込みが可能な事がわかったので使ってみたくなるのがエンジニアのサガです。次のコマンドを実行してモジュールの最新版取得を試してみます。
Update-Module -Name Microsoft.Online.SharePoint.PowerShell
がーん!エラーです。Install-Moduleコマンドを使ってモジュールを組み込んでないとupdateコマンドが実行できないようです。残念。しかたがないのでさっさと本題に行くことにします。
接続
まずはSharePoint Onlineに接続します。次のコマンドを実行してIDとパスワードを入力するとユーザ情報を保存できます。
$userCredential = Get-Credential
次にユーザ情報を使用してSharePoint Online管理サイトに接続します。次のコマンドのxxxxxのところはドメインの一部、組織名に置き換えてください。
Connect-SPOService -Url https://xxxxxx-admin.sharepoint.com -Credential $userCredential
管理サイトへの接続は以上で終了です。
権限グループを抽出
権限を確認したいSharePoint Onlineサイトからセキュリティグループ(権限グループ)の一覧を抽出します。まずは目的のサイトに接続できる事を確認するために次のコマンドを実行します。先ほどの管理サイトとURLが違う事に注意してください。こちらのURLが本命です。
Get-SPOSite -Identity "https://isoroot.sharepoint.com/sites/test"
無事接続が確認できました。次は権限グループを取得してみます。次のコマンドを実行すると権限グループの一覧が取得できます。グループの数によっては時間がかかる場合があります。
Get-SPOSiteGroup -Site "https://isoroot.sharepoint.com/sites/test"
権限グループが取得できました。営業課の権限グループにはhogeta君とhogekoさんが権限を持っているようです。この権限が管理上の権限と一致しているかを担当者に確認してもらえばアクセス権の確認完了です。ですが、権限グループだけ作ってあって実際にはユーザが割り振られていない空箱があるようです。空箱状態の権限グループは不要なので、現在有効な権限グループだけを抽出するように今までのコマンドをまとめたスクリプトを書いてみます。
$user = "hoge@isoroot.jp" $password = Read-Host -Prompt "パスワードを入れてください" -AsSecureString $adminSite = "https://xxxxx-admin.sharepoint.com" $targetSite = "https://xxxxx.sharepoint.com/sites/yyyyyy" $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $password Connect-SPOService -Url $adminSite -Credential $userCredential $groups = Get-SPOSiteGroup -Site $targetSite Foreach ( $group in $groups) { if ( $group.users.count -gt 0 ) { $group } }
xxxxxのところは会社のドメイン名や組織名、yyyyのところは権限グループを取得したいサイトのURLに一致するように名称を変えてください。ユーザ情報はダイアログボックスが出ないように少しアレンジしました。実行結果はPowerShell上に出力するようになってますが、CSVなどのテキストに書きだすようにした方が便利かもしれません。
おわりに
今回は権限グループに設定されているユーザの一覧を取り出して、担当者に確認してもらうまでのスクリプトですが、次回はSPOクライアントモジュールを使ってドキュメントライブラリ階層情報とそこに紐付いている権限グループ、権限グループに登録されているユーザの一覧を一気に書きだすようにしていきたいと思います。SharePointの管理者のみなさんのお役にたてるような記事が書けることを目指して頑張ります。