[玩转系统] 使用 Azure 自动化通过 PowerShell 处理 Exchange Online 数据
作者:精品下载站 日期:2024-12-14 04:04:55 浏览:13 分类:玩电脑
使用 Azure 自动化通过 PowerShell 处理 Exchange Online 数据
Runbook 在某些情况下很有用
更新:这篇标语现在有点过时了。 Azure 自动化不再支持 RunAs 帐户,并且 Exchange Online 管理 PowerShell 模块现在支持托管标识。
Practical365.com 文章通常包含 PowerShell 代码,以说明使用 Microsoft 365 数据来自动执行常见管理操作的原理。有时,读者会询问是否可以将代码与 Azure 自动化 Runbook 一起使用。对于顾问的经典回答,我的回答是“视情况而定”。依赖项包括代码的用途、涉及的 PowerShell 模块以及脚本是否是交互式的。 Sean McAvinue 在他的文章中介绍了有关在 Exchange Online 传输规则中实施定时免责声明的基础知识,但我想完成该过程并记录如何创建 Azure 自动化帐户和一些运行手册。这是我的发现。
更新:请参阅本文,了解有关将 Exchange Online 与 Azure 自动化和托管标识结合使用的详细信息。
Azure 自动化帐户的作用
Azure 自动化是使用虚拟机运行工作的功能。要使用 Azure 自动化,你必须拥有与 Azure 订阅关联的 Azure 自动化帐户(以支付你消耗的资源费用)。反过来,自动化帐户支持 Azure RunAs 帐户,用于身份验证以获得对工作所需资源的访问权限,例如在 Runbook 中运行 PowerShell 脚本。为了让事情顺利进行,我:
- 使用持有用于自动化帐户的订阅的 Azure 所有者角色的帐户登录 Azure 门户。
- 创建了一个新的自动化帐户。此时您需要指定 Azure 订阅。
- 创建了一个运行方式帐户。这会导致在 Azure AD 中创建应用程序和服务主体,作为身份验证和权限的基础。 Azure 创建一个 X.509 证书(帐户中的认证资产),服务主体可使用该证书进行一年的身份验证(该证书可以轻松续订)。目前,Exchange Online 不支持 Azure 托管标识,因此可以采用 RunAs 帐户。最后,名为AzureRunAsConnection的连接资产变得可用。稍后我们将看到如何使用该资产。
创建 RunAs 帐户后,记录 Azure 报告的应用程序标识符和服务主体对象标识符的信息。稍后我们将需要这些详细信息来通过 PowerShell 分配权限。
了解如何将 Runbook 与适用于 PowerShell 的 Microsoft Graph SDK 结合使用。
在 Azure 自动化中使用 Exchange Online PowerShell
在所有 Microsoft 365 工作负载中,Exchange Online 对 PowerShell 的支持最为全面。除了邮箱和电子邮件管理的其他方面之外,该模块还跨越 Microsoft 365 组,并且如果您将另一个会话连接到合规性终结点,则还包括用于管理信息治理和其他合规性解决方案的 cmdlet。因此,通过 Exchange Online 开始探索 Microsoft Azure 自动化是有意义的。
如果您使用 PowerShell 运行 Microsoft Graph 查询,您就会知道您需要注册一个应用程序来持有访问用户和其他数据所需的权限。在大多数情况下,应用程序需要使用应用程序权限来执行读取用户配置文件、组信息等任务。管理员必须授予应用程序使用应用程序权限的同意。
同样,在 RunAs 帐户可以使用 Exchange Online 管理模块中的 cmdlet 之前,管理员必须授予对 Exchange Online 的管理访问权限的同意。您可以通过 Azure AD 管理中心的“注册应用程序”部分分三个步骤来执行此操作:
- 选择为 RunAs 帐户创建的应用程序(其名称将是自动化帐户加上随机字符串,例如 ExoAutomationAccount_Y6LgjDYIfPnxmFzrqdbaClsnTD/gN4BNnVMywiju5hk=)
- 从 Office 365 Exchange Online API 分配 ExchangeManageAsApp 权限。
- 授予组织同意。
图 1 显示 ExchangeManageAsApp 权限是在同意的情况下授予的。
您还必须将 RunAs 帐户的服务主体添加到 Exchange 管理员角色。您可以在 Azure AD 管理中心的“角色和管理员”部分执行此操作(图 2)。
导入Exchange在线管理模块
RunAs 帐户的服务主体现在具有充当 Exchange Online 管理员的适当权限。下一步是允许自动化帐户使用 Exchange cmdlet。请记住,Azure 自动化不绑定到特定计算机,因此您必须导入 Exchange Online 管理模块以使其可用作自动化帐户的共享资源。当 Azure 自动化执行调用 Exchange cmdlet 的 Runbook 时,它会自动加载该模块。
首先,在共享资源部分找到模块(许多模块已经预加载,但 Exchange 不是)。然后浏览模块库以找到 Exchange Online 管理模块(图 3)。选择模块,选择 PowerShell 运行时版本 5.1,然后导入该模块。这将需要几分钟才能完成。您可以刷新模块视图以了解导入何时完成。
该库中还提供了其他 Microsoft 365 模块,包括 Azure AD、Teams 和 SharePoint Online。许多任务需要来自多个模块的 cmdlet,因此根据您想要执行的操作,您可能需要导入其他模块。
创建和测试 Runbook
Azure 自动化使用 Runbook 来完成工作。在这种情况下,您可以将 Runbook 视为准备在沙箱中运行的完整 PowerShell 脚本。您可以在自动化帐户的“流程自动化”部分下创建新的 Runbook。 Azure 将多个教程操作手册加载到帐户中,以帮助人们开始使用该技术。
为了进行测试,我使用了一个脚本来扫描审核日志以报告组删除事件,并将代码复制到新的 PowerShell Runbook 中。在复制代码之前,我插入了一些行来创建到自动化连接 (AzureRunAsConnection) 的会话,并连接到 Exchange Online,并使用通过自动化连接的会话为帐户创建的证书指纹进行身份验证。
$Session = Get-AutomationConnection –Name AzureRunAsConnection
$Tenant = 'office365itpros.onmicrosoft.com'
Connect-ExchangeOnline –CertificateThumbprint $Session.CertificateThumbprint –AppId $Session.ApplicationID –ShowBanner:$false –Organization $Tenant
请记住,我们的自动化帐户有权将 Exchange 作为应用程序进行管理,并且服务主体是 Exchange 管理员角色组的成员,因此一旦 Runbook 通过身份验证,它就可以运行任何 Exchange 管理 cmdlet。
如果您曾经使用 PowerShell ISE 或 Cloud Shell 编辑器来处理 PowerShell 代码,那么 Runbook 编辑器将会很熟悉(图 4)。将代码从交互式使用转移到自动化需要删除任何用户交互 cmdlet(如 Read-Host),同时 Write-Output 取代 Write-Host。请记住,代码在无头沙箱中运行,因此没有必要包含用户交互。准备好后,保存代码并单击测试窗格图标。
“测试”窗格允许您执行 Runbook 并检查代码是否有效。单击开始开始。 Azure 自动化对 Runbook 进行排队,当资源(沙箱计算机)可用时,代码就会运行。在发生错误或脚本完成之前您不会看到任何内容,此时“测试”窗格将显示任何输出(图 5)。
如果您在短时间内多次运行某个脚本,Exchange Online 可能会限制您的连接。当这种情况发生时,就该喝杯咖啡了。限制机制将在几分钟后失效,您可以重试。或者,在脚本中包含 Disconnect-ExchangeOnline cmdlet 以关闭会话。
一旦确定代码有效,您就可以发布 Runbook(编辑代码时单击“发布”图标,如图 4 所示)。然后,您将获得用于进一步开发的运行手册草稿版本和可以以不同方式运行的已发布版本。例如,您可以安排 Azure 自动化在特定日期和时间执行一次运行或每隔一定时间运行一次。
基于证书的安全性和合规性身份验证
到目前为止的描述涵盖了主 Exchange Online 管理模块中的 cmdlet。该模块还包括安全性和合规性 cmdlet,这些 cmdlet 在运行 Connect-IPPSSession cmdlet 后即可使用。这些 cmdlet 目前不支持基于证书的身份验证,但很快就会支持。根据 Microsoft 365 消息中心通知 MC316448(2022 年 1 月 21 日),该功能应在 3 月初在所有地方可用。
目前,如果您想使用安全性和合规性 cmdlet,可以将用户名和密码凭据添加到自动化帐户。该帐户不能使用多重身份验证 (MFA),并且必须是 Exchange 管理员。由于缺乏 MFA,这种方法不太理想,但可以证明 Azure 自动化支持不同类型的凭据。我已将此方法与其他不支持基于证书的身份验证的模块(例如 SharePoint Online 管理模块)一起使用。
此代码访问作为凭证存储在自动化帐户中且名为 O365Password 的用户名和密码,并使用该凭证连接到安全性和合规性端点:
$O365Cred = Get-AutomationPSCredential -Name "O365Password"
Connect-IPPSSession -Credential $O365Cred
使用图形 API 实现自动化
当然,Exchange Online cmdlet 并不能涵盖您可能想要访问的所有数据,但 Microsoft Graph API 很有可能涵盖这些数据。作为示例,我采用了一个用于报告服务主体登录信息的脚本,并将其导入到 Runbook 中。通常,当您编写与 Graph API 查询交互的脚本时,会出现一个序言来标识已注册的应用程序、租户以及用于身份验证和返回访问令牌的应用程序密钥(或证书)。当您使用 Runbook 时,我们使用自动化帐户而不是注册的应用程序,并使用证书指纹而不是应用程序密钥。因此,我们用代码替换正常的前导码以进行连接,如下所示:
# Set up a connection
$Connection = Get-AutomationConnection -Name AzureRunAsConnection
# Get certificate from the automation account
$Certificate = Get-AutomationCertificate -Name AzureRunAsCertificate
# Get an access token using the Get-MsalToken cmdlet from the MSAL.PS Module
$GraphConnection = Get-MsalToken -ClientCertificate $Certificate -ClientId $Connection.ApplicationID -TenantId $Connection.TenantID
# Populate the headers for our Graph queries
$Header = @{Authorization = "Bearer $($GraphConnection.AccessToken)"}
此代码使用名为 MSAL.PS(Microsoft 身份验证库)的模块来获取访问令牌。您可以在此处阅读有关该模块的更多信息。
请记住,RunAs 帐户的服务主体需要访问数据的权限。在这种情况下,管理员必须授予其对Directory.Read.All 和AuditLog.Read.All 应用程序权限的同意。访问令牌确认权限可用,因此我们可以运行:
$Uri = "https://graph.microsoft.com/beta/auditLogs/signIns?&`$filter=createdDateTime ge " + $StartDate + " and createdDateTime le " + $EndDate + " and signInEventTypes/any(z:z eq 'servicePrincipal')"
[array]$SpSignInData = Invoke-RestMethod -Method GET -Uri $Uri -ContentType "application/json" -Headers $Header
之后,就需要处理图形查询返回的任何内容并报告它。图 6 显示了数据在“测试”窗格中的显示方式。
企业自动化
我的观点是,Azure 自动化 Runbook 的最佳用途是处理可能需要较长时间的作业中的大量数据,例如每天从 Office 365 审核日志中提取数据并将其写入外部存储库以供长期保留。本质上,这是一场企业游戏。
其他临时管理过程(例如检查哪些 Microsoft 365 组没有所有者或哪些团队缺少敏感度标签)最好以交互方式运行,除非组织定期执行这些检查。在这种情况下,操作手册是一个不错的选择。
要记住的事情是:
- 您需要 Azure 订阅。除非你的数据量很大,否则你不会花太多钱,但你仍然必须订阅。我花了五美分购买了在撰写本文期间开发的操作手册。
- 脚本中不会发生用户交互。例如,您无法提示用户确认操作应该继续。
- Runbook 在沙箱计算机上执行。如果要将处理结果保存为文件,则必须在网络位置执行此操作。否则,您可以向 Teams 频道发送电子邮件或发布消息。
与任何其他技术一样,其天才在于利用 Azure 自动化的优势,同时最大限度地减少其缺点。与任何工具一样,一旦您知道如何使用它们来完成实际工作,您可能会发现一两本操作手册的用途。 Exchange Online 和其他 Microsoft 365 PowerShell 模块可在 Runbook 中访问和使用,Microsoft Graph API 查询也是如此,因此存在大量潜力。一些实践和反复试验很快就会揭示 Azure 自动化 Runbook 是否足够强大,足以成为租户管理工具集中的关键工具。
猜你还喜欢
- 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