远程管理隧道仅需要隧道令牌即可运行。任何有权访问令牌的人都将能够运行该隧道。
要获取远程管理隧道的令牌:
-
在 Cloudflare 仪表板中,前往 Networking(网络) > Tunnels(隧道)。
Go to Tunnels ↗ -
选择一个隧道以打开其详情页面。
-
在 Overview(概览) 选项卡上,选择 Add a replica(添加副本) 以显示安装命令。将该命令复制到文本编辑器中(不要运行该命令)。令牌是
eyJ...字符串。
向 Cloudflare Tunnel 令牌 端点发出 GET 请求:
Required API token permissions
At least one of the following token permissions is required:Cloudflare One Connectors WriteCloudflare One Connector: cloudflared WriteCloudflare Tunnel Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel/$TUNNEL_ID/token" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"{
"success": true,
"errors": [],
"messages": [],
"result": "eyJhIjoiNWFiNGU5Z..."
}可以在 result 中找到令牌值。
data "cloudflare_zero_trust_tunnel_cloudflared_token" "tunnel_token" {
account_id = var.cloudflare_account_id
tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.example_tunnel.id
}如果您的主机不是在 Terraform 中管理的,或者您想手动安装该隧道,您可以将令牌值输出到 CLI。
示例:输出到 CLI
- 将隧道令牌输出到 Terraform 状态文件:
output "tunnel_token" { value = data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token sensitive = true } - 应用该配置:
terraform apply - 读取隧道令牌:
terraform output -raw tunnel_tokeneyJhIj...
或者,直接将 data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token 传递到您主机的 Terraform 配置中,或将该令牌存储在您的机密管理工具中。
示例:存储在 HashiCorp Vault 中
resource "vault_generic_secret" "tunnel_token" {
path = "kv/cloudflare/tunnel_token"
data_json = jsonencode({
"TUNNEL_TOKEN" = data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token
})
}Cloudflare 建议定期轮换隧道令牌,以降低令牌被泄露的风险。只要隧道由至少两个 cloudflared 副本提供服务,您就可以在对用户干扰最小的情况下轮换令牌。为确保服务可用性,我们建议在非工作时间或维护窗口期间进行令牌轮换。
要轮换隧道令牌:
-
在 Cloudflare 上刷新令牌:
-
在 Cloudflare 仪表板中,前往 Networking(网络) > Tunnels(隧道)。
Go to Tunnels ↗ -
选择一个隧道以打开其详情页面。
-
在 Overview(概览) 选项卡上,选择 Refresh token(刷新令牌)。
-
复制适用于您的操作系统的
cloudflared安装命令。此命令包含新令牌。
-
生成一个随机的 base64 字符串(大小至少为 32 字节)作为隧道密钥:
openssl rand -base64 32AQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIAQIDBAUGBwg= -
向 Cloudflare Tunnel 端点发出
PATCH请求:
At least one of the following token permissions is required:Required API token permissions
Cloudflare One Connectors WriteCloudflare One Connector: cloudflared WriteCloudflare Tunnel Write
Update a Cloudflare Tunnelbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel/$TUNNEL_ID" \ --request PATCH \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "name": "Example tunnel", "tunnel_secret": "AQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIAQIDBAUGBwg=" }'{ "success": true, "errors": [], "messages": [], "result": { "id": "f70ff985-a4ef-4643-bbbc-4a0ed4fc8415", "account_tag": "699d98642c564d2e855e9661899b7252", "created_at": "2024-12-04T22:03:26.291225Z", "deleted_at": null, "name": "Example tunnel", "connections": [], "conns_active_at": null, "conns_inactive_at": "2024-12-04T22:03:26.291225Z", "tun_type": "cfd_tunnel", "metadata": {}, "status": "inactive", "remote_config": true, "token": "eyJhIjoiNWFiNGU5Z..." } } -
复制输出中显示的
token值。
刷新令牌后,
cloudflared将无法再使用旧令牌与 Cloudflare 建立新连接。不过,现有的连接器将保持活动状态,隧道也将继续提供流量服务。 -
-
在您的一半
cloudflared副本上,使用新令牌重新安装cloudflared服务。例如,在 Linux 主机上:sudo cloudflared service uninstall sudo cloudflared service install <NEW_TOKEN> -
确认服务是否正确启动:
sudo systemctl status cloudflared当这些副本使用新令牌连接到 Cloudflare 时,流量将自动通过其他副本路由。
-
等待 10 分钟以让流量通过新连接器路由。
-
对另一半副本重复步骤 2、3 和 4。
现在,隧道令牌已完全轮换。旧令牌不再使用。
如果您的隧道令牌泄露,我们建议采取以下步骤:
-
使用仪表板或 API 刷新令牌。请参阅在不中断服务的情况下轮换令牌的步骤 1。
-
删除
cloudflared与 Cloudflare 之间的所有连接:
At least one of the following token permissions is required:Required API token permissions
Cloudflare One Connectors WriteCloudflare One Connector: cloudflared WriteCloudflare Tunnel Write
Clean up Cloudflare Tunnel connectionsbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel/$TUNNEL_ID/connections" \ --request DELETE \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"这将清除任何未经授权的连接,并防止用户连接到您的网络。
-
在每个
cloudflared副本上,将cloudflared更新为使用新令牌。例如,在 Linux 主机上:sudo cloudflared service uninstall sudo cloudflared service install <NEW_TOKEN> -
确认服务是否正确启动:
sudo systemctl status cloudflared
现在,隧道令牌已完全轮换。旧令牌不再使用。
为账户创建、删除和配置隧道所需的最低权限:
将流量路由到公共主机名以及执行 cloudflared login 所需的额外权限:
您还可以将权限范围限制到单个 Cloudflare Tunnel 实例,而不是授予整个账户的访问权限。请参阅隧道和 Mesh 节点的细粒度权限。