跳转到内容
搜索文档

隧道权限

最后更新 查看 MarkdownAgent 设置

远程管理隧道仅需要隧道令牌即可运行。任何有权访问令牌的人都将能够运行该隧道。

获取隧道令牌

要获取远程管理隧道的令牌:

  1. 在 Cloudflare 仪表板中,前往 Networking(网络) > Tunnels(隧道)

    Go to Tunnels ↗
  2. 选择一个隧道以打开其详情页面。

  3. 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 Write
  • Cloudflare One Connector: cloudflared Write
  • Cloudflare Tunnel Write
Get a Cloudflare Tunnel tokenbash
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

  1. 将隧道令牌输出到 Terraform 状态文件:
    output "tunnel_token" {
    	value       = data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token
    	sensitive   = true
    }
  2. 应用该配置:
    terraform apply
  3. 读取隧道令牌:
    terraform output -raw tunnel_token
    eyJhIj...

或者,直接将 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 副本提供服务,您就可以在对用户干扰最小的情况下轮换令牌。为确保服务可用性,我们建议在非工作时间或维护窗口期间进行令牌轮换。

要轮换隧道令牌:

  1. 在 Cloudflare 上刷新令牌:

    1. 在 Cloudflare 仪表板中,前往 Networking(网络) > Tunnels(隧道)

      Go to Tunnels ↗
    2. 选择一个隧道以打开其详情页面。

    3. Overview(概览) 选项卡上,选择 Refresh token(刷新令牌)

    4. 复制适用于您的操作系统的 cloudflared 安装命令。此命令包含新令牌。

    1. 生成一个随机的 base64 字符串(大小至少为 32 字节)作为隧道密钥:

      openssl rand -base64 32
      AQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIAQIDBAUGBwg=
    2. Cloudflare Tunnel 端点发出 PATCH 请求:

      Required API token permissions

      At least one of the following token permissions is required:
      • Cloudflare One Connectors Write
      • Cloudflare One Connector: cloudflared Write
      • Cloudflare 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..."
      	}
      }
    3. 复制输出中显示的 token 值。

    刷新令牌后,cloudflared 将无法再使用旧令牌与 Cloudflare 建立新连接。不过,现有的连接器将保持活动状态,隧道也将继续提供流量服务。

  2. 在您的一半 cloudflared 副本上,使用新令牌重新安装 cloudflared 服务。例如,在 Linux 主机上:

      sudo cloudflared service uninstall
    sudo cloudflared service install <NEW_TOKEN>
  3. 确认服务是否正确启动:

    sudo systemctl status cloudflared

    当这些副本使用新令牌连接到 Cloudflare 时,流量将自动通过其他副本路由。

  4. 等待 10 分钟以让流量通过新连接器路由。

  5. 对另一半副本重复步骤 2、3 和 4。

现在,隧道令牌已完全轮换。旧令牌不再使用。

轮换泄露的令牌

如果您的隧道令牌泄露,我们建议采取以下步骤:

  1. 使用仪表板或 API 刷新令牌。请参阅在不中断服务的情况下轮换令牌的步骤 1。

  2. 删除 cloudflared 与 Cloudflare 之间的所有连接

    Required API token permissions

    At least one of the following token permissions is required:
    • Cloudflare One Connectors Write
    • Cloudflare One Connector: cloudflared Write
    • Cloudflare 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"

    这将清除任何未经授权的连接,并防止用户连接到您的网络。

  3. 在每个 cloudflared 副本上,将 cloudflared 更新为使用新令牌。例如,在 Linux 主机上:

      sudo cloudflared service uninstall
    sudo cloudflared service install <NEW_TOKEN>
  4. 确认服务是否正确启动:

    sudo systemctl status cloudflared

现在,隧道令牌已完全轮换。旧令牌不再使用。

账户范围的角色

为账户创建、删除和配置隧道所需的最低权限:

将流量路由到公共主机名以及执行 cloudflared login 所需的额外权限:

资源范围的权限

您还可以将权限范围限制到单个 Cloudflare Tunnel 实例,而不是授予整个账户的访问权限。请参阅隧道和 Mesh 节点的细粒度权限

这篇文档对您有帮助吗?