PowerShell を使って委任された同意済みアクセス許可を追加または削除する方法

Microsoft 環境でアプリケーションの委任されたアクセス許可を管理することは、管理者にとって重要な作業です。このガイドでは、 Microsoft Graph PowerShell スクリプト を使用して、委任されたアクセス許可をより細かい粒度で制御しながら追加または削除する方法を紹介します。


委任されたアクセス許可を変更する理由

委任されたアクセス許可により、アプリケーションはサインイン中のユーザーに代わって動作できます。ただし、次のような場合には、これらのアクセス許可を調整する必要があります。

  • セキュリティ上の理由から、不要または過剰なアクセス許可を削除するため。
  • アプリケーションの機能に必要な新しいアクセス許可を追加するため。
  • API アクセスの問題をトラブルシューティングするため。

注: ここで紹介するスクリプトでは、アクセス許可をきめ細かく制御でき、高度なシナリオに最適です。


PowerShell スクリプト:委任されたアクセス許可の追加または削除

委任されたアクセス許可を管理するための PowerShell スクリプト全文は次のとおりです。

構成セクション

# CONFIGURATION

# Application ID of app
$appId= "YOUR_APP_ID"

# Uncomment below line if you want to modify user consent
# $UserId = [email protected]

# Microsoft Graph App ID (DO NOT CHANGE)
# AAD Graph App Id: "00000002-0000-0000-c000-000000000000"
# MS Graph App Id: "00000003-0000-0000-c000-000000000000"
$resourceId= "00000003-0000-0000-c000-000000000000"

# Delegated Permissions you want on this service principal
$AddPermissions = @(
    "User.Read"
)

$RemovePermissions = @(
    "Mail.Send",
    "Group.ReadWrite.All"
)

メインスクリプト

# Connect to Microsoft Graph PowerShell
Connect-MgGraph -Scopes "Directory.Read.All DelegatedPermissionGrant.ReadWrite.All"

$appPrincipal = Get-MgServicePrincipal -Filter "appId eq '$($appId)'"
$ResourceServicePrincipal = Get-MgServicePrincipal -Filter "appId eq '$($resourceId)'"
$UserPrincipal = Get-MgUser -UserId $UserId

# Find grant if one already exists
if($UserId) {
    $grants = Get-MgOauth2PermissionGrant -Filter "clientId eq '$($appPrincipal.id)' and resourceId eq '$($ResourceServicePrincipal.id)' and principalId eq '$($UserPrincipal.id)'"
} else {
    $grants = Get-MgOauth2PermissionGrant -Filter "clientId eq '$($appPrincipal.id)' and resourceId eq '$($ResourceServicePrincipal.id)'"
}

# Update existing grant
$RemovePermissions += $AddPermissions
foreach($grant in $grants) {
    # Remove permissions from grant
    foreach($permission in $RemovePermissions) {
        Write-Host "Removing: $($permission)"
        # Remove permission from grant
        $grant.scope = $grant.scope.Replace($permission, "")
    }

    # Add permissions to grant
    foreach($permission in $AddPermissions) {
        $grant.scope += $permission + " "
    }

    # Update existing Grant
    Update-MgOauth2PermissionGrant -Oauth2PermissionGrantId $grant.id -Scope $grant.scope.Trim()
}

# Create grant if none exists
if(!$grants) {
    $ScopeString = $AddPermissions -join " "
    if($UserId) {
        New-MgOauth2PermissionGrant -ClientId $appPrincipal.id -ResourceId $ResourceServicePrincipal.id -Scope $ScopeString -ConsentType Principal -PrincipalId $UserPrincipal.id
    } else {
        New-MgOauth2PermissionGrant -ClientId $appPrincipal.id -ResourceId $ResourceServicePrincipal.id -Scope $ScopeString -ConsentType AllPrincipals
    }
}

管理者向けの重要な注意点

  1. 前提条件:
    • 最新バージョンをインストール: Microsoft Graph PowerShell SDK.
    • 委任されたアクセス許可を管理するために必要なアクセス許可があることを確認してください(Directory.Read.All と DelegatedPermissionGrant.ReadWrite.All).
  2. スクリプトのカスタマイズ:
    • 次のプレースホルダー YOUR_APP_ID を、管理するアプリのアプリケーション ID に置き換えてください。
    • 次の $AddPermissions と $RemovePermissions 配列を変更し、追加または削除するアクセス許可を含めてください。
  3. ユーザーとアプリケーションのアクセス許可:
    • 特定のユーザーのアクセス許可を変更する場合は、コメントを解除して $UserId をそのユーザーのメールアドレスに設定してください。
    • すべてのユーザーのアクセス許可を管理する場合は、 $UserId をコメントアウトしたままにしてください。
  4. スクリプトのテスト:
    • 本番環境でスクリプトを実行する前に、非本番環境でテストし、期待どおりに動作することを確認してください。

使用例

  • アクセス許可の追加: 次のアクセス許可 User.Read を追加すると、アプリが基本的なユーザープロフィール情報にアクセスできるようになります。
  • アクセス許可の削除: 次のアクセス許可 Mail.Send を削除すると、アプリがユーザーに代わってメールを送信できなくなります。
  • きめ細かな制御: アクセス許可の追加と削除を1つのスクリプトにまとめれば、効率的に管理できます。

コメントを残す