🔧

PnP PowerShell を任意のアクセス許可で実行する

に公開

はじめに

PnP PowerShell を最初に実行すると Admin Consent が要求されますが、アクセス許可の一覧が多くて驚きます。

このままでは許可しづらいため、アクセス許可を制限した上で PnP PowerShell を利用したいと考えます。方法はいくつかあります。

SharePoint アドインを使用する

アドインの登録方法や詳しい手順については、以下のページが参考になります。

https://jpspsupport.github.io/blog/sharepoint-online/pnp-powershell-with-app-only-token

クライアント ID とクライアント シークレットを使ってログインできます。

Connect-PnPOnline -Url https://{{tenant-name}}.sharepoint.com -ClientId {{client-id}} -ClientSecret {{client-secret}}

注意点として、既定では利用できないテナントがあります。

2020 年夏頃以降に新規作成したテナントにおいて、アプリ専用トークンが既定で無効化されている場合があります。

Azure AD アプリケーションを使用する

委任されたアクセス許可

委任されたアクセス許可 (ユーザーとしてログイン) の場合、以下の方法が利用できます。

Connect-PnPOnline -Url https://{{tenant-name}}.sharepoint.com -Tenant {{tenant-id}} -ClientId {{client-id}} -DeviceLogin

Tenant パラメーターはマルチテナント アプリケーションの場合は不要です。

注意点として、Azure AD アプリケーションでパブリック クライアント フローを許可している必要があります。許可していない場合、以下のエラーが発生します。

AADSTS7000218: The request body must contain the following parameter: 'client_assertion' or 'client_secret'.

アプリケーションのアクセス許可

アプリケーションのアクセス許可の場合、クライアント シークレットは利用できず、証明書によるログインが必須です。

Connect-PnPOnline -Url https://{{tenant-name}}.sharepoint.com -Tenant {{tenant-id}} -ClientId {{client-id}} -CertificatePath {{certificate-path}} -CertificatePassword {{certificate-password}}

アクセス トークン

取得済みのアクセス トークンを使ったログインも可能です。

Connect-PnPOnline -Url https://{{tenant-name}}.sharepoint.com -Tenant {{tenant-id}} -AccessToken {{access-token}}

おわりに

ドキュメントにすべて記載されていますが、やや分かりづらい部分もあります。

https://github.com/pnp/powershell/blob/dev/documentation/Connect-PnPOnline

Scope を指定できるようにしてほしい場合は、Register-PnPAzureADApp を利用して必要なアクセス許可を持つアプリを作成することが推奨されています。

https://github.com/pnp/powershell/issues/421

Discussion