问题描述
我目前正在尝试使用 PowerShell 脚本在 Azure AD 中自动创建用户,并在 Exchange Online 中自动添加通讯组。为此,我遵循了 this 指南 - 我已经使用证书设置了应用注册,这就是我向 Azure AD 和 Exchange Online 进行身份验证的方式 - 无需人工干预。
我在脚本中运行的特定 Exchange cmdlet(对于 EXO 部分)是 Add-distributionGroupMember -member "user@domain.com" -identity "dlist" -BypassSecurityGroupManagerCheck
,一旦我运行它,我就会收到以下错误输出:
Active Directory operation Failed on XXXXXXXXXXXXXXX.XXXXXXXXXXX.PROD.outlook.com. This error is not retriable. Additional information: Insufficient access rights to perform the operation.
Active directory response: 00002098: SecErr: DSID-XXXXXXXX,problem 4003 (INSUFF_ACCESS_RIGHTS),data 0
+ CategoryInfo : NotSpecified: (:) [Add-distributionGroupMember],ADOperationException
+ FullyQualifiedErrorId : [Server=XXXXXXXXXXXXX,RequestId=8ac3130a-4bbe-41a0-b062-4768b6f51234,TimeStamp=1/3/2021 2:18:13 PM] [FailureCategory=Cmdlet-ADOperationException] XXXXXXX,Microsoft.Exchange.Management.RecipientTasks.Adddistribu
tionGroupMember
+ PSComputerName : outlook.office365.com
其他 cmdlet,例如
Get-MailBox
工作正常,但这个特定的问题不断给我带来问题。我已经尝试将 Azure 中我能想到的所有 API 权限授予应用程序,包括委托和应用程序权限,但我仍然面临错误。这是当前的完整列表,我没有任何成功:
我也尝试用应用程序权限替换一些委派权限,但也无济于事。我也尝试按照 article 中提到的那样为应用程序分配各种角色,每次出现 Insufficient access rights to perform the operation
错误时。
谁能告诉我为什么?我应该在哪里以及如何授予应用程序将用户添加到分发(邮件)列表的必要权限?
过去几天我一直在四处寻找,但没有找到答案。任何帮助将不胜感激。
解决方法
如果我没记错的话,在添加成员之前,您应该是该组的ManagedBy 的一部分。
第 1 步:
首先执行以下命令之一:
Set-DistributionGroup <NameOfGroup> -ManagedBy "<Your Alias>" -BypassSecurityGroupManagerCheck
或者:
Set-DistributionGroup Accounting -ManagedBy @{Add="< Your Alias>"} -BypassSecurityGroupManagerCheck
第 2 步:
然后执行命令将用户添加到组中。
Add-DistributionGroupMember -Identity <NameOfGroup> -Member user@contoso.com
,
根据我的测试,添加Exchange.ManageAsApp
应用程序权限并分配Exchange服务管理员角色就足够了。
创建 AAD 应用并添加 Exchange.ManageAsApp
应用权限。
$appName = 'Exo_V2_App'
$api = (Get-AzureADServicePrincipal -Filter "AppID eq '00000002-0000-0ff1-ce00-000000000000'")
$permission = $api.AppRoles | Where-Object { $_.Value -eq 'Exchange.ManageAsApp' }
$apiPermission = [Microsoft.Open.AzureAD.Model.RequiredResourceAccess]@{
ResourceAppId = $api.AppId ;
ResourceAccess = [Microsoft.Open.AzureAD.Model.ResourceAccess]@{
Id = $permission.Id ;
Type = "Role"
}
}
$myApp = New-AzureADApplication -DisplayName $appName -ReplyUrls 'http://localhost' -RequiredResourceAccess $apiPermission
$mySP = New-AzureADServicePrincipal -AppID $myApp.AppID
$myApp | Format-List DisplayName,ObjectID,AppID
将服务主体分配给 Exchange 服务管理员角色。
$directoryRole = 'Exchange Service Administrator'
$RoleId = (Get-AzureADDirectoryRole | Where-Object {$_.displayname -eq $directoryRole}).ObjectID
Add-AzureADDirectoryRoleMember -ObjectId $RoleId -RefObjectId $mySP.ObjectID -Verbose
您可以尝试创建一个新的干净的 Azure AD 应用程序,而无需添加额外的配置来进行测试。