[玩转系统] 将 Azure 自动化托管标识与 Exchange Online 结合使用
作者:精品下载站 日期:2024-12-14 04:06:50 浏览:14 分类:玩电脑
将 Azure 自动化托管标识与 Exchange Online 结合使用
Exchange Online 和 Azure 自动化
更新于 2024 年 2 月 15 日
在上一篇文章中,我探讨了如何将 Microsoft Teams 和 Microsoft Graph PowerShell SDK 模块与 Azure 自动化托管标识结合使用。当时,我注意到 Exchange Online 不支持托管身份。当 Microsoft 发布 Exchange Online Management 模块 V3.0 并提供对托管标识的支持时,这个问题就消失了。使用托管标识连接到 Exchange Online 需要指定要连接的组织,仅此而已。
Connect-ExchangeOnline -ManagedIdentity -Organization office365itpros.onmicrosoft.com
属于托管标识的服务主体需要执行 Exchange Online 管理操作的权限。我确实注意到,无法使用 New-UnifiedGroup cmdlet 创建新的 Microsoft 365 组。这可能是暂时的故障,或者此 cmdlet 可能尚无法使用托管标识。
更新:始终使用最新版本的 Exchange Online 管理模块(V3.0 或更高版本)通过 Azure 自动化连接到 Exchange Online。下面描述的方法现在仅具有历史意义。有关详细信息,请参阅 Microsoft 文档。 Microsoft 尚未升级某些 Microsoft 365 组管理 cmdlet,以便在使用托管标识进行身份验证后与 Azure 自动化配合使用。这些 cmdlet 的功能可以替换为来自 Microsoft Graph PowerShell SDK 或 Graph API 请求的 cmdlet。
将托管身份与 Exchange PowerShell V1 结合使用
当我们等待 Microsoft 提供生产模块时,可以使用具有托管身份的旧版 V1 Exchange 模块。 MVP Vasil Michev 在他的博客中阐述了具体方法。在进一步讨论之前,必须要说明的是,微软也不支持这种方法。它可以工作,但如果您在生产中使用它,则不要指望在出现问题时能够致电 Microsoft 支持。
此过程中的重要步骤是将作为应用程序管理 Exchange 角色分配给您选择使用的托管标识的服务主体。这是通过以下方式完成的:
- 获取注册用于 Exchange 管理的 Microsoft 企业应用程序的详细信息。
- 从为 Exchange 管理应用定义的角色集中获取“将 Exchange 作为应用程序管理”角色的权限标识符。
- 使用该信息将作为应用程序管理 Exchange 角色分配给托管标识的服务主体。
再次强调,PowerShell 是完成任务的唯一方法。这是我使用的代码:
$ExoApp = Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'"
$AppPermission = $ExoApp.AppRoles | Where-Object {$_.DisplayName -eq "Manage Exchange As Application"}
$AppRoleAssignment = @{
"PrincipalId" = $ManagedIdentityApp.Id
"ResourceId" = $ExoApp.Id
"AppRoleId" = $AppPermission.Id
}
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentityApp.Id -BodyParameter $AppRoleAssignment
一旦服务主体拥有允许其充当 Exchange 管理员的角色,我们就可以让它发挥作用。此代码是使用托管身份登录 Exchange Online 的示例,使用为身份生成的访问令牌(使用名为 OAuthUser@ 的特殊帐户加上租户标识符 (OAuthUser@a662313f-14fc-43a2-9a7a-d2e27f4f3478 在本例中)连接后,我们运行一些标准 Exchange PowerShell 代码来查找所有用户邮箱并返回一些邮箱统计信息。
# Get token with Service Principal for managed identity
$ResourceURI = "https://outlook.office365.com/"
$TokenAuthURI = $env:IDENTITY_ENDPOINT + "?resource=$resourceURI&api-version=2019-08-01"
$TokenResponse = Invoke-RestMethod -Method Get -Headers @{"X-IDENTITY-HEADER"="$env:IDENTITY_HEADER"} -Uri $tokenAuthURI
$AccessToken = $TokenResponse.access_token
$Authorization = "Bearer {0}" -f $accessToken
$Password = ConvertTo-SecureString -AsPlainText $Authorization -Force
$Ctoken = New-Object System.Management.Automation.PSCredential -ArgumentList "OAuthUser@a662313f-14fc-43a2-9a7a-d2e27f4f3478",$Password
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveId?BasicAuthToOAuthConversion=true -Credential $Ctoken -Authentication Basic -AllowRedirection -Verbose
Import-PSSession $Session | Format-List
$Mbx = Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited
$MbxList = [System.Collections.Generic.List[Object]]::new()
ForEach ($M in $Mbx) {
$Stats = Get-MailboxStatistics -Identity $M.DistinguishedName
$MLine = [PSCustomObject][Ordered]@{ # Write out details of the private channel and its members
Mailbox = $M.DisplayName
UPN = $M.UserPrincipalName
Items = $Stats.ItemCount
Size = $Stats.TotalItemSize
LastInteraction = $Stats.LastInteraction
ProhbitSendQuota = $M.ProhibitSendReceiveQuota }
$MbxList.Add($MLine) }
$MbxList | Sort-Object Items -Descending | Format-Table Mailbox, Items, Size
Remove-PSSession $Session
该代码可以正常工作(图 1),但需要注意的是,只有旧的 cmdlet(源自本地的集)可用。 Exchange Online 管理模块中的基于 REST 的较新 cmdlet(例如 Get-EXOMailbox)均无法使用。
使用 Exchange Online V2 模块
如果您想在获取大量对象时使用 Exchange Online V2 模块中的 cmdlet 来利用其速度和可靠性,则可以,但不能使用托管标识(目前)。相反,你可以使用之前文章中探讨的一些技术,特别是在 Azure Key Vault 中存储用户名和密码凭据。该帐户必须拥有 Exchange 管理员角色才能执行 Exchange 管理任务。这可能是一个过渡阶段,允许在等待 Microsoft 完善对 Exchange Online 的托管标识支持时自动执行一些重复的定期处理。
使用我编写的脚本来检查共享邮箱是否有适当的许可证。通常,共享邮箱不需要许可证,但一旦共享邮箱存储超过 50 GB 的内容、具有存档或处于诉讼保留状态,规则就会发生变化,并且邮箱需要 Exchange Online 计划 2 许可证。您可以忽略该要求,但最终 Exchange 将停止邮箱接收和发送电子邮件,这是一个糟糕的地方。
该脚本使用 Get-ExoMailbox 和 Get-ExoMailboxStatistics cmdlet 与邮箱和 Get-MgUserLicenseDetail cmdlet(来自 Microsoft Graph PowerShell SDK)进行交互) 以检查拥有共享邮箱的 Azure AD 帐户的许可状态。
为了让脚本在 Azure 自动化中运行,我添加了使用托管帐户登录 Microsoft Graph PowerShell SDK 的代码,并从 Azure Key Vault 获取了帐户凭据。以下是检索凭据并连接到 Exchange 的代码:
# Connect to AzAccount to access Key Vault to fetch variables used by the script
$AzConnection = Connect-AzAccount -Identity | Out-Null
# Get username and password from Key Vault
$UserName = Get-AzKeyVaultSecret -VaultName "Office365ITPros" -Name "ExoAccountName" -AsPlainText
$UserPassword = Get-AzKeyVaultSecret -VaultName "Office365ITPros" -name "ExoAccountPassword" -AsPlainText
# Create credentials object from the username and password
[securestring]$SecurePassword = ConvertTo-SecureString $UserPassword -AsPlainText -Force
[pscredential]$UserCredentials = New-Object System.Management.Automation.PSCredential ($UserName, $SecurePassword)
Connect-ExchangeOnline -Credential $UserCredentials
之后,只需稍微更新脚本代码即可更改一些细节(例如删除 Write-Host 的一些实例并更新其他实例以使用 Write-Output 代替- 当脚本在 Azure 自动化中执行时,包含大量信息输出是没有意义的)。我还在脚本中添加了一个 Disconnect-ExchangeOnline 命令,以便在脚本完成时删除与 Exchange Online 的连接。这可以避免在测试期间快速连续多次运行脚本时遇到问题,因为 Azure 自动化不允许超过三个并发连接。
正如我所料,一切顺利(图 2)。我没有经历创建适合管理员使用的输出的过程。这可以通过使用以下任何众所周知的方法来完成:
- 将消息发布到 Teams 频道。
- 在 SharePoint Online 网站中创建文档。
- 正在发送电子邮件。
下一步 - 生产
在这两种方法中,我更喜欢使用第二种,因为我总是更喜欢使用 Exchange Online V2 cmdlet。使用托管标识连接到 V1 模块很有趣,但使用 V2 cmdlet 更实用,特别是因为它们将成为生产解决方案的基础。在此期间,从 Azure Key Vault 获取凭据并不完美,但它有效,而且这通常是最重要的事情。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag