Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

トンネルの権限

最終更新 Markdown で表示Agent セットアップ

リモート管理トンネルの実行に必要なのは、トンネルトークンだけです。トークンにアクセスできる人は、トンネルを実行できます。

トンネルトークンを取得する

リモート管理トンネルのトークンを取得する手順は次のとおりです。

  1. Cloudflare ダッシュボードで Networking > Tunnels を開きます。

    Tunnels を開く ↗
  2. トンネルを選択して詳細ページを開きます。

  3. Overview タブで Add a replica を選択し、インストールコマンドを表示します。コマンドをテキストエディターにコピーします(コマンドは実行しないでください)。トークンは eyJ... の文字列です。

Cloudflare Tunnel token エンドポイントに 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 の state ファイルに出力します。
    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
	})
}

サービスを止めずにトークンをローテーションする

トークン漏洩のリスクを下げるため、トンネルトークンは定期的にローテーションしてください。トンネルが少なくとも 2 つの cloudflared レプリカ で提供されていれば、ユーザーへの影響を最小限にしてトークンをローテーションできます。サービス可用性を確保するため、トークンのローテーションは業務時間外またはメンテナンスウィンドウで実施してください。

トンネルトークンをローテーションする手順は次のとおりです。

  1. Cloudflare 側でトークンを更新します。

    1. Cloudflare ダッシュボードで Networking > Tunnels を開きます。

      Tunnels を開く ↗
    2. トンネルを選択して詳細ページを開きます。

    3. Overview タブで Refresh token を選択します。

    4. 使用中の OS 向けの 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 インスタンスに権限をスコープすることもできます。Tunnels と Mesh ノードのきめ細かい権限 を参照してください。

役に立ちましたか?