2026年 OpenClaw と飛書/Lark・Microsoft Teams:ZoneMac リモート物理 Mac ゲートウェイで完成させる認証・長接続・企業外向き方針の再現 Runbook(openclaw.json 断片+401/429 FAQ)
中国拠点とグローバル拠点が分かれたチームでは、OpenClaw を飛書(Feishu)・Lark・Microsoft Teamsに載せる際、条件付きアクセス・古いトークン・プロキシのアイドル切断で静かに失敗します。本稿は誰がどこで詰まるかの痛点、単一ゲートウェイとリージョン分割ボットの意思決定表、ZoneMac 型リモート物理 Mac上の七ステップ Runbook、openclaw.json の例示断片、設計メモ向けの引用しやすい数値、HTTP 401/429 の FAQ をまとめます。チャネル追加後の安定運用には OpenClaw 公開チャンネルとロールバック可能なアップグレード:openclaw update、stable/beta/dev 切り替えと doctor 検収をリモート物理 Mac 7×24 で回す Runbook と併読すると安全です。
はじめに
OpenClaw をヘッドレスなリモート Mac に置くと、飛書・Lark は安定したコールバック検証と正しいテナントに紐づくアプリ資格情報を求め、Teams と Microsoft Graph は OAuth2・各国クラウドのエンドポイント・積極的なスロットリングを足します。一方セキュリティ部門は外向き許可リストと TLS 検査プロキシを配布し、JWT の期限切れ・SNAT IP・プロキシのアイドル時間を相関させるまで「ランダムな 401 の日」に見えます。
本稿は、蓋を閉じるとスリープする開発者ノート PCではなく、ユーザーが実際にチャットするリージョンに置いた ZoneMac クラスの専用物理 Mac上の単一ゲートウェイ(または小さな HA ペア)を前提にします。Windows/Linux デスクトップはそのままにしつつ信頼境界を macOS に集約する構成は、WSL2 や PowerShell からリモート macOS ゲートウェイへ寄せる OpenClaw Runbook と線形につながります。
同一テーマの簡体字版は 飛書/Lark/Teams 网关 Runbook(简体中文版)、英語版は <head> の hreflang と対応付けています。常時プロセスの見守りは OpenClaw Gateway 7×24:launchd と openclaw health の再現手順 が近いです。
1. 企業で実際に踏む痛点
- テナント分裂したアイデンティティ:中国向け飛書・国際 Lark・Teams 用 Entra ID はアプリディレクトリが揃いません。サンドボックスでは通る資格情報が本番で不透明な 401 になるのは、権限 URL と検証シークレットが本番テナントと一致していないことが多いです。
- 外向き許可と SNAT の漂流:ベンダーは Webhook やレート方針で外向き IP を固定化します。エグレスがローテするリモート Mac プールで IT 票を更新しないと、検証失敗とイベントの重複再送が急に増えます。
- 長寿命セッションとプロキシのアイドル切断:Bot SDK は WebSocket やチャンク HTTP を維持しますが、企業フォワードプロキシはおおよそ 5〜15 分で静かなフローを落とすことがあり、キープアライブと PAC 認識ルートの調整が要ります。
- 監査と最小権限:Graph の
ChannelMessage.Read.All、Lark のim:message系、飛書のイベント購読などスコープがチャネルごとに異なります。過大なトークンはレビューで止まり、過小は実行時に 403/404 のノイズになります。
2. 意思決定表:信頼の終端をどこに置くか
据え置き Mac ゲートウェイ一本に集約するか、リージョンごとにボットを割るかの議論にそのまま貼れる表です。
| 観点 | 単一リモート Mac ゲートウェイ | リージョン分割ボット |
|---|---|---|
| 外向き IP の安定性 | NetOps への SNAT 申請が一枚で済む | 許可が複数化し漂流リスクが増える |
| 長寿命接続 | 有線ホスト上でキープアライブ調整がしやすい | 構成要素が増え、PAC の一貫性が要る |
| 侵害時のブラスト半径 | 全チャネルが同一プロセス空間を共有 | テナント単位で秘密が小さく分離 |
| 429/クォータの分離 | 騒がしいループが他を飢餓させうる | アプリ登録を分けて隔離しやすい |
| 運用の複雑さ | launchd ユニットが一つ、ログも一本 | N 倍のデプロイパイプライン |
3. 七ステップ再現 Runbook(ZoneMac 型リモート物理 Mac)
- エンドポイント棚卸しの固定:
*.feishu.cn、open.feishu.cn、利用シャードの Lark オープンプラットフォームホスト、login.microsoftonline.com、graph.microsoft.com(政府クラウド相当を含む)、Teams ボットコネクタ URL を列挙し、テストコマンド付きで変更票を一枚にまとめます。 - Mac を有線で固定:ゲートウェイユーザのスリープを止め、NTP を強制し、NAT 後にベンダーから見える外向き IP を記録します。
- OpenClaw をループバックにバインド:TLS は nginx/Envoy または Zero Trust トンネルで終端し、
127.0.0.1:18789(または選定ポート)へ転送して素のリスナーをスキャナに晒しません。 - GUI なしで秘密を注入:SecretRef、launchd の
EnvironmentVariables、または Keychain 連携スクリプトを使い、テナントのアプリ秘密をopenclaw.json旁にコミットしません。 - 本番経路からベンダーチャレンジを完了:飛書/Lark のイベント URL と Teams メッセージングエンドポイントを、利用者が実際に通る DNS・証明書・プロキシチェーンと同じもので登録します。
- 認証とスロットルのスモーク:OpenClaw が使うのと同じトークン種で Graph の
/meまたはチャネル読み取りをスクリプト化し、Lark/飛書のテストイベントで署名ヘッダを確認します。 - 可観測性とゲームデイ:401/403/429 と再接続理由のカウンタを送出し、ベースライン後は Prometheus/Grafana 等で可視化しつつ、ローカルプロキシを落として SLO 内の自動復帰を確認します。外向き API と社内オーケストレーションが同時に詰まる越境チームは Trunk/Merge Queue とマルチリージョン物理 Mac のオーケストレーション閾値 も併せて見てください。
4. openclaw.json 断片(例示)
キー名は各ベンダー文書に合わせて置き換えてください。構造は単一ゲートウェイホストにチャネルを横並びに置くイメージです。
{
"gateway": {
"bind": "127.0.0.1:18789",
"publicBaseUrl": "https://openclaw-gateway.corp.example",
"logFormat": "jsonl"
},
"channels": {
"feishu": {
"appId": "${FEISHU_APP_ID}",
"appSecret": "${FEISHU_APP_SECRET}",
"encryptKey": "${FEISHU_ENCRYPT_KEY}",
"verificationToken": "${FEISHU_VERIFICATION_TOKEN}"
},
"lark": {
"appId": "${LARK_APP_ID}",
"appSecret": "${LARK_APP_SECRET}",
"encryptKey": "${LARK_ENCRYPT_KEY}"
},
"teams": {
"tenantId": "${ENTRA_TENANT_ID}",
"clientId": "${TEAMS_BOT_APP_ID}",
"clientSecret": "${TEAMS_BOT_SECRET}",
"graphAudience": "https://graph.microsoft.com/"
}
},
"httpClient": {
"proxyUrl": "${CORP_HTTPS_PROXY}",
"respectRetryAfter": true,
"maxConcurrentGraphRequests": 4
}
}
セキュリティがグローバルな HTTP_PROXY を禁止する場合は、OpenClaw が対応していればチャネル別プロキシに分割するか、Mac と同一リージョンの明示フォワードプロキシ VM に集約します。
4.1 localhost への nginx TLS フロント例
server {
listen 443 ssl;
server_name openclaw-gateway.corp.example;
ssl_certificate /etc/ssl/internal/fullchain.pem;
ssl_certificate_key /etc/ssl/internal/privkey.pem;
location /feishu/events {
proxy_pass http://127.0.0.1:18789/feishu/events;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 120s;
}
location /teams/api/messages {
proxy_pass http://127.0.0.1:18789/teams/api/messages;
proxy_set_header Host $host;
proxy_read_timeout 120s;
}
}
5. 設計メモに貼れる数値
- JWT 時刻ずれ:Entra 発行トークンは Mac と権威時刻の間でおおよそ ±300 秒のスキューを想定してください。これを超えると秘密が正しくても Graph は 401 を返します。
- 429 対応:Graph が 429 を返したら
Retry-Afterを尊重し、ファンアウト負荷では指数バックオフの基底を 1〜2 秒程度にし、フルジッターを載せるのが現実的です。 - プロキシのアイドル窓:多くの企業フォワードプロキシは静かな TLS を 300〜900 秒で切ります。パケットキャプチャで観測した最小アイドルより十分短い間隔でキープアライブを打ってください。
6. FAQ:HTTP 401 と 429
6.1 Microsoft Graph の 401
トークン要求 URL のテナント ID、ボットが正しい各国クラウドホストを使っているか、スコープ変更後の管理者同意再取得、サービスプリンシパルの条件付きアクセス除外を確認します。iat/exp と Mac 上の sntp -sS time.apple.com を突き合わせてください。
6.2 Graph またはオープンプラットフォームの 429
チャネル同期ジョブの並列度を下げ、ディレクトリ ID など安定参照はキャッシュし、Webhook が置けるところでは密なポーリングを避けます。複数プロダクトが同一アプリ登録を共有している場合、マーケ実験が CI 通知を飢餓させないよう Teams トラフィックの分離を検討します。
6.3 飛書/Lark の検証失敗
暗号化キーと検証トークンはセットでローテし、チャレンジエコーは JSON パース前の生ボディバイトで行います。開発者コンソールのコールバック URL が公開ホスト名の TLS SAN と一致しているか(末尾スラッシュの規律も含め)を再確認してください。
7. このゲートウェイに Mac mini 級が向く理由
macOS には launchd による確実な再起動、ボット秘密向けの Keychain 連携、TLS とプロキシ問題を既に慣れた Unix ツールチェーンで切る文化があります。Apple Silicon の Mac mini はアイドル時わずか数ワット級の消費電力と、ノートを負荷で回したときのファンカーブなしに、WebSocket ファンアウトと軽量な Graph バッチを同時に捌ける持続 CPU 余裕を両立しやすいです。
Gatekeeper、System Integrity Protection、FileVault の重ね掛けは、共有ハイパーバイザ上の即席 Windows VM と比べて無人ゲートウェイのリスクを下げます。単一プロセスが飛書・Lark・Teams の資格情報を同時に抱える構成では特に効きます。
自前調達とラック作業をせずに、この OpenClaw フットプリントを安定した金属上で揃えたい場合は、許可リスト・トークン・可観測性のベースラインを初日から本番と揃えられる ZoneMac の専用リモート Mac mini から始めるのが合理的です。今すぐ一台を確保し、越境チャット基盤の信頼境界を一か所に閉じてください。
飛書/Lark/Teams 用の据え置きゲートウェイ Mac をお探しですか?
外向き IP が読みやすく、有線プロファイルと相性のよい物理 Mac mini ノードで、OpenClaw と可観測性サイドカーを同居させられます。