Cloudflare Access 支持两种强制执行多因素身份验证(MFA)的方法:
- 基于身份提供商的 MFA — 要求提供您的身份提供商(IdP)报告的特定 MFA 方法。
- 独立 MFA — 直接在 Access 中提示用户输入第二因素,而不依赖第三方身份提供商。
对于流向基础设施应用程序的 SSH 连接,Access 还支持使用 PIV 密钥的独立 MFA。
您可以要求用户使用其身份提供商提供的特定 MFA 方法登录。例如,您可以创建只允许通过其 IdP 使用安全密钥进行身份验证的用户访问给定应用程序的规则。
仅以下身份提供商支持基于 IdP 的 MFA 强制执行:
要在应用程序上强制执行 IdP MFA 要求:
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
-
找到您要强制执行 MFA 的应用程序,然后选择 Configure(配置)。或者,创建一个新应用程序。
-
转到 Policies(策略)。
-
如果您的应用程序已经包含有身份要求的策略,请找到它并选择 Configure(配置)。
-
在策略中添加以下规则:
规则类型 选择器 值 Require Authentication method mfa - multiple-factor authentication -
保存策略。
当用户使用其身份提供商进行身份验证时,IdP 会与 Cloudflare Access 共享其用户名。Access 将该值写入为用户生成的 JSON Web Token(JWT)中。
某些身份提供商还会共享用户出示的 MFA 方法。Access 可以将这些值添加到 JWT 中。例如,如果用户使用其密码和安全密钥进行身份验证,IdP 可以向 Cloudflare Access 发送确认。Access 然后将该方法存储在发给用户的 JWT 中。
Cloudflare Access 遵循 RFC 8176 ↗(身份验证方法参考值,Authentication Method Reference Values)来定义身份验证方法。
独立 MFA 直接在 Access 中提示用户输入第二因素。这使您能够强制执行 MFA 要求,而不依赖于您的 IdP 的 MFA 配置。
您可以在三个级别配置 MFA 要求:
较低级别(策略)的设置会覆盖较高级别(组织)的设置,从而使您对 MFA 的强制执行具有细粒度的控制。
在应用程序或策略上配置独立 MFA 之前,必须在组织级别开启独立 MFA。
每个应用程序有三个 MFA 选项:
| 选项 | 行为 |
|---|---|
| Respect global enforcement setting(遵循全局强制执行设置) | 使用组织级别的 MFA 配置。如果全局要求 MFA,则用户必须完成 MFA。如果全局不需要 MFA,则不提示用户。这是默认设置。 |
| Custom MFA settings(自定义 MFA 设置) | 使用特定于应用程序的允许身份验证器和会话持续时间覆盖组织设置。 |
| Disable MFA(禁用 MFA) | 访问此应用程序时,不会提示用户进行独立 MFA,即使全局要求 MFA 也是如此。 |
要为应用程序配置 MFA:
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
- 找到您要配置的应用程序,然后选择 Configure(配置)。
- 向下滚动到 **Authentication(身份验证)**并选择 MFA(多因素身份验证) 选项卡。
- 选择以下选项之一:
- 要继承组织设置,请选择 Respect global enforcement setting(遵循全局强制执行设置)。
- 要设置自定义要求,请选择 Custom MFA settings(自定义 MFA 设置),然后配置允许的 MFA 方法和身份验证持续时间。
- 要免除应用程序的 MFA,请选择 Disable MFA(禁用 MFA)。
- 选择 Save(保存)。
要为基础设施应用程序配置 MFA,请参阅基础设施应用程序。
每个策略都具有为应用程序配置独立 MFA中描述的相同三个 MFA 选项。策略级设置会覆盖应用程序级设置。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Policies(策略)。
- 选择一个 **Allow(允许)**策略并选择 Configure(配置)。
- 在 **Multi-factor authentication (MFA)(多因素身份验证 [MFA])**下,选择一个选项:
- 要继承应用程序或组织设置,请选择 Respect global enforcement setting(遵循全局强制执行设置)。
- 要为符合此策略的用户设置自定义要求,请选择 Custom MFA settings(自定义 MFA 设置),然后配置允许的 MFA 方法和身份验证持续时间。
- 要使符合此策略的用户免除 MFA,请选择 Disable MFA(禁用 MFA)。
- 选择 Save(保存)。
要为基础设施应用程序策略配置 MFA,请参阅基础设施应用程序。
MFA 会话持续时间决定了成功进行 MFA 身份验证后其有效的时长。MFA 会话过期后,用户在下次登录 Cloudflare Access 时必须再次完成 MFA,此外还需完成 IdP 身份验证。您可以要求用户在每次 Access 登录时都完成 MFA,或设置自定义持续时间。MFA 会话持续时间仅在登录流程中检查,不会影响用户现有的会话。
Access 按从最具体到最不具体的顺序检查 MFA 会话:
- 策略 MFA 会话持续时间 — 如果设置,则适用于符合该策略的用户。
- 应用程序 MFA 会话持续时间 — 如果设置,则适用于访问该应用程序的所有用户。
- 全局 MFA 会话持续时间 — 未指定自身持续时间的所有应用程序的默认值。
要在用户每次登录应用程序时都要求 MFA,请将身份验证持续时间设置为 Require every login(每次登录都需要)。
- 组织 — 转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)> Allow multi-factor authentication (MFA)(允许多因素身份验证)。将 **Authentication duration(身份验证时长)**设置为 Require every login(每次登录都需要)。除非在应用程序或策略级别进行了覆盖,否则这适用于所有应用程序。有关更多详细信息,请参阅独立 MFA 设置。
- 应用程序 — 转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)> 选择您的应用程序 > Configure(配置)> Authentication(身份验证)> MFA(多因素身份验证) 选项卡。选择 **Custom MFA settings(自定义 MFA 设置)**并将 **Authentication duration(身份验证时长)**设置为 Require every login(每次登录都需要)。
- 策略 — 转到 Zero Trust > Access controls(访问控制)> Policies(策略)> 选择您的策略 > Configure(配置)。在 **Multi-factor authentication (MFA)(多因素身份验证 [MFA])**下,选择 **Custom MFA settings(自定义 MFA 设置)**并将 **Authentication duration(身份验证时长)**设置为 Require every login(每次登录都需要)。
要通过 API 为应用程序配置此项,请首先发送 GET 请求以检索完整的应用程序配置,然后发送包含已更新 mfa_config 的完整应用程序主体的 PUT 请求。将 session_duration 设置为 "0m":
curl --request PUT \
https://api.cloudflare.com/client/v4/accounts/{account_id}/access/apps/{app_id} \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"mfa_config": {
"mfa_disabled": false,
"session_duration": "0m"
}
}'考虑以下配置:
flowchart TD
subgraph org["组织"]
orgSettings["**默认应用全局 MFA 设置**, <br/>**MFA 方法**:身份验证器应用 + 安全密钥, <br/>**身份验证持续时间**:24 小时"]
end
subgraph appA["应用程序 A"]
appASettings["**Respect global enforcement setting(遵循全局强制设置)<br/>(继承组织设置)**"]
subgraph policies["策略"]
policy1["策略 1<br/>**Custom MFA settings(自定义 MFA 设置)**,<br/>**MFA 方法**:仅安全密钥,<br/>**身份验证持续时间**:1 小时"]
policy2["策略 2<br/>**Disable MFA(禁用 MFA)**"]
end
end
subgraph appB["应用程序 B"]
appBSettings["**Disable MFA(禁用 MFA)**"]
end
orgSettings --> appASettings
orgSettings -.->|"覆盖"| appBSettings
appASettings -.->|"被其覆盖"| policy1
appASettings -.->|"被其覆盖"| policy2
在此示例中:
- 访问 Application A 且符合 Policy 1 的用户必须使用安全密钥且每小时重新进行身份验证。
- 访问 Application A 且符合 Policy 2 的用户不会被提示进行 MFA。
- 访问 Application A 且这两个策略都不符合的用户必须使用身份验证器应用程序或安全密钥,会话时间为 24 小时。
- 访问 Application B 的用户不会被提示进行 MFA。
使用 SSH 的基础设施应用程序支持使用 YubiKey PIV 密钥的独立 MFA。当要求进行 MFA 时,用户在建立连接之前必须使用其注册的 PIV 密钥完成公钥身份验证。用户在连接前必须通过 App Launcher 注册其 PIV 密钥。
您可以在应用程序级别或策略级别为基础设施应用程序配置 MFA。
基础设施应用程序使用特定于 SSH 连接的 PIV 密钥身份验证器(piv_key)。此身份验证器类型不适用于其他 Access 应用程序类型。
仪表板
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
- 找到您的基础设施应用程序并选择 Configure(配置)。
- 转到 **Authentication(身份验证)**选项卡并选择 MFA(MFA)。
- 选择以下选项之一:
- Respect global enforcement setting(遵循全局强制执行设置)— 使用组织级别的 MFA 配置。这是默认设置。
- Custom MFA settings(自定义 MFA 设置)— 使用此应用程序的自定义 MFA 会话持续时间覆盖全局设置。
- Disable MFA(禁用 MFA)— 访问此应用程序时,不会提示用户进行 MFA。
- 选择 Save(保存)。
API
要更新基础设施应用程序的 MFA 设置,请首先发送 GET 请求以获取完整的应用程序配置,然后发送带有包含 mfa_config 对象的完整应用程序主体的 PUT 请求。PUT 请求必须包含 GET 返回的所有字段,以避免覆盖现有设置。
curl --request PUT \
https://api.cloudflare.com/client/v4/accounts/{account_id}/access/apps/{app_id} \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"mfa_config": {
"mfa_disabled": false,
"session_duration": "12h",
"allowed_authenticators": ["piv_key"]
}
}'| 字段 | 类型 | 描述 |
|---|---|---|
mfa_disabled |
布尔值 | 如果为 true,则此应用程序不需要 MFA,即使全局设置强制执行 MFA 也是如此。 |
session_duration |
字符串 | 用户必须使用 MFA 重新进行身份验证之前的持续时间(例如,30m、1h、24h)。设置为 0m 以在每次 SSH 连接时都要求 MFA。 |
allowed_authenticators |
数组 | 允许的身份验证器类型列表。对于基础设施应用程序,piv_key 是唯一可用的形式。 |
您可以通过在策略级别配置 MFA,为不同的 SSH 用户名设置不同的 MFA 要求。策略级别的 MFA 设置会覆盖应用程序级别的设置。
仪表板
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
- 找到您的基础设施应用程序并选择 Configure(配置)。
- 转到 **Policies(策略)**并选择您要配置的策略。
- 在 **Multi-factor authentication (MFA)(多因素身份验证 [MFA])**下,选择一个选项:
- Respect global enforcement setting(遵循全局强制执行设置) — 继承应用程序或组织设置。
- Custom MFA settings(自定义 MFA 设置) — 为符合此策略的用户设置自定义 MFA 会话持续时间。
- Disable MFA(禁用 MFA) — 符合此策略的用户不会被提示进行 MFA。
- 选择 Save(保存)。
API
要更新策略的 MFA 设置,请首先发送 GET 请求以检索完整的策略配置,然后发送包含 mfa_config 对象的完整策略主体的 PUT 请求。mfa_config 对象使用与应用程序级配置相同的字段。
curl --request PUT \
https://api.cloudflare.com/client/v4/accounts/{account_id}/access/policies/{policy_id} \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"name": "Require MFA for root",
"decision": "allow",
"include": [
{
"email": {
"email": "[email protected]"
}
}
],
"mfa_config": {
"mfa_disabled": false,
"session_duration": "1h",
"allowed_authenticators": ["piv_key"]
},
"connection_rules": {
"ssh": {
"usernames": ["root"],
"allow_email_alias": false
}
}
}SSH 的 MFA 会话持续时间决定了执行 MFA 后,用户在多长时间内可以打开新的 SSH 连接而无需再次被提示。会话过期后,用户必须在下次 SSH 连接时使用其 PIV 密钥重新进行身份验证。现有 SSH 会话不受会话过期的影响。将会话持续时间设置为 0 以在每次 SSH 连接时都要求 MFA。
MFA 会话与用户设备绑定。如果用户切换到不同的设备,无论剩余会话持续时间如何,都必须重新进行身份验证。
会话持续时间按以下顺序进行评估:
- 策略级持续时间 — 如果设置,则适用于符合该策略的用户。
- 应用程序级持续时间 — 如果未设置策略级持续时间,则使用应用程序设置。
- 组织级持续时间 — 如果策略和应用程序均未定义持续时间,则使用全局设置。
当用户匹配多个各自定义了会话持续时间的策略时,Access 会使用所有匹配策略中最短的持续时间。
MFA 配置按从最具体到最不具体的顺序评估:策略 > 应用程序 > 组织。
| 组织 MFA | 应用程序 MFA | 策略 MFA | 结果 |
|---|---|---|---|
| Required(要求) | Required | Required | 要求 MFA |
| Required | Required | Disabled | 不要求 MFA(策略胜出) |
| Required | Disabled | (not set) | 不要求 MFA(应用程序胜出) |
| Required | (not set) | (not set) | 要求 MFA(应用组织设置) |
必须启用组织级 MFA,用户才能注册 PIV 密钥。较低级别(策略或应用程序)的明确设置会覆盖较高级别。如果某个级别不存在明确设置,则应用下一个较高级别。