跳转到内容
搜索文档

常用策略

最后更新 查看 MarkdownAgent 设置

以下是用于保护应用程序的常用 Cloudflare Access 策略。

有关可用操作、规则类型和选择器的完整列表,请参阅 Access 策略页面。要了解如何创建和管理策略,请参阅管理 Access 策略

按电子邮件域允许员工

最基本的 Access 策略会向使用属于您组织的电子邮件地址进行身份验证的任何人授予访问权限。当您首次使用 Access 保护应用程序并希望将其限制为使用企业身份提供商的员工时,这是一个很好的起点。

操作 规则类型 选择器
Allow(允许) Include(包含) Emails ending in(电子邮件结尾为) @example.com

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Allow employees by email domain",
		"decision": "allow",
		"include": [
				{
						"email_domain": {
								"domain": "example.com"
						}
				}
		]
	}'

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "allow_employees_by_email_domain" {
  account_id = var.cloudflare_account_id
  name       = "Allow employees by email domain"
  decision   = "allow"
  include = [{
    email_domain = {
      domain = "example.com"
    }
  }]
}

如果您的组织使用多个域(例如 @example.com@example.co.uk),您可以在 Include 规则中添加多个电子邮件域。

允许来自特定国家/地区的员工

在特定地区运营或需要遵守数据驻留要求的组织可以限制批准国家/地区的用户访问应用程序。当您想要限制员工可以从何处连接,同时仍允许个别用户(例如出差的高管)例外时,此策略很有用。

因为 Require 规则使用 AND 逻辑,所以您不能直接在单个 Require 规则中添加多个国家/地区——那将要求用户同时处于所有这些国家/地区。相反,首先创建一个列出批准国家/地区的规则组

规则类型 选择器
Include(包含) Country(国家/地区) United States, Portugal

Required API token permissions

At least one of the following token permissions is required:
  • Access: Organizations, Identity Providers, and Groups Write
Create an Access groupbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/groups" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Approved countries",
		"include": [
				{
						"geo": {
								"country_code": "US"
						}
				},
				{
						"geo": {
								"country_code": "PT"
						}
				}
		]
	}'

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_group 资源:

resource "cloudflare_zero_trust_access_group" "approved_countries" {
  account_id = var.cloudflare_account_id
  name       = "Approved countries"
  include = [
    {
      geo = {
        country_code = "US"
      }
    },
    {
      geo = {
        country_code = "PT"
      }
    },
  ]
}

然后在您的 Access 策略中引用该规则组:

操作 规则类型 选择器
Allow(允许) Include(包含) Emails ending in(电子邮件结尾为) @example.com
Require(要求) Rule group(规则组) Approved countries
Exclude(排除) Email(电子邮件) user-1@example.com, user-2@example.com

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Allow employees from specific countries",
		"decision": "allow",
		"include": [
				{
						"email_domain": {
								"domain": "example.com"
						}
				}
		],
		"require": [
				{
						"group": {
								"id": "<APPROVED_COUNTRIES_GROUP_ID>"
						}
				}
		],
		"exclude": [
				{
						"email": {
								"email": "user-1@example.com"
						}
				},
				{
						"email": {
								"email": "user-2@example.com"
						}
				}
		]
	}'

<APPROVED_COUNTRIES_GROUP_ID> 替换为创建上述规则组时返回的 id。要查找现有组,请使用列出 Access 组端点。

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "allow_employees_from_specific_countries" {
  account_id = var.cloudflare_account_id
  name       = "Allow employees from specific countries"
  decision   = "allow"
  include = [{
    email_domain = {
      domain = "example.com"
    }
  }]
  require = [{
    group = {
      id = cloudflare_zero_trust_access_group.approved_countries.id
    }
  }]
  exclude = [
    {
      email = {
        email = "user-1@example.com"
      }
    },
    {
      email = {
        email = "user-2@example.com"
      }
    },
  ]
}

cloudflare_zero_trust_access_group.approved_countries 引用指向上面创建的 cloudflare_zero_trust_access_group 资源。

敏感应用程序要求设备姿态

对于包含敏感数据的应用程序,您可以验证用户是否从满足您组织安全基线的托管设备进行连接。以下示例将身份验证与设备姿态检查相结合,以确保设备正在运行受支持的 OS 版本,并且已通过由 Require Gateway 检查强制要求的 Cloudflare One Client 进行连接。

操作 规则类型 选择器
Allow(允许) Include(包含) Okta Groups(Okta 组) Full-Time Employees
Require(要求) Gateway Gateway
Require(要求) OS Version(操作系统版本) Latest version of Windows

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Require device posture for sensitive apps",
		"decision": "allow",
		"include": [
				{
						"okta": {
								"name": "Full-Time Employees",
								"identity_provider_id": "<OKTA_IDP_ID>"
						}
				}
		],
		"require": [
				{
						"device_posture": {
								"integration_uid": "<GATEWAY_CHECK_ID>"
						}
				},
				{
						"device_posture": {
								"integration_uid": "<OS_VERSION_CHECK_ID>"
						}
				}
		]
	}'

okta 规则替换为适用于您的身份提供商的规则。要获取您的身份提供商 ID,请使用列出 Access 身份提供商端点。要获取您的设备姿态检查的集成 UID,请使用列出设备姿态检查端点。

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "require_device_posture" {
  account_id = var.cloudflare_account_id
  name       = "Require device posture for sensitive apps"
  decision   = "allow"
  include = [{
    okta = {
      name                 = "Full-Time Employees"
      identity_provider_id = cloudflare_zero_trust_access_identity_provider.okta.id
    }
  }]
  require = [
    {
      device_posture = {
        integration_uid = cloudflare_zero_trust_device_posture_rule.gateway_check.id
      }
    },
    {
      device_posture = {
        integration_uid = cloudflare_zero_trust_device_posture_rule.os_version_check.id
      }
    },
  ]
}

要在多个应用程序中重用这些设备要求,请创建一个名为“企业设备要求”且包含这些姿态检查的规则组。然后,您可以在任何策略的 Require 字段中引用该规则组。

高安全性应用程序要求 MFA

对于处理财务数据、生产基础设施或其他高价值资源的应用程序,您可以要求用户除了其身份提供商凭据外,还必须通过多因素身份验证(MFA)进行身份验证。这可确保仅凭泄露的密码不足以获取访问权限。

Access 支持两种强制执行 MFA 的方法:

基于身份提供商的 MFA

如果您的身份提供商报告了登录期间使用的身份验证方法,您可以添加 Authentication method(身份验证方法) 选择器以要求特定的 MFA 方法,例如硬件安全密钥。

操作 规则类型 选择器
Allow(允许) Include(包含) Okta Groups(Okta 组) Employees
Require(要求) Authentication method(身份验证方法) Security key
Require(要求) Gateway (启用)

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Require MFA for high-security apps",
		"decision": "allow",
		"include": [
				{
						"okta": {
								"name": "Employees",
								"identity_provider_id": "<OKTA_IDP_ID>"
						}
				}
		],
		"require": [
				{
						"auth_method": {
								"auth_method": "swk"
						}
				},
				{
						"device_posture": {
								"integration_uid": "<GATEWAY_CHECK_ID>"
						}
				}
		]
	}'

auth_method 值使用 RFC 8176 身份验证方法参考值。例如,swk 代表软件保护密钥(安全密钥)。将 okta 规则替换为适用于您的身份提供商的规则。要获取您的身份提供商 ID,请使用列出 Access 身份提供商端点。要获取 <GATEWAY_CHECK_ID>,请使用列出设备姿态检查端点。

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "require_mfa" {
  account_id = var.cloudflare_account_id
  name       = "Require MFA for high-security apps"
  decision   = "allow"
  include = [{
    okta = {
      name                 = "Employees"
      identity_provider_id = cloudflare_zero_trust_access_identity_provider.okta.id
    }
  }]
  require = [
    {
      auth_method = {
        auth_method = "swk"
      }
    },
    {
      device_posture = {
        integration_uid = cloudflare_zero_trust_device_posture_rule.gateway_check.id
      }
    },
  ]
}

auth_method 值使用 RFC 8176 身份验证方法参考值。例如,swk 代表软件保护密钥(安全密钥)。

独立 MFA

如果您想直接在 Access 中强制执行 MFA 而不依赖您的 IdP,可以使用独立 MFA。独立 MFA 不是通过策略选择器配置的。相反,您首先在组织级别开启独立 MFA,然后通过设置面板为特定的应用程序或策略启用它。在用户向您的 IdP 进行身份验证后,Access 将提示用户输入第二个因素(例如安全密钥、身份验证器应用程序或生物识别技术)。

有关这两种方法的完整详细信息,请参阅强制执行 MFA

允许使用基于电子邮件身份验证的承包商访问

当您与不属于企业身份提供商的外部承包商或合作伙伴合作时,您可以使用一次性 PIN 码(OTP)向他们授予访问权限。OTP 会向承包商的电子邮件地址发送一个短期代码,允许他们在不需要您的 IdP 账户的情况下进行身份验证。

操作 规则类型 选择器
Allow(允许) Include(包含) Emails ending in(电子邮件结尾为) @contractor-a.com, @contractor-b.com
Require(要求) Login methods(登录方法) One-time PIN

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Allow contractor access with OTP",
		"decision": "allow",
		"include": [
				{
						"email_domain": {
								"domain": "contractor-a.com"
						}
				},
				{
						"email_domain": {
								"domain": "contractor-b.com"
						}
				}
		],
		"require": [
				{
						"login_method": {
								"id": "<OTP_IDENTITY_PROVIDER_ID>"
						}
				}
		]
	}'

要获取您的 OTP 身份提供商的 ID,请使用列出 Access 身份提供商端点。

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "allow_contractor_access_with_otp" {
  account_id = var.cloudflare_account_id
  name       = "Allow contractor access with OTP"
  decision   = "allow"
  include = [
    {
      email_domain = {
        domain = "contractor-a.com"
      }
    },
    {
      email_domain = {
        domain = "contractor-b.com"
      }
    },
  ]
  require = [{
    login_method = {
      id = cloudflare_zero_trust_access_identity_provider.otp.id
    }
  }]
}

要为 OTP 配置 cloudflare_zero_trust_access_identity_provider 资源(配置有 type = "onetimepin"),请参阅一次性 PIN 码

隔离承包商对内部应用程序的访问

当承包商或其他外部用户需要查看内部应用程序,但不应下载、复制或将数据传输到其非托管设备时,您可以在远程浏览器中运行该应用程序。这使外部用户对应用程序具有只读可见性,同时防止敏感数据离开您的环境。

操作 规则类型 选择器
Allow(允许) Include(包含) Emails ending in(电子邮件结尾为) @contractor-a.com, @contractor-b.com

其他设置:开启 Isolate application(隔离应用程序)

首先,如果尚未启用,请在您的账户上启用免客户端网页隔离:

Patch Zero Trust account configurationbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/configuration" \
	--request PATCH \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"settings": {
				"browser_isolation": {
						"url_browser_isolation_enabled": true
				}
		}
	}'

然后,创建将 isolation_required 设置为 true 的 Access 策略:

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Isolate contractor access",
		"decision": "allow",
		"include": [
				{
						"email_domain": {
								"domain": "contractor-a.com"
						}
				},
				{
						"email_domain": {
								"domain": "contractor-b.com"
						}
				}
		],
		"isolation_required": true
	}'

首先,配置 cloudflare_zero_trust_gateway_settings 资源以在您的账户上启用免客户端网页隔离(如果尚未启用):

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Zero Trust Write
resource "cloudflare_zero_trust_gateway_settings" "gateway_settings" {
  account_id = var.cloudflare_account_id
  settings = {
    browser_isolation = {
      url_browser_isolation_enabled = true
    }
  }
}

然后,配置 cloudflare_zero_trust_access_policy 资源并将 isolation_required 设置为 true

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write
resource "cloudflare_zero_trust_access_policy" "isolate_contractor_access" {
  account_id         = var.cloudflare_account_id
  name               = "Isolate contractor access"
  decision           = "allow"
  isolation_required = true
  include = [
    {
      email_domain = {
        domain = "contractor-a.com"
      }
    },
    {
      email_domain = {
        domain = "contractor-b.com"
      }
    },
  ]
}

为了限制用户在隔离会话中可以进行的操作,请创建一个配套的 Gateway HTTP 策略,该策略与流向应用程序域的流量相匹配。将操作设置为 Isolate,并在策略设置中禁用交互式控制。

示例 Gateway HTTP 策略

选择器 运算符 操作
Domain(域名) in wiki.example.com Isolate(隔离)

策略设置

设置
复制 不允许
粘贴 不允许
键盘 不允许
文件下载 不允许
文件上传 不允许
打印 不允许

有关更多信息,请参阅隔离自托管应用程序

阻止来自高风险国家/地区的请求

如果您的组织由于内部策略或法规要求(例如 OFAC 制裁ITAR 法规)而限制来自某些国家/地区的访问,您可以创建一个拒绝从这些地区访问的 Block(阻止)策略。添加企业 IP 允许列表作为 Exclude(排除)规则可确保通过受信任的办公网络连接的员工不会被意外阻止。

操作 规则类型 选择器
Block(阻止) Include(包含) Country(国家/地区) Russian Federation
Exclude(排除) IP List(IP 列表) Corporate IP allowlist

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Block requests from high-risk countries",
		"decision": "deny",
		"include": [
				{
						"geo": {
								"country_code": "RU"
						}
				}
		],
		"exclude": [
				{
						"ip_list": {
								"id": "<CORPORATE_IP_ALLOWLIST_ID>"
						}
				}
		]
	}'

要获取您的 IP 列表的 ID,请使用列出 Zero Trust 列表端点。

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "block_high_risk_countries" {
  account_id = var.cloudflare_account_id
  name       = "Block requests from high-risk countries"
  decision   = "deny"
  include = [{
    geo = {
      country_code = "RU"
    }
  }]
  exclude = [{
    ip_list = {
      id = cloudflare_zero_trust_list.corporate_ip_allowlist.id
    }
  }]
}

要配置上面引用的 cloudflare_zero_trust_list 资源(配置为 type = "IP"),请参阅列表

Block(阻止)策略最好与 Allow(允许)策略一起使用以制定例外情况。因为 Access 默认拒绝所有请求,所以不匹配 Block 策略的用户仍然会被拒绝,除非他们匹配了 Allow 策略。

排除高风险用户

如果您的组织使用 Cloudflare 用户风险评分来标记行为异常的用户,您可以排除高风险用户访问敏感应用程序。这是一种动态保护措施,当用户行为触发风险级别更改时会自动限制访问,无需人工干预。

操作 规则类型 选择器
Allow(允许) Include(包含) Emails ending in(电子邮件结尾为) @example.com
Exclude(排除) User Risk Score(用户风险评分)

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Exclude high-risk users",
		"decision": "allow",
		"include": [
				{
						"email_domain": {
								"domain": "example.com"
						}
				}
		],
		"exclude": [
				{
						"user_risk_score": {
								"user_risk_score": [
										"high"
								]
						}
				}
		]
	}'

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "exclude_high_risk_users" {
  account_id = var.cloudflare_account_id
  name       = "Exclude high-risk users"
  decision   = "allow"
  include = [{
    email_domain = {
      domain = "example.com"
    }
  }]
  exclude = [{
    user_risk_score = {
      user_risk_score = ["high"]
    }
  }]
}

在此示例中,即使匹配 Include 规则,任何被评为高风险的用户也会被排除。要了解如何计算风险评分以及如何配置风险行为,请参阅用户风险评分

使用服务令牌对服务进行身份验证

CI/CD 流水线、监控系统和后端 API 等自动化服务需要访问受保护的应用程序,而无需交互式登录。Service Auth(服务身份验证) 策略通过对提供有效服务令牌标头的请求进行身份验证,从而允许机对机(M2M)通信。为了提高安全性,您可以将令牌限制为来自特定 IP 范围的请求,以确保该令牌只能从已知的基础设施中使用。

操作 规则类型 选择器
Service Auth(服务身份验证) Include(包含) Service Token(服务令牌) My service token
Require(要求) IP ranges(IP 范围) 192.0.2.0/24

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Authenticate service with service token",
		"decision": "non_identity",
		"include": [
				{
						"service_token": {
								"token_id": "<SERVICE_TOKEN_ID>"
						}
				}
		],
		"require": [
				{
						"ip": {
								"ip": "192.0.2.0/24"
						}
				}
		]
	}'

要获取您的服务令牌的 ID,请使用列出服务令牌端点。

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "authenticate_service_with_token" {
  account_id = var.cloudflare_account_id
  name       = "Authenticate service with service token"
  decision   = "non_identity"
  include = [{
    service_token = {
      token_id = cloudflare_zero_trust_access_service_token.my_service_token.id
    }
  }]
  require = [{
    ip = {
      ip = "192.0.2.0/24"
    }
  }]
}

要配置上面引用的 cloudflare_zero_trust_access_service_token 资源,请参阅服务令牌

使用双向 TLS(mTLS)对服务进行身份验证

对于需要基于证书的身份验证的环境,您可以使用双向 TLS(mTLS)来验证连接的客户端是否出示了具有预期身份的有效证书。mTLS 对于对不使用身份提供商的自动化系统和 IoT 设备进行身份验证非常有用,或者作为通过 IdP 登录的团队成员的附加身份验证因子。

要限制对特定客户端的访问,请使用 Common Name(通用名称) 选择器来匹配客户端证书中的身份:

操作 规则类型 选择器
Service Auth(服务身份验证) Include(包含) Common Name(通用名称) John Doe

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Authenticate service with mTLS",
		"decision": "non_identity",
		"include": [
				{
						"common_name": {
								"common_name": "John Doe"
						}
				}
		]
	}'

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "authenticate_service_with_mtls" {
  account_id = var.cloudflare_account_id
  name       = "Authenticate service with mTLS"
  decision   = "non_identity"
  include = [{
    common_name = {
      common_name = "John Doe"
    }
  }]
}

要允许出示由您的 CA 签署的有效证书的任何客户端,请使用 Valid Certificate(有效证书) 选择器。当您信任 CA 颁发的所有证书且无需检查特定的公用名称(Common Name)时,此选择器很有用。

操作 规则类型 选择器
Service Auth(服务身份验证) Include(包含) Valid Certificate(有效证书)

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Authenticate service with valid certificate",
		"decision": "non_identity",
		"include": [
				{
						"certificate": {}
				}
		]
	}'

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "authenticate_service_with_valid_certificate" {
  account_id = var.cloudflare_account_id
  name       = "Authenticate service with valid certificate"
  decision   = "non_identity"
  include = [{
    certificate = {}
  }]
}

敏感应用程序要求说明目的

对于数据库管理工具、生产控制台或 HR 系统等应用程序,您可以要求用户每次访问应用程序时都提供书面理由。这将创建一个审计线索,帮助安全团队了解请求访问的原因。说明目的提示会在用户通过身份验证之后、访问应用程序之前显示。有关更多信息,请参阅要求说明目的

操作 规则类型 选择器
Allow(允许) Include(包含) Okta Groups(Okta 组) IT Administrators
Require(要求) Gateway Gateway
Require(要求) OS Version(操作系统版本) Latest version of Windows

其他设置:开启 Purpose justification(用途说明)

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Require purpose justification for sensitive apps",
		"decision": "allow",
		"include": [
				{
						"okta": {
								"name": "IT Administrators",
								"identity_provider_id": "<OKTA_IDP_ID>"
						}
				}
		],
		"require": [
				{
						"device_posture": {
								"integration_uid": "<GATEWAY_CHECK_ID>"
						}
				},
				{
						"device_posture": {
								"integration_uid": "<WINDOWS_VERSION_CHECK_ID>"
						}
				}
		],
		"purpose_justification_required": true,
		"purpose_justification_prompt": "Please enter a justification for accessing this application."
	}'

okta 规则替换为适用于您的身份提供商的规则。要获取您的身份提供商 ID,请使用列出 Access 身份提供商端点。要获取您的设备姿态检查的集成 UID,请使用列出设备姿态检查端点。

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "require_purpose_justification" {
  account_id                      = var.cloudflare_account_id
  name                            = "Require purpose justification for sensitive apps"
  decision                        = "allow"
  purpose_justification_required  = true
  purpose_justification_prompt    = "Please enter a justification for accessing this application."
  include = [{
    okta = {
      name                 = "IT Administrators"
      identity_provider_id = cloudflare_zero_trust_access_identity_provider.okta.id
    }
  }]
  require = [
    {
      device_posture = {
        integration_uid = cloudflare_zero_trust_device_posture_rule.gateway_check.id
      }
    },
    {
      device_posture = {
        integration_uid = cloudflare_zero_trust_device_posture_rule.windows_version.id
      }
    },
  ]
}

您可以将说明目的与临时身份验证相结合,以在授予访问权限之前额外要求指定审查者的批准。

绕过公共端点

某些应用程序具有必须可以公开访问的端点,例如 OAuth 回调 URL、Webhook 接收器或健康检查路径。您可以创建一个局限于特定应用程序路径的 Bypass(绕过)策略,以仅对该端点禁用 Access 强制执行。例如,如果您的应用程序是 app.example.com,您可以为 app.example.com/oauth/callback 创建一个单独的 Access 应用程序,并应用以下 Bypass 策略:

操作 规则类型 选择器
Bypass(绕过) Include(包含) Everyone(所有人) Everyone

Required API token permissions

At least one of the following token permissions is required:
  • Access: Apps and Policies Write
Create an Access reusable policybash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Bypass public endpoint",
		"decision": "bypass",
		"include": [
				{
						"everyone": {}
				}
		]
	}'

所需的 API 令牌权限

至少需要以下令牌权限之一:

  • Access: Apps and Policies Write

配置 cloudflare_zero_trust_access_policy 资源:

resource "cloudflare_zero_trust_access_policy" "bypass_public_endpoint" {
  account_id = var.cloudflare_account_id
  name       = "Bypass public endpoint"
  decision   = "bypass"
  include = [{
    everyone = {}
  }]
}

这篇文档对您有帮助吗?