如何关闭 Cloudflare 的 Access policy (How to disable the Access policy of Cloudflare)

Published at:
Updated at:
Tags: Cloudflare

本文讲述如何在不绑定信用卡的情况下关闭 Cloudflare 的 Access policy。

This post describes that how to disable the Access policy of Cloudflare without credit card.

前言

最近使用在使用 Cloudflare Pages 部署静态网页的过程中,不小心开启了 Access-policy,导致访问部署项目的历史版本都需要经过验证,但想进入关闭 Access-policy 的页面,必须要先绑定了信用卡。

这次属实是被 Cloudflare 给恶心到了,还好找到了解决方法,也就是通过调用 API 的方式去关闭这个功能。

必要条件

  • 熟悉 HTTP 协议接口的使用
  • 熟悉 curl 的操作方式

操作流程

根据 Cloudflare API 的文档,获取 List Access Applications

GET accounts/:identifier/access/apps

官方示例:

curl -X GET "https://api.cloudflare.com/client/v4/accounts/699d98642c564d2e855e9661899b7252/access/apps" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json"

对 API 请求数据很简单,X-Auth-Email 很明显是我们账户绑定的邮箱,但是 url 参数中的 identifier 与 X-Auth-Key 的值应该如何获得?

获取自己的 identifier

登录 Cloudflare 之后,我们可以在主页的 URL 后看到一个看上去像是 ID 的字符串(abcdef1145141919810abcdefabcdefa),没错,这个就是我们的 identifier 。

Cloudflare 主页

获取自己的 X-Auth-Key

登录 Cloudflare 可在这个页面 https://dash.cloudflare.com/profile/api-tokens 的 Global API Key 选项中查看。

API Tokens 页

获取 Access policy 的 ID

有了自己账户的 identifier 与 X-Auth-Key 之后,就可以对上文提到的 API 发送请求了,以下是我开启 Access policy 后对该 API 发送请求的结果,我们可以得到 Access policy 的 ID ffffffff-1145-1419-1981-ffffffff

{
	"result": [
		{
			"aud": "*",
			"created_at": "*",
			"domain": "****",
			"id": "ffffffff-1145-1419-1981-ffffffff",
			"name": "***** - Cloudflare Pages",
			"policies": [
				{
					"created_at": "*",
					"decision": "allow",
					"exclude": [],
					"id": "****",
					"include": [
						{
							"email": {
								"email": "*@*****.****"
							}
						}
					]
					// ...
				}
			],
			"allowed_idps": ["*-****-*****"],
			"auto_redirect_to_identity": false,
			"session_duration": "24h",
			"ssh_logging_enabled": false,
			"uid": "****-****-*",
			"updated_at": "",
			"type": "self_hosted",
			"app_launcher_visible": false
		}
	],
	"success": true,
	"errors": [],
	"messages": []
}

关闭 Access policy

有了 Access policy 的 ID 之后,就可以使用删除 Access Application 的接口关闭 Access policy。Cloudflare 是使用 RESTful 规范设计的 API,删除接口的 URL 就是将上文提到的接口,将 GET 换成 DELETE,并在最后加上 ID。

DELETE accounts/:identifier/access/apps/:uuid
curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/abcdef1145141919810abcdefabcdefa/access/apps/ffffffff-1145-1419-1981-ffffffff" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json"

发送 DELETE 请求后,返回结果类似以下的结果,状态码为 202 (Accepted),恭喜你,你已经成功关闭了这该死的 Access policy!

如果返回了其他的结果,请根据返回的结果中的提示,修改你请求中的参数。

{
	"result": {
		"id": "ffffffff-1145-1419-1981-ffffffff"
	},
	"success": true,
	"errors": [],
	"messages": []
}

参考资料