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

[玩转系统] 使用 PowerShell 创建 Azure AD 条件访问策略

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

使用 PowerShell 创建 Azure AD 条件访问策略


在这篇文章中,我们将了解如何使用 PowerShell 和 Azure AD PowerShell 模块在 Azure AD 中创建条件访问策略。

使用 Azure 管理门户创建条件访问策略很容易完成,但如果您希望通过自动化流程或通过多个租户快速完成此操作,那么使用笨重的 Web 门户并不理想。

PowerShell 的 AzureAD 模块的 GA 版本为我们带来了以下 cmdlet:

  • New-AzureADMSConditionalAccessPolicy - 创建新的条件访问策略。
  • Get-AzureADMSConditionalAccessPolicy - 检索条件访问策略列表。
  • Set-AzureADMSConditionalAccessPolicy - 修改现有条件访问策略。
  • Remove-AzureADMSConditionalAccessPolicy - 删除现有条件访问策略。

安装 AzureAD PowerShell 模块

要成功创建条件访问策略,您需要确保安装 AzureAD 模块。如果尚未安装 AzureAD PowerShell 模块。运行以下命令:

Install-Module AzureAD

如果您已安装 Azure AD 模块但想要升级到最新版本,请使用 -Force 开关:

Install-Module AzureAD -Force

使用 PowerShell 在 Azure Active Directory 中创建条件访问策略

在创建条件访问策略之前,我们需要了解并决定一些信息,我将使用下面的示例作为我的脚本的基础。

  • 您希望保护的应用程序(例如:OWA)
  • 您希望包含或排除的用户(示例:除全局管理员用户之外的所有用户)
  • 应用策略的条件(示例:Windows 设备,Win 11 除外)
  • 访问控制(示例:授予需要身份验证强度的权限)
  • 任何会话控制(示例:每 4 小时登录一次)

以下是创建上述条件访问策略的完整脚本:

$conditions = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet
$conditions.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$conditions.Applications.IncludeApplications = "00000002-0000-0ff1-ce00-000000000000"
$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$conditions.Users.IncludeUsers = "All"
$conditions.Users.ExcludeRoles = @("62e90394-69f5-4237-9190-012177145e10")
$conditions.Platforms = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessPlatformCondition
$conditions.Platforms.IncludePlatforms = @('Windows')
$gcontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$gcontrols._Operator = "OR"
$gcontrols.BuiltInControls = "MFA"
$session = New-Object -TypeName Microsoft.Open.MSGraph.Model.conditionalAccessSessionControls
$sessioncontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessSignInFrequency
$sessioncontrols.Type = "hours"
$sessioncontrols.Value = 4
$sessioncontrols.IsEnabled = $true
$session.SignInFrequency = $sessioncontrols

New-AzureADMSConditionalAccessPolicy -DisplayName "OWA MFA policy" -State "Disabled" -Conditions $conditions -GrantControls $gcontrols -SessionControls $session

让我们把上面的内容分解一下!

定义我们希望保护的应用程序

$conditions = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet
$conditions.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$conditions.Applications.IncludeApplications = "00000002-0000-0ff1-ce00-000000000000"

在第 1 行,我们创建一个“conditionalAccessConditionSet”类型的新对象,并将此信息传递到变量 $conditions 中。

在第 2 行,我们创建另一个“ConditionalAccessApplicationCondition”类型的新对象,并将其传递到变量 $conditions 内的 Applications 属性中。此时您应该知道,我们不仅仅是猜测了该对象的正确属性名称,您还可以使用以下命令列出 $condition 变量的“成员”。

$conditions | get-member

在第 3 行,我们指定了应用程序 ID 并将其传递到 IncludeApplications 参数中。我们从两个方面收集此信息,首先,我们通过此处的 Microsoft Graph Rest API 参考页面知道如何使用 IncludeApplications 参数,其次,我们从 Azure AD 管理门户的“云应用程序或操作”下的新应用程序中收集了应用程序 ID。条件访问策略。

[玩转系统] 使用 PowerShell 创建 Azure AD 条件访问策略

[玩转系统] 使用 PowerShell 创建 Azure AD 条件访问策略

我们还可以扩展上面的命令,以获取可用参数的列表:

$conditions.Applications | get-member

您将看到以下参数可供您使用:

  • $conditions.Applications.includeApplications
  • $conditions.Applications.ExcludeApplications
  • $conditions.Applications.IncludeUserActions
  • $conditions.Applications.IncludeProtectionLevels

以下是常见应用程序 ID 的列表:

  • Dynamics 365 业务中心:996def3d-b36c-4153-8607-a6fd3c01b89f
  • 微软Azure管理:797f4846-ba00-4fd7-ba43-dac1f8f63013
  • 微软云应用安全:05a65629-4c1b-48c1-a78b-804c4abdd4af
  • Microsoft Graph PowerShell:14d82eec-204b-4c2f-b7e8-296a70dab67e
  • Microsoft 信息保护同步服务:870c4f2e-85b6-4d43-bdda-6ed9a579b725
  • Microsoft Intune: 0000000a-0000-0000-c000-000000000000
  • Microsoft 必应搜索:9ea1ad79-fdb6-4f9a-8bc3-2b70f96e34c7
  • 我的应用程序: 2793995e-0a7d-40d7-bd35-6968ba142197
  • O365 LinkedIn连接:f569b9c7-be15-4e87-86f7-87d30d02090b
  • Office 365 Exchange Online:00000002-0000-0ff1-ce00-000000000000
  • Office 365 SharePoint Online:00000003-0000-0ff1-ce00-000000000000
  • Skype for Business Online:00000004-0000-0ff1-ce00-000000000000
  • Universal Store Service API 和 Web 应用程序:45a330b1-b1ec-4cc1-9161-9f03992aa49f

指定我们的条件访问策略适用于哪些用户

在接下来的 3 行中,我们将定义我们的政策适用于谁。在我们的例子中,我们已将我们的策略应用于租户的所有成员,但全局管理员角色除外。

$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$conditions.Users.IncludeUsers = "All"
$conditions.Users.ExcludeRoles = @("62e90394-69f5-4237-9190-012177145e10")

我们可以在上面看到这一点,因为我们已将“All”传递到 IncludeUsers 参数中,并且在 ExcludeRoles 中我们定义了全局管理员角色的模板 ID。我们通过转到 Azure Active Directory 管理中心> 角色和管理员 > 全局管理员 > 描述找到了模板 ID b>.

[玩转系统] 使用 PowerShell 创建 Azure AD 条件访问策略

您还可以使用 PowerShell 通过以下任一命令获取所需目录角色或用户的 ObjectID:

# List all directory roles and their objectID
Get-AzureADDirectoryRole

# List all directory users and their objectID
Get-AzureADUser

您可以包含的其他参数包括:

  • $conditions.Users.IncludeUsers
  • $conditions.Users.ExcludeUsers
  • $conditions.Users.IncludeRoles
  • $conditions.Users.ExcludeRoles
  • $conditions.Users.IncludeGroups
  • $conditions.Users.ExcludeGroups

指定我们的政策适用的平台

在下面的代码行中,我们指定我们的策略仅在所使用的设备是 Windows 设备的情况下适用。

$conditions.Platforms = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessPlatformCondition
$conditions.Platforms.IncludePlatforms = @('Windows')

在第 1 行,我们再次创建“ConditionalAccessPlatformCondition”的新对象时间,然后在第 2 行,我们将字符串“Windows”传递到 IncludePlatforms 参数中。有 5 个不同的平台可供选择,其中包括:

  • 安卓
  • iOS系统
  • Windows 手机
  • 视窗
  • 苹果系统
  • Linux

使用命令“$conditions.Platforms | get-member”我们知道我们可以在这里使用以下参数:

  • $conditions.Platforms.IncludePlatforms
  • $conditions.Platforms.ExcludePlatforms

指定向受保护资源授予权限的控件

现在我们将指定在什么前提下允许我们的用户访问该资源。在我们的示例中,我们将在启用多重身份验证的前提下授予访问权限。

$gcontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$gcontrols._Operator = "OR"
$gcontrols.BuiltInControls = "MFA"

在第 2 行,我们选择了“OR”逻辑运算符,这意味着需要满足一个或另一个选定的控件。例如,这可能是兼容设备或启用了多重身份验证。

在第 3 行,我们选择了 MFA(或多因素身份验证)的“BuiltInControl”。该参数的其他可能值包括:

  • 艺术硕士
  • 堵塞
  • 合规设备
  • 域加入设备
  • 批准的申请
  • 合规应用
  • 密码更改
  • 未知未来价值

创建我们的登录频率会话控制

我们要定义的最后一个参数是策略的会话设置。在我们的示例中,我们指定登录频率,要求每 4 小时重新登录一次。

$session = New-Object -TypeName Microsoft.Open.MSGraph.Model.conditionalAccessSessionControls
$sessioncontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessSignInFrequency
$sessioncontrols.Type = "hours"
$sessioncontrols.Value = 4
$sessioncontrols.IsEnabled = $true
$session.SignInFrequency = $sessioncontrols

在第 1 行和第 2 行,我们创建了 2 个新对象并将它们存储在 $session 变量和 $sessioncontrols 变量中。

在第 3 行到第 5 行,我们指定登录频率对象的设置。在第 3 行,我们可以选择设置“天”或“小时”,然后在第 4 行,我们指定一个整数值,然后在第 5 行将“IsEnabled”参数指定为“True”。

最后,在第 3 行,我们使用刚刚输入到“sessioncontrols”变量中的设置来定义“SignInFrequency”参数。

创建条件访问策略

在脚本的最后一行代码中,我们显式地创建具有指定名称和状态的条件访问策略。我们还使用脚本中之前定义的变量来将所需的条件和控制实施到我们的策略中。

New-AzureADMSConditionalAccessPolicy -DisplayName "OWA MFA policy" -State "Disabled" -Conditions $conditions -GrantControls $gcontrols -SessionControls $session

运行完整脚本后,我们将得到如下输出:

ID:87dec72e-4651-460c-8a9d-9a8d07405208
显示名称:OWA MFA 策略
状态:已禁用
条件:类 ConditionalAccessConditionSet {
应用程序:类 ConditionalAccessApplicationCondition {
IncludeApplications :System.Collections.Generic.List`1[System.String]
排除应用程序:System.Collections.Generic.List`1[System.String]
IncludeUserActions:System.Collections.Generic.List`1 [System.String]
包含保护级别:
}

用户:类 ConditionalAccessUserCondition {
IncludeUsers: System.Collections.Generic.List`1[System.String]
ExcludeUsers: System.Collections.Generic.List`1[System.String]
IncludeGroups : System.Collections.Generic.List`1[System.String]
排除组:System.Collections.Generic.List`1[System.String]
包含角色:System.Collections.Generic.List`1 [System.String]
排除角色:System.Collections.Generic.List`1[System.String]
}

平台:类 ConditionalAccessPlatformCondition {
包含平台:System.Collections.Generic.List`1[Microsoft.Open.MSGraph.Model.ConditionalAccessDevicePlatforms]
排除平台:System.Collections.Generic.List`1[Microsoft.Open .MSGraph.Model.ConditionalAccessDevicePlatforms]
}

位置:
SignInRiskLevels:System.Collections.Generic.List`1[Microsoft.Open.MSGraph.Model.ConditionalAccessRiskLevel]
ClientAppTypes:System.Collections.Generic.List`1[Microsoft.Open.MSGraph. Model.ConditionalAccessClientApp]
}

GrantControls :类 ConditionalAccessGrantControls {
_Operator:或
BuiltInControls:System.Collections.Generic.List`1[Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControl]
CustomAuthenticationFactors:System.Collections.Generic。 List`1[System.String]
使用条款:System.Collections.Generic.List`1[System.String]
}

SessionControls :类 ConditionalAccessSessionControls {
ApplicationEnforcedRestrictions:
CloudAppSecurity:
SignInFrequency:类 ConditionalAccessSignInFrequency {
值:4
类型:小时
IsEnabled:True}

持久浏览器:
}

您现在还将在 Azure Active Directory 管理门户中看到新策略。

[玩转系统] 使用 PowerShell 创建 Azure AD 条件访问策略

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

取消回复欢迎 发表评论:

关灯