跳转到内容
搜索文档

独立 MFA

最后更新 查看 MarkdownAgent 设置

独立多因素身份验证(MFA)允许您直接在 Access 中强制执行 MFA 要求,而无需依赖您的身份提供商(IdP)。用户照常向其 IdP 进行身份验证,然后 Access 会在授予应用程序访问权限之前提示输入其他身份验证方法。

由于您可以在应用程序和策略级别配置 MFA,因此您可以在敏感应用程序上强制执行更严格的身份验证方法(如硬件安全密钥),而无需在整个组织中要求使用它们。这使您能够在最需要的地方增加额外的安全性,同时避免更广泛的用户群体产生 MFA 疲劳。

支持的 MFA 方法

MFA 方法 描述
身份验证器应用程序 由 Google Authenticator、Microsoft Authenticator 或 Authy 等应用生成的基于时间的一次性密码(TOTP)。Access 一次仅支持每个用户使用一个 TOTP 身份验证器。
安全密钥 支持 WebAuthn 标准的硬件安全密钥。用户可以注册多个安全密钥。
生物识别 使用 WebAuthn 的内置设备身份验证器,包括 Apple Touch ID、Apple Face ID 和 Windows Hello。用户可以注册多个生物识别。
个人身份验证(PIV)密钥(仅限基础设施应用) 在 SSH 连接期间用于公钥身份验证的 YubiKey PIV 密钥。需要 YubiKey 固件 4.3 或更高版本。此方法仅适用于基础设施应用程序。用户可以注册多个 PIV 密钥。

启用独立 MFA

在您能够在应用程序和策略上强制执行独立 MFA之前,您必须在组织级别启用独立 MFA。

  1. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)

  2. 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,选择您要在组织中允许的 MFA 方法

  3. 设置 Authentication duration(身份验证时长)。这决定了用户在无需再次提示进行 MFA 的情况下可以登录 Access 的时长。如果用户针对所需的身份验证器方法没有处于活动状态的 MFA 会话,则除了 IdP 身份验证之外,他们还必须完成 MFA。

  4. (可选)为避免重复提示用户进行 MFA,您可以启用 Use identity provider MFA(使用身份提供商 MFA)。这将检查身份验证时从身份提供商传递的 AMR 值,如果该 AMR 值符合允许的 MFA 方法,则在配置的持续时间内不会提示用户进行 MFA。

  5. (可选)要将您的 MFA 方法和身份验证时长应用于所有 Access 应用程序,请选择 Apply global MFA settings by default(默认应用全局 MFA 设置)。您可以针对单个应用程序和策略覆盖全局 MFA 设置

  6. 选择 Save(保存)

  1. 获取您现有的 Zero Trust 组织配置:

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Revoke
    • Access: Organizations, Identity Providers, and Groups Write
    • Access: Organizations, Identity Providers, and Groups Read
    Get your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  2. 发送 PUT 请求以更新您组织的 MFA 设置。为了避免覆盖您现有的配置,PUT 请求体应包含上一个 GET 请求返回的所有字段。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Write
    Update your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"auth_domain": "your-team-name.cloudflareaccess.com",
    		"name": "Your Team Name",
    		"mfa_config": {
    				"allowed_authenticators": [
    						"totp",
    						"biometrics",
    						"security_key"
    				],
    				"session_duration": "24h"
    		},
    		"mfa_required_for_all_apps": false
    	}'

    allowed_authenticators 设置为一个包含以下一个或多个值的数组:

    • totp — 身份验证器应用程序(基于时间的一次性密码)。
    • biometrics — 生物识别(Touch ID、Face ID、Windows Hello)。
    • security_key — 安全密钥(支持 WebAuthn 的硬件密钥)。
    • piv_key — PIV 密钥(YubiKey)。

    session_duration 设置为持续时间字符串(例如,30m1h24h)。若要在每次访问时都要求进行 MFA,请使用 0m

在您启用独立 MFA 后,用户可以通过应用启动器注册身份验证器

配置 PIV 密钥要求

如果您计划将 PIV 密钥用于基础设施应用程序的 MFA,请在组织的 Access 设置中配置 PIV 密钥要求。这些要求决定了用户可以注册哪些 PIV 密钥。

  1. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)

  2. 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,启用 **Personal Identity Verification (PIV) key(个人身份验证 [PIV] 密钥)**身份验证器。

  3. 配置以下设置:

    设置 描述 选项
    密钥类型 SSH 密钥算法 ECDSA, Ed25519, RSA
    密钥大小 密钥长度(以位为单位) ECDSA: 256, 384, 521. RSA: 2048, 3072, 4096
    PIN 策略 用户必须在何时输入其 PIV PIN never(从不)、once(每会话一次)、always(每次使用)
    触摸策略 用户必须在何时触摸硬件密钥 never(从不)、always(每次使用)、cached(缓存 15 秒)
    要求 FIPS 要求 PIV 密钥位于经过 FIPS 验证的设备上 true, false
  4. 选择 Save(保存)

按 AAGUID 限制身份验证器

一个 AAGUID(验证器证明 GUID)是一个 128 位的标识符,用于指示 WebAuthn 身份验证器的制造商和型号。通过限制只能注册特定的 AAGUID 集合,您可以要求用户仅注册经批准的硬件,例如经过 FIPS 验证的安全密钥或公司分发的设备。

AAGUID 限制仅在注册时适用。Access 在用户注册身份验证器时验证 AAGUID,而不是在他们进行身份验证时。因此,AAGUID 限制是在组织级别配置的。

1. 创建 AAGUID 列表

AAGUID 可使用列表进行管理。创建一个类型为 AAGUID 的列表,然后在您组织的 MFA 配置中引用该列表。

  1. Cloudflare 仪表板中,转到 Zero Trust > Resources(资源)> Lists(列表)
  2. 选择 Create new list(创建新列表)
  3. 输入 **List name(列表名称)(例如,Approved security keys)**和可选描述。
  4. 将 **List type(列表类型)**设置为 MFA AAGUID
  5. 添加一个或多个 AAGUID 条目:
    • 要添加预定义的 AAGUID,从 **Known authenticators(已知身份验证器)**列表中选择身份验证器。
    • 要添加自定义 AAGUID,填写以下字段:
      • MFA AAGUID — 身份验证器的 AAGUID,采用不带连字符的 32 字符十六进制格式(例如,8c39ee867f9a4a959ba3f6b097e5c2ee)。
      • Description(描述) — 可选标签,如身份验证器的名称和型号。
  6. 选择 Save(保存)

发送一个 POST 请求以创建列表:

Create Zero Trust listbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/lists" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Approved security keys",
		"description": "AAGUIDs for MFA enrollment",
		"type": "AAGUID",
		"items": [
				{
						"value": "8c39ee867f9a4a959ba3f6b097e5c2ee",
						"description": "YubiKey Bio Series - FIDO Edition (Enterprise Profile)"
				}
		]
	}'

响应中包含列表的 id(UUID)。当您将该列表分配给您组织的 MFA 配置时,请使用此 ID。

2. 将 AAGUID 列表分配给您的组织

  1. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)
  2. 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,转到 Restrict MFA to specific authentication methods(将 MFA 限制为特定身份验证方法)
  3. 选择一个现有的 AAGUID 列表
  4. 选择 Save(保存)

保存后,仅可以注册其 AAGUID 出现在列表中的身份验证器。先前已注册且不在列表中的身份验证器的用户可以继续使用它们,直到它们被管理员删除

  1. 获取您现有的 Zero Trust 组织配置:

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Revoke
    • Access: Organizations, Identity Providers, and Groups Write
    • Access: Organizations, Identity Providers, and Groups Read
    Get your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  2. 发送一个 PUT 请求以分配列表。为了避免覆盖您现有的配置,PUT 请求体应包含上一个 GET 请求返回的所有字段。将 mfa_config.required_aaguids 设置为您的 AAGUID 列表的 ID。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Write
    Update your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"auth_domain": "your-team-name.cloudflareaccess.com",
    		"name": "Your Team Name",
    		"mfa_config": {
    				"allowed_authenticators": [
    						"security_key",
    						"totp",
    						"biometrics"
    				],
    				"session_duration": "24h",
    				"required_aaguids": "05ddacda-5131-41ab-9eeb-6763f8dce3be"
    		}
    	}'

    要移除限制,请将 required_aaguids 设置为 null

使用身份提供商 MFA

如果您的身份提供商已提示用户进行 MFA,您可以配置 Access 接受该 MFA,而不是再次提示。Access 会检查由 IdP 返回的身份验证方法参考(AMR)声明,如 RFC 8176 中所定义。如果 AMR 值与应用程序或策略的允许的身份验证器类型匹配,Access 将跳过独立 MFA 提示。

支持的 AMR 值

AMR 值 匹配 Access 身份验证器类型 描述
hwk 安全密钥 硬件密钥的所有权证明
swk 安全密钥 软件密钥的所有权证明
otp 身份验证器应用程序 一次性密码
face 生物识别 面部识别
fpt 生物识别 指纹
iris 生物识别 虹膜扫描
retina 生物识别 视网膜扫描
vbm 生物识别 声纹生物识别

Access 会忽略无法映射到受支持身份验证器类型的 AMR 值(例如,pwdsmstelgeokbascpinusermcarbawia)。

启用 AMR 匹配

  1. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)
  2. 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,启用 Use identity provider MFA(使用身份提供商 MFA)
  3. 在 **Authentication Method Reference (AMR) match duration(身份验证方法参考 [AMR] 匹配时长)**下,设置成功的 IdP MFA 保持有效的时长。在此期间,用户可以登录 Access 而无需额外的 MFA 提示。您可以设置自定义持续时间(默认 24 小时),或者在每次登录时都检查有效的 AMR 值
  4. 选择 Save(保存)
  1. 获取您现有的 Zero Trust 组织配置:

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Revoke
    • Access: Organizations, Identity Providers, and Groups Write
    • Access: Organizations, Identity Providers, and Groups Read
    Get your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  2. 发送一个 PUT 请求以更新您组织的 AMR 匹配设置。为了避免覆盖您现有的配置,PUT 请求体应包含上一个 GET 请求返回的所有字段。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Write
    Update your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"auth_domain": "your-team-name.cloudflareaccess.com",
    		"name": "Your Team Name",
    		"mfa_config": {
    				"allowed_authenticators": [
    						"totp",
    						"biometrics",
    						"security_key"
    				],
    				"session_duration": "24h",
    				"amr_matching_enabled": true,
    				"amr_session_duration": "1h"
    		}
    	}'

何时会跳过 AMR 匹配

Access 在以下情况下不应用 AMR 匹配:

  • IdP 不返回 amr 声明。
  • IdP 仅返回无法映射到应用程序或策略的允许的身份验证器类型的 AMR 值。
  • 用户的 AMR 匹配会话已过期,因为他们上一次通过其 IdP 执行 MFA 的时间早于配置的 AMR 匹配时长。

在这些情况下,Access 会回退到检查现有的 MFA 会话。如果没有有效的 MFA 会话,Access 会提示用户完成独立 MFA。

关闭独立 MFA

若要为组织关闭独立 MFA:

  1. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)
  2. 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,关闭 Apply global MFA settings by default(默认应用全局 MFA 设置)
  3. 关闭所有 MFA 方法(生物识别安全密钥身份验证器应用程序)。

如果更新 MFA 设置时出错,请确保已从所有应用程序和策略中移除自定义 MFA 设置。

  1. 获取您现有的 Zero Trust 组织配置:

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Revoke
    • Access: Organizations, Identity Providers, and Groups Write
    • Access: Organizations, Identity Providers, and Groups Read
    Get your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  2. 发送一个带有空 allowed_authenticators 数组的 PUT 请求。为了避免覆盖您现有的配置,PUT 请求体应包含上一个 GET 请求返回的所有字段。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Write
    Update your Zero Trust organizationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"auth_domain": "your-team-name.cloudflareaccess.com",
    		"name": "Your Team Name",
    		"mfa_config": {
    				"allowed_authenticators": []
    		}
    	}'

注册身份验证器

用户通过应用启动器注册身份验证器。

如果用户已注册至少一个身份验证器,Access 要求他们在添加新身份验证器之前使用现有的 MFA 方法进行验证

若要注册身份验证器:

  1. 转到您组织的应用启动器,地址为 <your-team-name>.cloudflareaccess.com

  2. 使用您的身份提供商或一次性 PIN 码(OTP)进行登录。

  3. 转到 Account(账户)> MFA devices(MFA 设备)> Add MFA device(添加 MFA 设备)

  4. 如果您已经注册了 MFA 设备,请完成 MFA 验证提示。

  5. 选择您要注册的身份验证器类型,并按照屏幕上的说明进行操作。

    身份验证器应用程序

    1. 选择 Authenticator app(身份验证器应用程序)
    2. 使用您的身份验证器应用(例如 Google Authenticator、Microsoft Authenticator 或 Authy)扫描 QR 码。或者,您也可以手动将设置密钥输入到您的身份验证器应用中。使用 SHA1 作为哈希函数,并将时间步长大小设置为 30 秒。
    3. 输入身份验证器应用生成的 6 位数基于时间的一次性密码(TOTP)以验证注册。

    安全密钥

    1. 选择 Security key(安全密钥)
    2. 当浏览器提示您时,插入您的安全密钥并按照屏幕上的说明进行操作。
    3. 浏览器确认注册后,安全密钥即注册成功。

    您可以注册多个安全密钥以备用。

    生物识别

    1. 选择 Biometrics(生物识别)> Register biometrics(注册生物识别)
    2. 系统会提示您使用设备上可用的身份验证器类型进行注册(例如,添加 macOS Touch ID添加 Windows Hello)。
    3. 浏览器确认注册后,平台身份验证器即注册成功。

    PIV 密钥(仅限基础设施应用程序)

    PIV 密钥注册需要额外的客户端设置,并且仅用于基础设施应用程序的 MFA。有关完整说明,请参阅为基础设施应用注册 PIV 密钥

您现在可以使用这些身份验证器登录您组织的应用程序。

为基础设施应用注册 PIV 密钥

PIV 密钥注册与上述常规身份验证器注册是分开的,并且需要额外的客户端设置。

在注册之前,您必须拥有固件为 4.3 或更高版本的 YubiKey,并且在 PIV 插槽 9a 中生成了一个密钥。如果您尚未生成 PIV 密钥,请参阅生成 PIV 密钥

生成 PIV 密钥

如果您的 YubiKey 上还没有 PIV 密钥,请在插槽 9a 中生成一个:

ykman piv keys generate \
  --algorithm ECCP256 \
  --pin-policy once \
  --touch-policy always \
  9a pubkey.pem

当 YubiKey 闪烁时触摸它以确认密钥生成。然后创建一个自签名证书,使该密钥对 SSH 代理可见:

ykman piv certificates generate --subject "CN=SSH-Identity" 9a pubkey.pem

生成密钥后,生成证明证书并继续进行注册。

生成证明证书

证明证书可证明该密钥是在真实的硬件上生成的。运行以下命令从您的 YubiKey 导出它们:

ykman piv keys attest 9a leaf.pem
ykman piv certificates export f9 intermediate.pem
  • leaf.pem 包含插槽 9a 中密钥的公钥和元数据。
  • intermediate.pem 是 YubiKey 证明 CA 证书。

上传证书到 Cloudflare

  1. 转到您组织的应用启动器,地址为 <your-team-name>.cloudflareaccess.com
  2. 使用身份提供商(IdP)、一次性 pin 码,或以 Cloudflare 作为您的 IdP 进行登录。
  3. 转到 Account(账户)> MFA devices(MFA 设备)> Add MFA device(添加 MFA 设备)
  4. 选择 PIV key(PIV 密钥)
  5. leaf.pem 的内容粘贴到 **Leaf certificate(叶证书)**字段中。
  6. intermediate.pem 的内容粘贴到 **Intermediate certificate(中间证书)**字段中。
  7. 选择 Register(注册)

Access 会从您的证书中提取并存储 SSH 公钥,以便日后向基础设施应用进行身份验证。您可以注册多个 PIV 密钥以备用。

配置您的 SSH 客户端

注册后,将您的 SSH 客户端配置为使用 PIV 密钥。以下示例在 macOS 上使用 yubikey-agent。对于 Linux,请参阅 yubikey-agent 文档

  1. 安装并启动 yubikey-agent

    brew install yubikey-agent
    brew services start yubikey-agent
  2. 从叶证书中提取 SSH 公钥:

    openssl x509 -in leaf.pem -pubkey -noout | ssh-keygen -i -m PKCS8 -f /dev/stdin > ~/.ssh/id_yubikey.pub
  3. 将以下内容添加到您的 ~/.ssh/config 中:

    Host *
      IdentityAgent /opt/homebrew/var/run/yubikey-agent.sock
      IdentitiesOnly yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_yubikey.pub
  4. 验证密钥已加载:

    ssh-add -L

    输出应显示一个 ecdsa-sha2-nistp256 密钥。

删除身份验证器

用户可以从应用启动器中删除自己的身份验证器。如果用户已注册至少一个身份验证器,Access 要求他们在移除设备之前使用现有的 MFA 方法进行验证

  1. 转到您组织的应用启动器,地址为 <your-team-name>.cloudflareaccess.com
  2. 转到 Account(账户)> MFA devices(MFA 设备)
  3. 选择 MFA 设备旁边的 3 点菜单,然后选择 Remove MFA device(移除 MFA 设备)
  4. 如果您注册了其他 MFA 设备,请完成 MFA 验证提示。

管理员也可以代表用户删除身份验证器

更改身份验证器时的 MFA 验证

当用户已注册至少一个身份验证器时,Access 会要求在用户从应用启动器中添加或删除身份验证器之前进行 MFA 验证。此验证步骤与 IdP 登录是分开的,并且使用用户现有的独立 MFA 设备。

用户完成 MFA 验证后,他们有 10 分钟的时间来添加或删除身份验证器,而无需额外的提示。此窗口与当前设备绑定。10 分钟后,或者如果用户切换到其他设备,Access 会再次要求进行 MFA 验证。

这防止了拥有受损 IdP 凭据的攻击者修改用户已注册的身份验证器。即使攻击者获得了用户 IdP 会话的访问权限,如果他们不同时拥有用户已注册的身份验证器,也无法绕过独立 MFA 验证步骤。如果用户丢失了其唯一的身份验证器且无法验证,管理员可以将其删除以允许重新注册。请参阅管理用户身份验证器

管理用户身份验证器

管理员可以查看和删除用户注册的身份验证器。这对于解决锁定问题或应对安全事件非常有用。

查看用户身份验证器

若要查看用户已注册的身份验证器:

  1. Cloudflare 仪表板中,转到 Zero Trust > Team & Resources(团队与资源)> Users(用户)
  2. 选择一个用户。
  3. 转到 MFA devices(MFA 设备)。每个条目都显示身份验证器的 ID、其用户配置的名称以及 MFA 方法。

删除用户身份验证器

如果用户被锁定,或者您出于安全原因需要撤销某个身份验证器,您可以从仪表板或 API 将其删除。

  1. Cloudflare 仪表板中,转到 Zero Trust > Team & Resources(团队与资源)> Users(用户)
  2. 选择要删除其身份验证器的用户。
  3. 在 **MFA devices(MFA 设备)**下,找到该身份验证器并选择 Delete(删除)

下一次用户访问要求 MFA 的应用程序时,他们需要注册一个新的身份验证器。

发送一个 DELETE 请求以移除特定身份验证器:

Delete a user's MFA devicebash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/users/$USER_ID/mfa_authenticators/$AUTHENTICATOR_ID" \
	--request DELETE \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

参数:

  • user_id — 用户的 UUID。您可以在 Team & Resources(团队与资源)> **Users(用户)**下的用户详细信息中找到此 ID。
  • authenticator_id — 身份验证器的唯一标识符。

锁定恢复

如果用户失去了对其所有已注册身份验证器的访问权限:

  1. 删除该用户的身份验证器。
  2. 用户随后可以访问受保护的应用程序,并且会获得一个注册新身份验证器的链接。
  3. 或者,向用户共享直接注册链接:<your-team-name>.cloudflareaccess.com/AddMfaDevice

相关链接

这篇文档对您有帮助吗?