如何在Azure Automation中设置服务主体账户以替代凭据?
用服务主体替代凭据实现Azure Automation连接MSOnline和Exchange Online
完全理解你不想在Azure Automation中存储高权限账户凭据的顾虑,服务主体确实是更安全合规的方案。下面我给你一步步梳理清晰的配置流程,从服务主体创建到Runbook代码修改:
一、创建并配置Azure AD服务主体
首先得在Azure AD中注册服务主体,并分配必要权限:
- 登录Azure门户,进入Azure Active Directory > 应用注册,点击「新注册」:
- 填写名称(比如
Automation-Exchange-SP),账户类型选「仅此组织目录中的账户」,完成注册后记录下应用程序(客户端)ID和目录(租户)ID。
- 生成客户端密码:进入刚注册的应用,选择证书和密码 > 新客户端密码,设置过期时间后保存生成的密码值(这个值只显示一次,务必妥善记录)。
- 配置MSOnline/Graph权限:在应用的API权限中,点击「添加权限」,选择Microsoft Graph > 应用权限,根据你的Runbook操作需求添加对应权限(比如
User.Read.All、Directory.Read.All),最后点击「授予管理员同意」。
- 配置MSOnline/Graph权限:在应用的API权限中,点击「添加权限」,选择Microsoft Graph > 应用权限,根据你的Runbook操作需求添加对应权限(比如
- 分配Exchange Online权限:用全局管理员账户连接Exchange Online PowerShell,给服务主体分配所需的管理角色(遵循最小权限原则,比如只分配必要的邮件管理角色而非全Exchange管理员):
# 连接Exchange Online Connect-ExchangeOnline -Organization <你的租户ID> # 给服务主体分配指定角色,示例为邮箱管理员 New-ManagementRoleAssignment -Role "Mail Recipients" -Application <服务主体的客户端ID>
二、在Azure Automation中配置服务主体连接资产
把服务主体信息存入Automation的安全资产中,避免明文暴露:
- 进入你的Azure Automation账户,选择连接 > 添加连接,类型选「Azure服务主体」。
- 填写连接名称(比如
SP-Exchange-Connection),输入之前记录的租户ID、客户端ID、客户端密码,保存即可。
- 填写连接名称(比如
三、修改PowerShell工作流Runbook代码
替换原来的凭据连接逻辑,改用服务主体认证:
workflow Your-Target-Runbook { # 获取Azure Automation中的服务主体连接 $connectionName = "SP-Exchange-Connection" $spConnection = Get-AutomationConnection -Name $connectionName # 连接MSOnline(注意:MSOnline模块已弃用,建议后续迁移到Microsoft Graph) Connect-MsolService -TenantId $spConnection.TenantId ` -ApplicationClientId $spConnection.ApplicationId ` -ApplicationSecret $spConnection.ApplicationKey # 连接Exchange Online(服务主体方式) $secureSecret = ConvertTo-SecureString $spConnection.ApplicationKey -AsPlainText -Force $spCredential = New-Object System.Management.Automation.PSCredential($spConnection.ApplicationId, $secureSecret) $exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange ` -ConnectionUri "https://outlook.office365.com/powershell-liveid/" ` -Authentication Basic ` -AllowRedirection ` -Name "Exchange-SP-Session" ` -Credential $spCredential Import-Module (Import-PSSession -Session $exchangeSession -AllowClobber -DisableNameChecking) -Global }
额外注意事项
- MSOnline模块已被微软标记为弃用,长期来看建议迁移到Microsoft Graph PowerShell模块,用服务主体连接Graph的示例代码:
Connect-MgGraph -TenantId $spConnection.TenantId ` -ClientId $spConnection.ApplicationId ` -ClientSecret $secureSecret
- 权限分配严格遵循最小权限原则,只给服务主体分配Runbook执行所需的权限,降低安全风险。
- 确保Azure Automation的运行环境(沙箱或混合工作器)能正常访问Office 365的PowerShell端点,没有网络防火墙限制。
内容的提问来源于stack exchange,提问作者Andre Vollering
相关产品推荐
相关产品推荐

