本教程介绍如何使用服务令牌和安装脚本在 Linux 设备上部署 Cloudflare One 客户端。此部署工作流专为无头(headless)服务器(即无法访问浏览器以进行身份提供商登录的服务器)以及您希望完全自动化加入流程的情况而设计。由于设备不会通过身份提供商进行注册,因此基于身份的策略和日志记录将不可用。
完全自动化的部署依赖服务令牌来将 Cloudflare One 客户端注册到您的 Zero Trust 组织中。您可以使用相同的令牌注册多个设备,如果设备需要不同的设备配置文件设置,则可以为每个设备生成唯一的令牌。
要创建服务令牌:
-
在 Cloudflare 仪表板 ↗中,前往 Zero Trust > Access controls(访问控制) > Service credentials(服务凭据) > Service Tokens(服务令牌)。
-
选择 Create Service Token(创建服务令牌)。
-
为服务令牌命名。该名称便于您在日志中识别与令牌相关的事件,并可单独撤销令牌。
-
选择 Service Token Duration(服务令牌有效期)。这将设置令牌的到期日期。
-
选择 Generate token(生成令牌)。您将看到为服务令牌生成的 Client ID 和 Client Secret,以及各自的请求头。
-
复制 Client Secret。
-
向 Access Service Tokens 端点发出
POST请求:
At least one of the following token permissions is required:Required API token permissions
Access: Service Tokens Write
Create a service tokenbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "name": "CI/CD token", "duration": "8760h" }' -
复制响应中返回的
client_id和client_secret值。Responsejson "result": { "client_id": "88bf3b6d86161464f6509f7219099e57.access", "client_secret": "bdd31cbc4dec990953e39163fbbb194c93313ca9f0a6e420346af9d326b1d2a5", "created_at": "2025-09-25T22:26:26Z", "expires_at": "2026-09-25T22:26:26Z", "id": "3537a672-e4d8-4d89-aab9-26cb622918a1", "name": "CI/CD token", "updated_at": "2025-09-25T22:26:26Z", "duration": "8760h", "client_secret_version": 1 }
-
向您的
cloudflare_api_token↗ 添加以下权限:Access: Service Tokens Write
-
配置
cloudflare_zero_trust_access_service_token↗ 资源:resource "cloudflare_zero_trust_access_service_token" "example_service_token" { account_id = var.cloudflare_account_id name = "Example service token" duration = "8760h" lifecycle { create_before_destroy = true } } -
获取服务令牌的 Client ID 和 Client Secret:
示例:输出到 CLI
- 将 Client ID 和 Client Secret 输出到 Terraform 状态文件:
output "example_service_token_client_id" { value = cloudflare_zero_trust_access_service_token.example_service_token.client_id } output "example_service_token_client_secret" { value = cloudflare_zero_trust_access_service_token.example_service_token.client_secret sensitive = true } - 应用配置:
terraform apply - 读取 Client ID 和 Client Secret:
terraform output -raw example_service_token_client_idterraform output -raw example_service_token_client_secret
示例:存储在 HashiCorp Vault 中
resource "vault_generic_secret" "example_service_token" { path = "kv/cloudflare/example_service_token" data_json = jsonencode({ "CLIENT_ID" = cloudflare_access_service_token.example_service_token.client_id "CLIENT_SECRET" = cloudflare_access_service_token.example_service_token.client_secret }) } - 将 Client ID 和 Client Secret 输出到 Terraform 状态文件:
设备注册权限决定了哪些用户和设备可以向您的 Zero Trust 组织注册 WARP。
要允许设备使用服务令牌进行注册:
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队和资源) > Devices(设备)。选择 Management(管理) 选项卡。
-
在 Device enrollment permissions(设备注册权限) 中,选择 Manage(管理)。
-
在 Policies(策略) 选项卡中,选择 Create new policy(创建新策略)。系统将打开一个新选项卡,其中显示策略创建页面。
-
对于 Action(操作),选择 Service Auth。
-
对于 Selector(选择器) 字段,您有两个选择:您可以允许所有服务令牌 (
Any Access Service Token),也可以允许特定的服务令牌 (Service Token)。例如:规则操作 规则类型 选择器 值 Service Auth(服务身份验证) Include(包含) Service Token(服务令牌) <TOKEN-NAME> -
保存策略。
-
返回 Device enrollment permissions(设备注册权限) 并将新创建的策略添加到您的权限中。
-
选择 Save(保存)。
您可以使用 shell 脚本来自动执行 WARP 的安装和注册。以下示例展示了如何在 Ubuntu 24.04 上部署 Cloudflare One 客户端。
-
在终端中,使用文本编辑器创建一个新的
.sh文件。例如:vim install_warp.sh -
按
i进入插入模式并添加以下行:#!/bin/bash set -e # Download and install the Cloudflare One Client function warp() { curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list sudo apt-get update --assume-yes sudo apt-get install --assume-yes cloudflare-warp } # Create an MDM file with your Cloudflare One Client deployment parameters function mdm() { sudo touch /var/lib/cloudflare-warp/mdm.xml cat > /var/lib/cloudflare-warp/mdm.xml << "EOF" <dict> <key>auth_client_id</key> <string>88bf3b6d86161464f6509f7219099e57.access</string> <key>auth_client_secret</key> <string>bdd31cbc4dec990953e39163fbbb194c93313ca9f0a6e420346af9d326b1d2a5</string> <key>auto_connect</key> <integer>1</integer> <key>onboarding</key> <false/> <key>organization</key> <string>your-team-name</string> <key>service_mode</key> <string>warp</string> </dict> EOF } #main program warp mdm -
如果您使用的是 Debian 或 RHEL / CentOS,请修改
warp()函数,以便它为您的操作系统安装正确的 WARP 软件包 ↗。 -
修改
mdm()函数中的值:- 对于
auth_client_id和auth_client_secret,将字符串值替换为您的服务令牌的 Client ID 和 Client Secret。 - 对于
organization,将your-team-name替换为您的 Zero Trust 团队名称。 3.(可选)根据您的偏好添加或修改其他 Cloudflare One 客户端部署参数。
- 对于
-
按
esc,然后输入:x并按Enter保存并退出。
要使用示例脚本安装 Cloudflare One 客户端:
-
使脚本可执行:
chmod +x install_warp.sh -
运行脚本:
sudo ./install_warp.sh
Cloudflare One 客户端现在已部署,其配置参数存储在 /var/lib/cloudflare-warp/mdm.xml 中。假设已配置 auto_connect,Cloudflare One 客户端将自动连接到您的 Zero Trust 组织。连接后,该设备将显示在 Cloudflare 仪表板 ↗的 Zero Trust > Team & Resources(团队和资源) > Devices(设备) 下,其电子邮件为 non_identity@<team-name>.cloudflareaccess.com。