このチュートリアルでは、サービストークンとインストールスクリプトを使い、Linux デバイスへ Cloudflare One Client を導入します。この導入フローは、IdP ログイン用のブラウザーがないヘッドレスサーバー向けです。オンボーディングを完全に自動化したい場合にも使えます。デバイスは IdP 経由で登録しないため、ID ベースのポリシー とログは使えません。
- Cloudflare Zero Trust アカウント
- 対応 Linux デバイスでの root または
sudo権限 - Zero Trust のチーム名
- サービストークンの Client ID と Client Secret
完全自動の導入では、サービストークンで Cloudflare One Client を 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の値をコピーします。レスポンスjson "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 の state ファイルに出力します。
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 の state ファイルに出力します。
デバイス登録の権限は、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)かを選べます。例:Rule Action Rule type Selector Value Service Auth Include Service Token <TOKEN-NAME> -
ポリシーを保存します。
-
Device enrollment permissions に戻り、作成したポリシーを権限に追加します。
-
Save を選びます。
Terraform でサービストークン登録を設定する場合は、サービストークンの確認 を参照してください。
シェルスクリプトで、WARP のインストールと登録を自動化できます。次の例は、Ubuntu 24.04 へ Cloudflare One Client を導入する方法です。
-
ターミナルで、テキストエディターを使い新しい
.shファイルを作成します。例:umask 077 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 install -m 600 /dev/null /var/lib/cloudflare-warp/mdm.xml sudo tee /var/lib/cloudflare-warp/mdm.xml > /dev/null << "EOF" <dict> <key>auth_client_id</key> <string>YOUR_CLIENT_ID</string> <key>auth_client_secret</key> <string>YOUR_CLIENT_SECRET</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 sudo systemctl restart warp-svc -
Debian または RHEL / CentOS を使う場合は、OS に合う WARP パッケージ ↗ をインストールするように
warp()関数を変更します。 -
mdm()関数の値を変更します。auth_client_idとauth_client_secretには、サービストークン の Client ID と Client Secret を入れます。organizationでは、your-team-nameを Zero Trust の チーム名 に置き換えます。- (任意)必要に応じて、ほかの Cloudflare One Client 導入パラメーター を追加または変更します。
-
escを押し、:xと入力してEnterを押し、保存して終了します。
例のスクリプトで Cloudflare One Client をインストールします。
-
スクリプトを実行可能にします。
chmod 700 install_warp.sh -
スクリプトを実行します。
sudo ./install_warp.sh -
サービストークンのシークレットが含まれるため、スクリプトを削除します。
rm install_warp.sh
Cloudflare One Client は、root のみが読める /var/lib/cloudflare-warp/mdm.xml に保存した設定パラメーターで導入されます。auto_connect を設定している場合、Cloudflare One Client は Zero Trust 組織へ自動接続します。
登録と接続を確認します。
sudo warp-cli --accept-tos registration show
sudo warp-cli --accept-tos status登録が成功すると、Zero Trust > Team & Resources > Devices に、メール non_identity@<team-name>.cloudflareaccess.com のデバイスが作成されます。status が Connected と報告することを確認します。コマンド完了や HTTP リダイレクトだけでは、登録や接続の証明にはなりません。
登録とステータスのコマンドは、登録と Cloudflare への接続を確認します。エンドツーエンドのトラフィックを確認するには、使いたいプロトコルで、対象に含まれる宛先へ接続します。Cloudflare Mesh では、接続の確認 に従ってください。
クライアントが Registration Missing due to: Does not exist in API と報告する場合、または warp-svc ログに HTTP 400 の登録応答がある場合は、登録に失敗しています。サービストークンポリシーが Service Auth アクションを使っていること、ポリシーがデバイス登録権限に付いていること、MDM のチーム名とトークン値が正しいことを確認します。設定を修正または確認したあと、サービスを再起動し、確認コマンドを両方もう一度実行します。
sudo systemctl restart warp-svc
sudo warp-cli --accept-tos registration show
sudo warp-cli --accept-tos status