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

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

作者:精品下载站 日期:2024-12-14 06:50:29 浏览:16 分类:玩电脑

如何将托管身份与 Microsoft Graph PowerShell 结合使用


托管标识提供了一种安全的方式,应用程序可以通过这种方式访问 Azure 中的资源,而无需管理员管理其他密码或机密。这意味着身份验证可以顺利进行,而无需人工干预。

幸运的是,对于那些在 PowerShell 中编写代码来管理租户或报告租户的人来说,Microsoft Graph PowerShell v2 支持将托管标识与 Azure 自动化结合使用。

在本教程中,我将向您展示如何在 Azure 中创建托管标识并为其分配权限,然后在 Microsoft Graph PowerShell 脚本中使用该托管标识。

什么是托管身份?

托管标识是 Azure 中的资源,可以自动请求和接收 Azure AD 访问令牌以对资源进行身份验证。对于编程/自动方案,租户管理员无需管理密码、密钥或机密,因为身份验证完全由 Azure 管理且仅在 Azure 内部进行,从而使其变得简单且更安全。

实际上,托管标识是 Azure AD 中的服务主体(或应用程序),您可以向其分配特定的权限或角色以完成创建它们要执行的任务。

您可以通过选择以下选项来查看 Azure Active Directory 中的托管身份:

应用程序 > 所有应用程序,然后将应用程序类型过滤器更改为托管身份

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

系统分配与用户分配的托管身份

Azure 中有两种类型的托管标识,使你能够获取用于访问资源的 Azure AD 令牌。这些是系统分配的和用户分配的托管身份。

尽管它们都有相同的目的,但它们的工作方式略有不同。系统分配的托管标识与特定资源绑定,并且仅提供对该资源的特定访问权限,而用户分配的托管标识是独立的,可以分配给单个或多个不同的资源。

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

在使用每种类型的托管身份之间进行选择取决于部署它的场景以及您管理基础设施的方式。

如果您需要将 Graph API 权限应用于多个身份,系统分配的托管身份通常可能意味着更多的管理,如果权限要求相同,可以使用单个用户分配的托管身份来简化。此外,如果您分配角色而不是 Graph API 权限,则每个系统分配的托管身份也可以添加到分配了角色的安全组中,从而减少管理。

系统分配的托管标识的生命周期也与资源相关联,因此它在创建资源时创建,在删除资源时删除。虽然在某些情况下这可能有助于维护安全性并保持环境整洁,但在创建多个资源时可能会变得很麻烦,特别是在权限需要由不同部门管理或批准的情况下。

下图显示了使用系统分配或用户分配的托管标识时的权限分配流程。一般来说,如果您有一个需要运行的具有特定权限的作业,系统分配的管理身份将是更好的选择,任何其他情况都需要额外考虑。

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

如何创建用户分配的托管身份

由于用户分配的托管标识独立于它们所服务的资源,因此必须首先使用 Azure 门户或 PowerShell 手动创建它们,然后必须分配所需的权限。请按照以下步骤创建和配置用户分配的托管身份。

使用 Azure 门户

1.登录https://portal.azure.com/

2. 搜索托管身份并打开服务

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

3. 单击创建启动托管身份创建向导

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

4. 填写屏幕上的信息区域,然后单击查看和创建 > 创建

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

使用PowerShell

虽然我喜欢使用 Microsoft Graph 完成所有操作,但托管身份是 Azure 资源,无法直接在 Azure AD 中创建,而 Microsoft Graph 可以让您管理身份。要使用 PowerShell 创建托管标识,必须使用 Azure (Az) PowerShell 模块,如下所示:

1. 安装 Az PowerShell 模块。

Install-Module Az -Scope CurrentUser -AllowPrerelease -Force

2. 使用 Connect-AzAccount 连接到 Azure。

Connect-AzAccount

3. 在创建托管标识之前,必须首先创建一个包含该标识的资源组。

New-AzResourceGroup -Name RG-UKSAA-MgPowerShell -Location "UK South"

4. 现在创建一个新的托管身份并定义新资源组的名称。

New-AzUserAssignedIdentity -ResourceGroupName RG-UKSAA-MgPowerShell -Name MI-AA-MgPowerShell1 -location UKSouth

将 Graph API 权限分配给托管身份

为了为我们的托管身份提供必要(且最少)的权限来执行最终脚本中规定的任务,我们需要通过 PowerShell 分配 Graph API 权限。

遗憾的是,尚不支持通过 Microsoft Entra 门户将 Graph API 权限分配给托管身份,因此我将向您展示如何使用 Microsoft Graph PowerShell 进行此操作。

以下脚本将连接到 Microsoft Graph 并将定义的权限分配给您的托管标识。确保按照下面脚本中的建议修改变量。

# Connect to Microsoft Graph with least required permission scope
Connect-MgGraph -Scopes Application.Read.All, AppRoleAssignment.ReadWrite.All

### Define these variables here first ##
$ManagedIdentityName = "OCN-AA-MgPowerShell"
$permissions = "Mail.send", "AuditLog.Read.All", "Application.Read.All"

# Get service principal and roles
$getPerms = (Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'").approles | Where {$_.Value -in $permissions}
$ManagedIdentity = (Get-MgServicePrincipal -Filter "DisplayName eq '$ManagedIdentityName'")
$GraphID = (Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'").id

# Assign roles
foreach ($perm in $getPerms){
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentity.Id `
    -PrincipalId $ManagedIdentity.Id -ResourceId $GraphID -AppRoleId $perm.id
}

分配权限后,Microsoft Entra 门户中托管身份的权限选项卡将如下所示:

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

将系统分配的托管标识与 Azure 自动化帐户结合使用

系统分配的托管标识可以直接从 Azure 自动化帐户或其应用的资源创建。请按照以下步骤创建托管身份。

1. 首先打开您的自动化帐户,然后从帐户设置区域选择身份

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

2. 将系统分配的托管身份设置为开启,然后单击保存

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

3. 现在,您将看到应用程序列表中列出的托管身份,如本教程顶部所示。

将用户分配的托管标识与 Azure 自动化帐户结合使用

用户分配的托管身份必须手动分配给他们将进行身份验证的资源。请按照以下步骤将托管身份分配给您的自动化帐户。

1. 首先打开您的自动化帐户并从帐户设置区域选择身份

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

2. 选择“用户分配”选项卡,然后单击添加

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

3. 从列表中选择您的订阅和托管身份,然后单击添加

[玩转系统] 如何将托管身份与 Microsoft Graph PowerShell 结合使用

如何将 Connect-MgGraph -Identity 与 Microsoft Graph PowerShell 结合使用

现在,您已经拥有分配了托管身份的自动化帐户,但不包括正确的权限,您必须在 Microsoft Graph 身份验证命令中包含 -Identity 参数才能使用它。

将 Connect-MgGraph 与系统分配的托管身份结合使用

在与系统分配的托管身份连接时,只需单独定义 -Identity 参数,无需进一步的身份验证命令。

Connect-MgGraph -Identity

将 Connect-MgGraph 与用户分配的托管身份结合使用

要使用用户分配的托管身份,需要定义 -Identity 和 -ClientId 参数。您还必须包含用户分配的托管标识(服务主体)的对象 ID,以便身份验证命令知道要使用哪个托管标识。

Connect-MgGraph -Identity -ClientId %Object ID of Managed Identity%

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

取消回复欢迎 发表评论:

关灯