网站搜索

使用 Azure 自动化证书连接到 Microsoft Graph PowerShell


Microsoft Graph PowerShell 基于证书的身份验证使你能够对 Microsoft Graph 进行身份验证并在应用程序上下文中运行 PowerShell 脚本,而无需存储或检索客户端密钥。

当您需要从特权设备运行脚本但又不想在代码中存储客户端密钥的情况下,这可能很有用。场景可能包括从特权设备运行脚本或使用 Azure 自动化。

在本教程中,我将向您展示如何通过 Microsoft Graph PowerShell 使用基于证书的身份验证。

设想

在此场景中,我在主租户(租户 2)中使用 Azure 自动化 Runbook。我需要使用 PowerShell 向另一个租户(租户 1)中的 Microsoft Graph 进行身份验证以管理资源。

对于此用例,我将使用基于证书的身份验证和 Microsoft Graph PowerShell。

创建新的自签名证书

您首先需要在本地工作站上生成新的自签名证书。当您执行此操作时,私钥也会存储在您的本地设备上。完成后可以将其删除。

以下命令将创建一个名为 AzureAutomation 的新证书,该证书将在 12 个月后过期。

$certname = "AzureAutomation"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" `
-CertStoreLocation "Cert:\CurrentUser\My" `
-KeyExportPolicy Exportable `
-KeySpec Signature `
-KeyLength 2048 `
-KeyAlgorithm RSA -HashAlgorithm SHA256 `
-NotAfter (Get-Date).AddMonths(12)

要导出不带私钥的证书(上传到 Microsoft Entra 中的应用程序),请使用以下命令并根据需要更改路径。

Export-Certificate -Cert $cert -FilePath "C:\cert\$certname.cer"

要使用私钥导出证书(上传到您的自动化帐户),请使用以下命令并根据需要更改路径。 请务必更改我在下面指定的密码!

$mypwd = ConvertTo-SecureString -String "Password123" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "C:\cert\$certname.pfx" -Password $mypwd

导出文件后,您可以从创建的设备中删除证书。

$cer = Get-ChildItem -Path "Cert:\CurrentUser\My" | Where-Object {$_.Subject -Match "$certname"} | Select-Object Thumbprint, FriendlyName
Remove-Item -Path Cert:\CurrentUser\My\$($cer.Thumbprint) -DeleteKey

创建新的应用程序注册

您需要在 Microsoft Entra 中创建新的应用程序注册;这将有助于访问目标租户(或租户 1)中的 Microsoft Graph 资源。

按照以下步骤创建新的应用程序注册并分配必要的权限。

1. 在 Microsoft Entra 中,选择应用程序 > 应用程序注册 > 新注册。

2. 输入名称并单击注册。

分配图形 API 权限

您现在可以向应用程序分配所需的权限。我将分配 groups.readwrite.all 权限。

1. 在管理下,选择API 权限。

2. 单击添加权限。

3. 选择 Microsoft Graph > 应用程序权限。

4. 找到您所需的权限,然后单击添加。

上传公共证书

您现在需要将以 .cer 格式导出的公共证书上传到应用程序。

1. 在管理下,选择证书和机密。

2. 单击证书 > 上传证书,然后上传您的证书。我的名称为AzureAutomation.cer。

将私钥上传到您的 Azure 自动化帐户

至此,租户1中的应用程序已准备就绪,您现在需要将带有私钥的证书上传到租户2中的Azure自动化帐户。

1.登录portal.azure.com

2. 找到您的自动化帐户并打开它。

3. 在共享资源下,选择证书。

4. 单击添加证书,然后定义证书的名称并上传您之前导出的.pfx 文件。系统将提示您输入创建证书时指定的密码。

使用基于证书的身份验证连接到 Microsoft Graph

现在这两个资源都已准备就绪,您现在可以使用必要的连接命令对 Runbook 中的 Microsoft Graph PowerShell 进行身份验证。

在你继续之前!您必须将 Microsoft Graph PowerShell 模块导入到您的自动化帐户中。查看我在此处编写的步骤。

复制以下代码并从租户一中的应用程序添加 ClientID 和 TenantID。使用 Get-MgContext 以便您可以直观地确认身份验证是否成功。

$cert = Get-AutomationCertificate -Name 'AzureAutomation'
$ClientID = ""
$TenantID = ""
Connect-MgGraph -ClientID $ClientID `
-TenantId $TenantID `
-CertificateThumbprint $cert.Thumbprint

Get-MgContext

现在将代码粘贴到 Runbook 中,然后单击测试窗格。

单击“开始”,然后当 Runbook 完成时,您应该会在屏幕上看到输出,确认连接成功。

当证书过期时,只需创建一个新证书并按照相同的流程进行替换即可。

相关文章