cloudflare-tunnel について
コマンドラインからHTTPリクエストを行うユーザー向けに、Cloudflare Accessで保護されたサービスへのアクセス方法を説明するスキルです。サービストークンのヘッダーと、サービス固有の認証との併用例を扱います。
主な機能
- 01Cloudflare Accessリクエストヘッダーの設定
- 02複数のHTTPメソッドでのリクエスト
- 03サービス固有の認証との併用
- 04JSON本文の送信とファイルのダウンロード
活用シーン
- 01Cloudflare Accessで保護されたAPIの呼び出し
- 02保護されたサービスへのJSON送信
- 03保護されたサービスからのファイル取得
- 04401・403・接続エラーの調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ okou-ai/ okou-skills --skill cloudflare-tunnelインストール後、Claude Code で/cloudflare-tunnelを入力して読み込まれたか確認します。
詳細
使用方法
基本的な curl リクエスト
Cloudflare Access で認証するには、次の 2 つのヘッダーを追加します。
curl -s \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
"https://your-protected-service.example.com/api/endpoint"
追加の認証を使用する場合
多くのサービスでは、Cloudflare Access とサービス独自の認証の両方が必要です。
curl -s \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-H "Authorization: Bearer $API_TOKEN" \
"https://your-protected-service.example.com/api/endpoint"
Basic Auth を使用する場合
curl -s \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-u "username:password" \
"https://your-protected-service.example.com/api/endpoint"
JSON ボディを含む POST リクエスト
/tmp/request.json に書き込みます。
{
"key": "value"
}
次に、以下を実行します。
curl -s -X POST \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d @/tmp/request.json \
"https://your-protected-service.example.com/api/endpoint"
ファイルをダウンロードする
curl -s -o /tmp/output.file \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
"https://your-protected-service.example.com/file"
SSL 検証をスキップする(自己署名証明書)
自己署名証明書を使用しているサービスでは、-k フラグを追加します。
curl -k -s \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
"https://your-protected-service.example.com/api/endpoint"
必須ヘッダー
| ヘッダー | 値 | 説明 |
|---|---|---|
CF-Access-Client-Id | <client-id>.access | サービストークンのクライアント ID |
CF-Access-Client-Secret | <secret> | サービストークンのクライアントシークレット |
よくあるエラー
| エラー | 原因 | 解決方法 |
|---|---|---|
| 403 Forbidden | ヘッダーが無効、または指定されていない | クライアント ID とシークレットを確認してください |
| 403 Forbidden | Access ポリシーにトークンが含まれていない | アプリケーションの Access ポリシーにトークンを追加してください |
| 401 Unauthorized | サービス独自の認証に失敗した | サービス固有の認証情報を確認してください |
| Connection refused | トンネルが起動していない | cloudflared が実行中であることを確認してください |
ヒント
- ヘッダーの順序は問いません - CF ヘッダーはリクエストのどこに指定してもかまいません
- あらゆる HTTP メソッドで動作します - GET、POST、PUT、DELETE など
- 他の認証方式と組み合わせられます - CF Access + Basic Auth、Bearer Token など
- トークンのローテーション - Zero Trust ダッシュボードでシークレットを定期的にローテーションしてください
API リファレンス
- Cloudflare Access:https://developers.cloudflare.com/cloudflare-one/identity/service-tokens/
- Zero Trust ダッシュボード:https://one.dash.cloudflare.com/
コメント
Markdown 対応