本文介绍如何在 Microsoft Entra ID 中配置应用管理策略,以控制应用所有者和管理员如何在组织中配置应用程序和服务主体。 本指南可帮助管理员降低不安全配置导致的安全风险。
可用于配置的限制集包括:
| 限制名称 |
Description |
安全值 |
可用性 |
| asymmetricKeyLifetime |
为非对称密钥(证书)强制实施最大生存期范围。 |
降低长期凭据的安全风险 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 称为 Restrict max certificate lifetime Microsoft Entra 管理中心。 |
| 观众 |
基于 signInAudience 值限制应用的创建或升级。 |
防止未经批准的多租户或面向使用者的应用程序 |
可以通过应用管理策略 API 进行配置 |
| customPasswordAddition |
限制应用程序或服务主体上的自定义密码机密。 |
防止新的用户提供的应用密码,这些密码比系统生成的密码更容易泄露 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 称为 Block custom passwords Microsoft Entra 管理中心。 |
| nonDefaultUriAddition |
阻止应用的新标识符 URI,除非它们是默认格式 api://{appId} 之一或 api://{tenantId}/{appId}。 |
降低受众验证不当的安全风险 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 称为 Block custom identifier URIs Microsoft Entra 管理中心。 |
| uriAdditionWithoutUniqueTenantIdentifier |
阻止应用的新标识符 URI,除非它们是 安全格式之一。 |
降低受众重叠的安全风险 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 称为 Block identifier URIs without unique tenant identifier Microsoft Entra 管理中心。 |
| passwordAddition |
完全阻止在应用程序上添加新密码(也称为机密)。 |
防止新密码,这是最容易泄露的凭据形式 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 在 Microsoft Entra 管理中心中,结合 symmetricKeyAddition 设置下 Block password addition 的限制。 |
| passwordLifetime |
为密码机密强制实施最大生存期范围。 |
降低长期凭据的安全风险 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 在 Microsoft Entra 管理中心中,结合 symmetricKeyLifetime 设置下 Restrict max password lifetime 的限制。 |
| symmetricKeyAddition |
限制应用程序的对称密钥。 |
防止新的对称密钥,这些密钥实际上是密码 - 最容易泄露的凭据形式 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 在 Microsoft Entra 管理中心中,结合 passwordAddition 设置下 Block password addition 的限制。 |
| symmetricKeyLifetime |
为对称密钥强制实施最大生存期范围。 |
降低长期凭据的安全风险 |
可以通过 应用管理策略 API 和 Microsoft Entra 管理中心进行配置。 在 Microsoft Entra 管理中心中,结合 passwordLifetime 设置下 Restrict max password lifetime 的限制。 |
| trustedCertificateAuthority |
如果颁发者未在受信任的证书颁发机构列表中列出,则阻止新的证书凭据。 |
确保租户中的应用仅使用受信任的 CA |
可以通过 应用管理策略 API 进行配置。 |
若要详细了解应用管理策略 API 的工作原理,请访问 API 文档。
先决条件
若要配置应用管理策略,需要:
可以使用 Microsoft Entra 管理中心或Microsoft图形 API 在 Microsoft Entra ID 中配置应用管理策略。
为所有应用程序启用限制
此示例阻止在组织中所有应用程序和服务主体上添加新密码。 类似的过程可用于启用其他限制。
使用 Microsoft Entra 管理中心阻止新密码:
登录到 Microsoft Entra 管理中心。
浏览到 Entra ID>企业应用>应用程序策略。
选择 “阻止添加密码”。
将状态设置为 “开”。 确保“应用于”字段设置为 “所有应用程序”。
选择“保存”以保存设置。
若要使用 Microsoft Graph 阻止应用程序和服务主体上的新密码添加:
检索现有的租户范围应用管理策略。
GET https://graph.microsoft.com/beta/policies/defaultAppManagementPolicy
在passwordCredentials和applicationRestrictions属性下servicePrincipalsRestrictions查找集合。 在这两个集合中,将限制的状态 passwordAddition 和 symmetricKeyAddition 限制设置为 enabled。 如果集合中已存在其他限制,请在请求中包含这些限制,以避免意外禁用它们。
PATCH https://graph.microsoft.com/beta/policies/defaultAppManagementPolicy
{
"applicationRestrictions": {
"passwordCredentials": [
{
"restrictionType": "passwordAddition",
"state": "enabled"
},
{
"restrictionType": "symmetricKeyAddition",
"state": "enabled"
}
]
},
"servicePrincipalRestrictions": {
"passwordCredentials": [
{
"restrictionType": "passwordAddition",
"state": "enabled"
},
{
"restrictionType": "symmetricKeyAddition",
"state": "enabled"
}
]
}
}
向应用程序授予异常
有时,租户范围规则需要例外。 此示例向应用授予阻止自定义标识符 URI 的限制的异常,因此它仍然可以向其添加自定义 URI。 对于其他限制,可以遵循类似的过程。
若要使用 Microsoft Entra 管理中心授予应用阻止自定义标识符 URI 的限制,请执行以下作:
登录到 Microsoft Entra 管理中心。
浏览到 Entra ID>企业应用>应用程序策略。
选择 “阻止自定义标识符 URI”。
确保状态为 “打开”。 将“应用于”字段设置为 排除的所有应用程序。
在 “排除的应用”下,选择“ 添加应用程序”。
选择要从限制中排除的应用程序。
选择“保存”以保存设置。
若要使用 Microsoft Graph 向应用授予阻止自定义标识符 URI 的限制的异常:
创建新的自定义应用管理策略。 创建时,请将限制nonDefaultUriAdditionrestrictions.applicationRestrictions设置为 disabled。
POST https://graph.microsoft.com/beta/policies/appManagementPolicies
{
"displayName": "Identifier URI exemption policy",
"description": "Policy granting an exemption to the nonDefaultUriAddition restriction",
"isEnabled": true,
"restrictions": {
"applicationRestrictions": {
"identifierUris": {
"nonDefaultUriAddition": {
"state": "disabled"
}
}
}
}
}
记录响应中新策略的 ID。
将新的自定义策略分配给要免除的应用程序。
POST https://graph.microsoft.com/beta/applications/{objectIdOfTheApplication}/appManagementPolicies/$ref
{
"@odata.id":"https://graph.microsoft.com/v1.0/policies/appManagementPolicies/{idOfTheCustomPolicy}"
}
如果收到指示此应用程序已分配自定义策略的错误,请改为修改该策略以包含此新排除项。 确保现有策略未分配给任何其他应用程序,否则它们也会收到排除项。
向用户或服务授予异常
有时,需要向创建或修改应用程序的用户或服务授予异常。 例如,假设组织中的自动化过程定期创建应用程序并设置其密码。 你希望阻止组织中的新密码,但你不希望在进行更新时中断此自动化过程。 在这种情况下,应用程序异常不起作用,因为正在创建/更新的应用尚不存在! 相反,可以将异常应用于进程本身。
这种类型的异常(有时标记为“执行组件”或“调用方”异常)是使用 自定义安全属性配置的。 因此,除了 先决条件中的角色外,此方案还需要另外两个角色。
此示例向服务授予一个例外,该限制对它添加到其他应用程序和服务主体的新证书上强制实施最大生存期的限制。 该服务将由其服务主体表示。 通过在 企业应用程序中搜索服务来查找服务的服务主体。
登录到 Microsoft Entra 管理中心。
浏览到 Entra ID>企业应用>应用程序策略。
选择 “限制最大证书生存期”。
确保状态为 “打开”。 将“应用于”字段设置为 排除的所有应用程序。
在 “排除的呼叫者”下,选择“ 添加排除的呼叫者”。
选择要从限制中排除的创建/更新应用的调用的用户或服务主体。
选择“保存”以保存设置。
创建自定义安全属性定义
此基于调用方的豁免是通过 自定义安全属性完成的。 自定义安全属性是键值对;他们需要在租户中创建键值对的定义,然后将键值对的实例添加到特定用户或服务主体。
可以通过 Microsoft Entra 管理中心创建自定义安全属性定义,但也可以使用 Microsoft Graph 执行此作。 首先, 创建属性集 (如果还没有属性集)。 属性集是自定义安全属性定义的容器。
POST https://graph.microsoft.com/v1.0/directory/attributeSets
{
"id":"PolicyExemptions",
"description":"Attributes for granting exemptions to policy",
"maxAttributesPerSet":25
}
然后, 创建定义。
POST https://graph.microsoft.com/v1.0/directory/customSecurityAttributeDefinitions
{
"attributeSet": "PolicyExemptions",
"description": "App mgmt policy exemption attributes",
"isCollection": false,
"isSearchable": true,
"name": "AppManagementExemption",
"status": "Available",
"type": "String",
"usePreDefinedValuesOnly": true,
"allowedValues": [
{
"id": "ExemptFromCertificateLifetimeRestriction",
"isActive": true
}
]
}
这些只是示例值;可以命名自定义安全属性, 但是,请确保创建的自定义安全属性定义的类型 String ,并 isCollection 设置为 false。 目前,单值字符串类型是唯一支持在应用管理策略中作为豁免指标的自定义安全属性。
将自定义安全属性添加为豁免指示器
根据excludeActors限制更新属性asymmetricKeyLifetime,applicationRestrictionsservicePrincipalRestrictions
PATCH https://graph.microsoft.com/beta/policies/defaultAppManagementPolicy
{
"applicationRestrictions": {
"keyCredentials": [
{
"restrictionType": "asymmetricKeyLifetime",
"state": "enabled",
"maxLifetime": "P180D",
"excludeActors": {
"customSecurityAttributes": [
{
"@odata.type": "#microsoft.graph.customSecurityAttributeStringValueExemption",
"id": "PolicyExemptions_AppManagementExemption", //This `id` value is the concatenation of "AttributeSet_AttributeName"
"operator": "equals",
"value": "ExemptFromCertificateLifetimeRestriction"
}
]
}
}
]
},
"servicePrincipalRestrictions": {
"keyCredentials": [
{
"restrictionType": "asymmetricKeyLifetime",
"state": "enabled",
"maxLifetime": "P180D",
"excludeActors": {
"customSecurityAttributes": [
{
"@odata.type": "#microsoft.graph.customSecurityAttributeStringValueExemption",
"id": "PolicyExemptions_AppManagementExemption", //This `id` value is the concatenation of "AttributeSet_AttributeName"
"operator": "equals",
"value": "ExemptFromCertificateLifetimeRestriction"
}
]
}
}
]
}
}
这表示要Microsoft Entra,你希望具有分配给它们的特定自定义安全属性值的用户或服务主体免除策略。
将自定义安全属性分配给服务主体
可以通过 Microsoft Entra 管理中心将自定义安全属性分配给用户和服务主体,但也可以使用 Microsoft Graph 执行此作。
若要分配给服务主体,请执行以下作:
PATCH https://graph.microsoft.com/v1.0/servicePrincipals/{id}
{
"customSecurityAttributes":
{
"Engineering":
{
"@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
"AppManagementExemption":"ExemptFromCertificateLifetimeRestriction"
}
}
}
将 {id} 替换为服务主体的对象 ID。
完成此作后,分配有自定义安全属性的服务主体将能够向其修改的任何应用添加生存期较长的证书。
将限制应用于特定应用程序
有时,你尚未准备好向整个租户应用限制,但仍希望将规则应用到一组选择的安全敏感应用程序。 此示例将阻止自定义密码的限制应用于单个应用程序。 对于其他限制,可以遵循类似的过程。
登录到 Microsoft Entra 管理中心。
浏览到 Entra ID>企业应用>应用程序策略。
选择 “阻止自定义密码”。
确保状态为 “打开”。 将“应用于”字段设置为 “选择应用程序”。
选择 “添加应用程序”。
选择要向其应用限制的应用程序。
选择“保存”以保存设置。
创建新的自定义应用管理策略。 创建时,请将限制customPasswordAdditionrestrictions.passwordCredentials设置为 enabled。
POST https://graph.microsoft.com/beta/policies/appManagementPolicies
{
"displayName": "Custom password policy",
"description": "Policy that enforces the custom password restriction",
"isEnabled": true,
"restrictions": {
"passwordCredentials": [
{
"restrictionType": "customPasswordAddition",
"state": "enabled"
}
]
}
}
记录响应中新策略的 ID。
将新的自定义策略分配给要向其应用限制的应用程序。
POST https://graph.microsoft.com/beta/applications/{objectIdOfTheApplication}/appManagementPolicies/$ref
{
"@odata.id":"https://graph.microsoft.com/v1.0/policies/appManagementPolicies/{idOfTheCustomPolicy}"
}
如果收到指示此应用程序已分配自定义策略的错误,请改为修改该策略以包含此新限制。 确保现有策略未分配给任何其他应用程序,否则它们也会收到强制执行。
查看自定义策略
自定义策略 应用于特定应用程序和服务主体。 它们用于替代特定应用的租户范围配置。 可以 在此处了解有关该内容的详细信息。
Microsoft Entra 管理中心会根据意向自动为你配置自定义策略。 例如,如果要向特定应用授予限制的豁免,Microsoft Entra 管理中心会利用后台的该行为制作自定义策略,并将其分配给应用程序。
因此,无法在 Microsoft Entra 管理中心直接查看自定义策略列表。 但是可以通过 Microsoft Graph 查看它们。
无法直接在 Microsoft Entra 管理中心查看自定义策略列表。 切换到“Microsoft图形”选项卡。
GET https://graph.microsoft.com/beta/policies/appManagementPolicies
修复策略状态,以便在 Microsoft Entra 管理中心中使用
如果已在 Microsoft Entra 管理中心之外配置了应用管理策略,则可能是在门户不期望的方式配置了这些策略。 如果是这样,在加载限制时,会看到如下所示的错误消息:
The restriction have been modified outside of this interface. To prevent data loss, editing is disabled until restrictions are synchronized.
若要使限制回到Microsoft Entra 管理中心所需的状态,需要使用 Microsoft Graph 更新它们。
无法使用 Microsoft Entra 管理中心完成此作。 切换到“Microsoft图形”选项卡。
首先,检索租户范围的应用管理策略。
GET https://graph.microsoft.com/beta/policies/defaultAppManagementPolicy
跳转到 Microsoft Entra 管理中心中阻止你使用的限制。
密码添加
“阻止密码添加限制”要求以下四项限制都处于相同的状态:
-
passwordAddition集合中的applicationRestrictions.passwordCredentials限制
-
passwordAddition集合中的servicePrincipalRestrictions.passwordCredentials限制
-
symmetricKeyAddition集合中的applicationRestrictions.passwordCredentials限制
-
symmetricKeyAddition集合中的servicePrincipalRestrictions.passwordCredentials限制
这意味着所有四个限制的属性都应匹配。 或者,策略中不应存在所有四个限制。
密码生存期
“限制最大密码生存期限制”要求以下四项限制都处于相同的状态:
-
passwordLifetime集合中的applicationRestrictions.passwordCredentials限制
-
passwordLifetime集合中的servicePrincipalRestrictions.passwordCredentials限制
-
symmetricKeyLifetime集合中的applicationRestrictions.passwordCredentials限制
-
symmetricKeyLifetime集合中的servicePrincipalRestrictions.passwordCredentials限制
这意味着所有四个限制的属性都应匹配。 或者,策略中不应存在所有四个限制。
证书生存期
限制最大证书生存期限制要求以下所有限制都处于相同状态:
-
asymmetricKeyLifetime集合中的applicationRestrictions.keyCredentials限制
-
asymmetricKeyLifetime集合中的servicePrincipalRestrictions.keyCredentials限制
这意味着这两个限制的属性都应匹配。 或者,策略中不应同时存在这两个限制。
后续步骤