自動化システムにサービストークンを渡し、Cloudflare One のポリシーに対して認証できます。Cloudflare Access は、Client ID と Client Secret からなるサービストークンを生成します。自動化システムやアプリケーションは、これらの値を使って Access で保護されたアプリケーションに到達できます。
このセクションでは、サービストークンの作成、ローテーション、更新、無効化、取り消しの方法を説明します。
-
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 ファイルに出力します。
Access アプリケーションと デバイス登録の権限 で、このサービストークンを受け入れるよう設定できます。ポリシーのアクションは Service Auth にしてください。そうしないと、Access は ID プロバイダーへのログインを求めます。
2026 年 8 月 26 日以降、新規サービストークンの Client Secret は cfast_[40 alphanumeric characters][8-character checksum] 形式です。プレフィックスとチェックサムにより、認証情報スキャンツールが識別しやすくなります。
既存の Client Secret は 64 文字の 16 進数形式です。これらのシークレットは引き続き使え、ローテーションは必須ではありません。どちらの形式も、同じ Client ID と認証ヘッダーを使います。
サービストークンで Access アプリケーションに認証するには、HTTP リクエストのヘッダーに次を追加します。
CF-Access-Client-Id: <CLIENT_ID>
CF-Access-Client-Secret: <CLIENT_SECRET>
例:
curl -H "CF-Access-Client-Id: <CLIENT_ID>" -H "CF-Access-Client-Secret: <CLIENT_SECRET>" https://app.example.comセルフホスト Access アプリケーションを、CF-Access-Client-Id と CF-Access-Client-Secret のペアではなく、1 つの HTTP ヘッダーでサービストークンを受け入れるよう設定できます。リクエストでカスタムヘッダーを 1 つしか送れない SaaS サービス(例: Authorization ヘッダー)の認証に便利です。
単一ヘッダーで認証する手順は次のとおりです。
-
既存の Access アプリケーション設定を取得します。
At least one of the following token permissions is required:Required API token permissions
Access: Apps and Policies WriteAccess: Apps and Policies Read
Get an Access applicationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps/$APP_ID" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -
サービストークン認証に使うヘッダー名を指定して
PUTリクエストを送ります。既存の設定を上書きしないよう、PUTリクエストの本文には直前のGETリクエストで返されたすべてのフィールドを含めます。
At least one of the following token permissions is required:Required API token permissions
Access: Apps and Policies Write
Update an Access applicationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps/$APP_ID" \ --request PUT \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "domain": "app.example.com", "type": "self_hosted", "read_service_tokens_from_header": "Authorization" }' -
任意の HTTP リクエストにヘッダーを追加します。例:
curl -H "Authorization: {\"cf-access-client-id\": \"<CLIENT_ID>\", \"cf-access-client-secret\": \"<CLIENT_SECRET>\"}" https://app.example.com
漏洩の疑いがあるとき、または定期的な認証情報ローテーションの一環として、サービストークンのシークレットをローテーションします。Client ID は変わりませんが、Access は新しい Client Secret を生成します。
両方のシークレットが使える猶予期間を設定できます。Access が以前のシークレットを無効にする前に、この期間でサービスを更新します。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Service credentials > Service Tokens を開きます。
を開く ↗ -
トークンを探し、三点リーダー > Rotate secret を選びます。
-
Keep the current secret valid for で、Access が現在のシークレットを無効にするタイミングを選びます。猶予期間は 1 時間から 30 日まで選べます。ローテーションと同時に無効にする場合は Revoke immediately を選びます。
-
Rotate を選びます。
-
新しい Client Secret をコピーし、猶予期間が終わる前にサービスを更新します。
Rotate a service token エンドポイントに POST リクエストを送ります。以前のシークレットの期限切れ日時は、previous_client_secret_expires_at に RFC 3339 のタイムスタンプで指定します。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens/$SERVICE_TOKEN_ID/rotate" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"previous_client_secret_expires_at": "2030-01-01T00:00:00Z"
}'以前のシークレットをすぐに無効にする場合は、リクエストから previous_client_secret_expires_at を省略します。
サービストークンは、作成時に選んだトークン有効期間に従って期限切れになります。
- Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Service credentials > Service Tokens を開きます。
- 更新するトークンを探します。
- トークンの有効期間を 1 年延長するには、Refresh を選びます。
- 1 年より長く延長するには、次の手順を行います。
- Edit を選びます。
- 新しい Service Token Duration を選びます。
- Save を選びます。有効期限は、選んだ期間だけ延長されます。
トークンの有効期間を 1 年延長するには、Refresh a service token エンドポイントに POST リクエストを送ります。
Required API token permissions
At least one of the following token permissions is required:Access: Service Tokens Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens/$SERVICE_TOKEN_ID/refresh" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"カスタム期間で延長するには、新しい duration を指定して Update a service token エンドポイントに PUT リクエストを送ります。
Required API token permissions
At least one of the following token permissions is required:Access: Service Tokens Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens/$SERVICE_TOKEN_ID" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"duration": "17520h"
}'サービストークンを更新するには、cloudflare_zero_trust_access_service_token ↗ リソースの duration 属性を更新して適用します。Cloudflare は、更新時点を基準に有効期限をリセットします。
resource "cloudflare_zero_trust_access_service_token" "example_service_token" {
account_id = var.cloudflare_account_id
name = "Example service token"
duration = "17520h"
lifecycle {
create_before_destroy = true
}
}サービストークンをオフにすると、一時的に認証できなくなります。Access はトークンを保持するので、あとから再びオンにできます。
トークンをオフにすると、ローテーションの猶予期間中に以前のシークレットも使えなくなります。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Service credentials > Service Tokens を開きます。
を開く ↗ -
トークンを探し、三点リーダーを選びます。
-
トークンによる認証を止めるには、Disable token > Disable を選びます。
-
認証を再開するには、Enable token > Enable を選びます。
Update a service token エンドポイントに PUT リクエストを送ります。トークンをオフにするには、enabled を false にします。
Required API token permissions
At least one of the following token permissions is required:Access: Service Tokens Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens/$SERVICE_TOKEN_ID" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "<TOKEN_NAME>",
"enabled": false
}'トークンを再びオンにするには、enabled を true にします。
トークンの期限切れ前にアクセスを取り消す必要がある場合は、トークンを削除します。削除したサービストークンに依存するサービスは、アプリケーションに到達できなくなります。
- Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Service credentials > Service Tokens を開きます。
- 取り消すトークンで Delete を選びます。
Delete a service token エンドポイントに DELETE リクエストを送ります。
Required API token permissions
At least one of the following token permissions is required:Access: Service Tokens Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens/$SERVICE_TOKEN_ID" \
--request DELETE \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"サービストークンを取り消すには、設定から cloudflare_zero_trust_access_service_token ↗ リソースを削除して terraform apply を実行するか、破棄対象として指定します。
terraform destroy -target=cloudflare_zero_trust_access_service_token.example_service_tokenサービストークンの期限切れ 1 週間前に通知するアラートを設定し、管理者がトークンの更新を実行できるようにできます。
Expiring Access Service Token Alert
対象サービストークンの有効期限が近づいたときに通知を受け取りたい Access のお客様向けです。
その他のオプション / フィルタなし。
含まれるプランAccess の購入
受け取ったときの対応サービストークンの有効期限を延長します。詳細は サービストークンを更新する を参照してください。
サービストークン期限切れアラートを設定する手順は次のとおりです。
- Cloudflare ダッシュボード ↗ で Notifications ページを開きます。 Notifications を開く ↗
- Add を選びます。
- Expiring Access Service Token を選びます。
- アラートの名前と、任意で説明を入力します。
- (任意)通知メールの他の受信者を追加します。
- Save を選びます。
アラートが設定され、Notifications ページに表示されます。