当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

作者:精品下载站 日期:2024-12-14 09:09:27 浏览:13 分类:玩电脑

配置基于证书的身份验证以运行自动化 PowerShell 脚本


有时您希望运行自动化 Exchange Online PowerShell 脚本,而不插入凭据或获取 MFA 提示。什么是安全且出色的方法?在本文中,您将了解如何配置基于证书的身份验证 (CBA) 以运行自动化 PowerShell 脚本。

基于证书的身份验证

过去,您通常将用户凭据保存在加密文件中,或使用基本身份验证在 Exchange Online PowerShell 中运行自动化脚本。从 2022 年 9 月起,基本身份验证在 Exchange Online 中已弃用,无法再使用。

基于证书的身份验证是一种新的加密方法,允许安全地自动执行 Exchange Online PowerShell 会话。这是一种安全的方法,无需在每次运行 PowerShell 脚本时提供用户凭据。它支持使用 Exchange Online 的无人值守脚本和自动会话。身份验证时也不需要用户名、密码和 MFA。

基于证书的身份验证如何工作

Exchange Online PowerShell 模块使用 Active Directory 身份验证库通过三个参数获取仅应用程序令牌:

  1. 应用程序 ID
  2. 租户 ID(组织)
  3. 证书指纹

您在 Azure AD 中创建的应用程序分配有一个目录角色,该角色在访问令牌中返回。 Exchange Online 使用令牌中可用的目录角色信息配置基于会话角色的访问控制 (RBAC)。

如何在 Exchange Online 中配置基于证书的身份验证

我们将指导您完成对无人值守脚本实施基于 Exchange Online 证书的身份验证的步骤。

步骤 1. 创建自签名证书

首先,您需要生成一个自签名证书。最好在要运行无人值守 PowerShell 脚本的同一台计算机上制作证书。

以管理员身份使用 Windows PowerShell 登录任何 Windows 服务器或桌面。

注意:自签名证书默认有效期为一年。

在我们的例子中,我们将为自签名证书添加 4 年以避免每年续订。

使用以下 PowerShell cmdlet 创建证书。

$mycert = New-SelfSignedCertificate -DnsName "exoip.com" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(4) -KeySpec KeyExchange -FriendlyName "EXO automated scripts"

证书现已存储。要查看指纹,请使用以下 cmdlet。

$mycert | Select-Object -Property Subject,Thumbprint,NotBefore,NotAfter

复制指纹并将其粘贴到记事本中。稍后当您使用 CBA 连接到 Exchange Online PowerShell 时将需要它。

PS C:\> $mycert | Select-Object -Property Subject,Thumbprint,NotBefore,NotAfter

Subject      Thumbprint                               NotBefore           NotAfter           
-------      ----------                               ---------           --------           
CN=exoip.com 71E8CD2932E252ED4C70A731795D595715905460 07/02/2023 13.04.09 07/02/2027 13.14.09

我们想要创建一个 .cer 文件,以便稍后将其上传到 Azure AD 应用程序中。使用 .cer 文件,您只能从生成自签名证书的计算机连接到 Exchange Online。

创建一个名为 temp 的文件夹,将其保存在 C:\temp 中。

使用以下 PowerShell cmdlet 将证书导出到 .cer 文件

$mycert | Export-Certificate -FilePath "C:\temp\EXOAutomatedScripts.cer"

请参阅 PowerShell 中的以下输出。

PS C:\> $mycert | Export-Certificate -FilePath "C:\temp\EXOAutomatedScripts.cer"


    Directory: C:\temp


Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
-a----        07/02/2023     13.31            796 EXOAutomatedScripts.cer                                                                                                         

您可以在计算机上的 C:\temp 中找到 .cer 文件

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

我们还将创建一个 .pfx 文件,以便您可以从任何计算机连接到 Exchange Online。您可以将 .pfx 文件复制或发送给某人,以便在安装到另一台计算机上时,可以在身份验证过程中检索该文件。

使用 PowerShell cmdlet 将证书导出到 .pfx 文件

$mycert | Export-PfxCertificate -FilePath "C:\temp\EXOAutomatedScripts.pfx" -Password $(ConvertTo-SecureString -String "P@ssw0Rd1234" -AsPlainText -Force)

这是 PowerShell 中以下输出的样子。

PS C:\> $mycert | Export-PfxCertificate -FilePath "C:\temp\EXOAutomatedScripts.pfx" -Password $(ConvertTo-SecureString -String "P@ssw0Rd1234" -AsPlainText -Force)


    Directory: C:\temp


Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
-a----        07/02/2023     13.33           2685 EXOAutomatedScripts.pfx 

您可以在计算机上的 C:\temp 中找到 .pfx 文件

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

步骤 2. 在 Azure AD 中创建新的应用程序注册

按照以下步骤在 Azure AD 中注册新应用程序:

  • 登录 Microsoft Azure
  • 单击菜单 > Azure Active Directory

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

  • 点击应用注册
  • 点击新注册

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

  • 将您的应用程序命名为EXO PowerShell自动化
  • 选择仅此组织目录中的帐户 -(单个租户)
  • 点击注册

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

您将收到一条通知,说明已成功创建应用程序,并且它将显示 EXO PowerShell 自动概述

  • 复制应用程序(客户端)ID并将其粘贴到记事本中,因为我们将在连接到 Exchange Online 时使用它

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

步骤 3. 设置 Azure 应用程序 API 权限

您必须向您创建的 EXO PowerShell 自动化应用程序分配 API 权限。要配置 API 权限,我们将使用脚本并编辑清单属性。

来自 EXO PowerShell 自动化概述:

  • 点击清单
  • 在编辑器中向下滚动到第 42 行“requiredResourceAccess”
  • 选择第 43 行到第 52 行的脚本

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

  • 复制以下 PowerShell 语法
   {
      "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
      "resourceAccess": [
         {
            "id": "dc50a0fb-09a3-484d-be87-e023b12c6440",
            "type": "Role"
         }
      ]
   }
],
  • 粘贴清单中的 PowerShell 语法
  • 点击保存

您将收到一条通知,指出已成功更新应用程序清单

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

  • 点击API权限
  • 点击授予 exoip365 管理员同意
  • 单击

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

出现绿色复选标记,表示您已成功授予管理员同意!

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

步骤 4. 将证书上传到应用程序

现在我们需要上传您之前创建的自签名证书。

来自 EXO PowerShell 自动化概述:

  • 点击证书和机密
  • 选择证书
  • 点击上传证书

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

  • 单击浏览图标C:\temp中搜索并选择EXOAutomatedScripts.cer文件
  • 添加描述 EXO 自动化脚本
  • 点击添加

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

该证书出现在列表中。

注意:始终确保其具有与您之前创建的证书指纹相同的证书指纹。

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

步骤 5. 将所需的 Azure AD 角色分配给应用程序

配置的最后一步是具有注册应用程序所需权限的 RBAC 角色。

  • 单击菜单 > Azure Active Directory
  • 选择角色和管理员
  • 选择所有角色
  • 搜索交易所
  • 单击Exchange 管理员

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

  • 点击作业
  • 点击添加作业
  • 搜索 Azure 应用程序名称EXO PowerShell 自动
  • 从结果中选择应用程序
  • 点击添加

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

Azure 分配名称 EXO PowerShell自动化 已成功添加到 Exchange 管理员角色分配列表中。

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

使用基于证书的身份验证连接到 Exchange Online PowerShell

注意:您必须先安装 Exchange Online PowerShell 模块,然后才能继续操作。

我们将使用基于证书的身份验证 (CBA) 连接到 EXO PowerShell。您需要从 Microsoft Azure 门户获取值并将这些值添加到以下变量中:

  1. $应用程序ID
  2. $CertificateThumbPrint
  3. $组织

在前面的步骤中,我们展示了如何获取 $AppId$CertificateThumbprint 值。现在,我们将在 Azure Active Directory 中找到组织名称,并将值添加到 $Organization 变量中。

  • 从菜单中点击自定义域名
  • 在域列表中找到它

[玩转系统] 配置基于证书的身份验证以运行自动化 PowerShell 脚本

找到所有值后,填写以下三个变量以使用基于证书的身份验证连接到 Exchange Online PowerShell:

$AppId = "89e1d6c0-5105-41a0-b741-894b2331ca07"
$CertificateThumbprint = "71E8CD2932E252ED4C70A731795D595715905460"
$Organization = "exoip365.onmicrosoft.com"

Connect-ExchangeOnline -AppId $AppId -CertificateThumbprint $CertificateThumbprint -Organization $Organization -ShowBanner:$false

检查连接是否成功的一个好方法是运行 Get-EXOMailbox cmdlet 来查看邮箱。

PS C:\> Get-EXOMailbox -ResultSize 5 | ft Name,UserPrincipalName

Name           UserPrincipalName       
----           -----------------       
Zoe Howard     [email protected]    
Amanda Morgan  [email protected] 
Amelia Nash    [email protected]   
Stephen Hunter [email protected]
Carol Baker    [email protected]   

使用 CBA 运行 PowerShell 自动化脚本

使用以下自动化 PowerShell 脚本将 Exchange Online 中的邮箱列表导出到 C:\temp 中的 CSV 文件。该脚本被添加到每天运行的计划任务中。

注意: 在 PowerShell 脚本末尾添加 Disconnect-ExchangeOnline -Confirm:$false。如果脚本运行时没有断开会话连接,您可能会用完所有可用的远程 PowerShell 会话,并且需要等待会话过期。

# Connect Exchange Online PowerShell
$AppId = "89e1d6c0-5105-41a0-b741-894b2331ca07"
$CertificateThumbprint = "71E8CD2932E252ED4C70A731795D595715905460"
$Organization = "exoip365.onmicrosoft.com"

Connect-ExchangeOnline -AppId $AppId -CertificateThumbprint $CertificateThumbprint -Organization $Organization -ShowBanner:$false

# Split path
$Path = Split-Path -Parent "C:\temp\*.*"

# Create variable for the date stamp
$LogDate = Get-Date -f yyyyMMddhhmm

# Define CSV and log file location variables
$Csvfile = $Path + "\AllMailboxes_$logDate.csv"

Get-EXOMailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySmtpAddress | Sort-Object PrimarySmtpAddress | Export-CSV -Path $Csvfile -NoTypeInformation -Encoding UTF8

# Disconnect Exchange Online PowerShell
Disconnect-ExchangeOnline -Confirm:$false

您可以成功连接 Exchange Online 基于证书的身份验证来运行自动化 PowerShell 脚本!

了解更多:增加和改进 Azure MFA »

结论

您了解了如何配置基于证书的身份验证以连接到 Exchange Online 并运行自动化 PowerShell 脚本。不再涉及用户交互、用户名、密码或 MFA,这使得它变得更加容易。

您喜欢这篇文章吗?您可能还喜欢使用 PowerShell 批量创建共享邮箱。不要忘记关注我们并分享这篇文章。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯