배포 가이드 2026-04-28 약 12분

2026년 OpenClaw 페이슈·Lark·Microsoft Teams 연동: ZoneMac 원격 물리 Mac 게이트웨이에서 재현 가능한 인증·장연결·기업 이그레스 배포 Runbook(openclaw.json 조각 + 401/429 FAQ)

중국·글로벌이 나뉜 협업 환경에서 OpenClaw를 페이슈(飞书)·국제 Lark·Microsoft Teams에 붙일 때, 조건부 액세스·만료된 토큰·프록시 유휴 절단이 겹치면 운영은 며칠째 원인을 못 찾습니다. 이 런북은 누가 어디서 깨지는지, 이그레스·신뢰 종료 비교 표, ZoneMac식 원격 물리 Mac 기준 7단계, 설명용 openclaw.json 조각, 인용 가능한 수치, 401/429 FAQ를 한 흐름으로 묶습니다. 장시간 게이트웨이 안정화 관점은 2026년 OpenClaw 장시간 운용을 위한 Mac mini 안정성 최적화 가이드와 함께 보세요.

2026 OpenClaw 페이슈 Lark Microsoft Teams 원격 Mac 게이트웨이 연동

0. 서론: 세 플랫폼, 세 가지 신뢰 경계

헤드리스 원격 Mac에 OpenClaw를 두면 페이슈와 Lark는 안정적인 콜백 검증올바른 테넌트에 묶인 앱 자격 증명을 기대하고, Teams와 Microsoft Graph는 OAuth2·국가별 클라우드 엔드포인트·공격적인 스로틀을 추가합니다. 한편 보안팀은 이그레스 허용 목록과 TLS 검사 프록시를 배포하는데, JWT 만료·SNAT IP·프록시 유휴 타이머를 상관하지 않으면 이것이 곧 무작위 401의 날처럼 보입니다.

이 글은 뚜껑이 닫히지 않는 개발자 노트북이 아니라, 실제 사용자가 대화하는 리전에 가까운 ZoneMac급 전용 물리 Mac에 작은 HA 쌍의 게이트웨이 프로세스를 두는 전제입니다. 동일 주제의 영어판은 OpenClaw Feishu / Lark / Teams gateway runbook (English)에서 확인할 수 있습니다.

1. 기업에서 실제로 부딪히는 제약

  1. 분리된 테넌트 정체성: 국내 페이슈·국제 Lark·Teams용 Entra ID는 같은 앱 디렉터리를 거의 공유하지 않습니다. 스테이징에서 되던 자격 증명이 프로덕션에서 authority URL과 검증 시크릿이 어긋나 불투명한 401을 냅니다.
  2. 이그레스 허용 목록과 SNAT 드리프트: 벤더는 웹훅이나 요금 정책을 위해 아웃바운드 IP를 고정하길 원합니다. 이그레스가 순환하는 원격 Mac 풀은 검증 실패와 중복 이벤트 재시도를 동시에 만듭니다.
  3. 장수명 세션 vs 프록시 유휴 절단: 봇 SDK는 WebSocket이나 청크 HTTP를 길게 유지하고, 기업 포워드 프록시는 대략 5~15분 안쪽에서 조용한 흐름을 끊는 경우가 많습니다. keepalive와 PAC 인지 라우팅을 맞추지 않으면 재연결 폭풍이 납니다.
  4. 감사와 최소 권한: 플랫폼마다 원하는 스코프가 다릅니다—Graph의 ChannelMessage.Read.All, Lark 메시지 계열, 페이슈 이벤트 구독 등. 과도한 토큰은 보안 심사에서 걸리고, 부족한 토큰은 런타임에 403/404 잡음을 냅니다.

2. 의사결정 매트릭스: 신뢰를 어디서 끊을까

정지 Mac 게이트웨이 하나로 갈지, 리전별로 봇을 쪼갤지 논쟁할 때 쓰는 표입니다.

차원 단일 원격 Mac 게이트웨이 리전별 분리 봇
이그레스 IP 안정성 NetOps 티켓 한 장의 SNAT 허용 목록 여러 개·드리프트 위험
장연결 유선 호스트에서 keepalive 조정이 쉬움 움직이는 부품 증가·일관된 PAC 필요
침해 시 블라스트 반경 모든 채널이 프로세스 메모리를 공유 테넌트별 시크릿이 더 작음
429·쿼터 격리 시끄러운 루프 하나가 나머지를 굶길 수 있음 앱 등록 분리
운영 복잡도 launchd 유닛 하나·로그 한 스트림 N배 배포 파이프라인

3. 7단계 재현 런북(ZoneMac 원격 물리 Mac)

  1. 엔드포인트 인벤토리 고정: *.feishu.cn, open.feishu.cn, 샤드에 맞는 Lark 오픈플랫폼 호스트, login.microsoftonline.com, graph.microsoft.com(또는 정부·GCCH 동급), Teams 봇 커넥터 URL을 나열하고 테스트 명령과 함께 변경 티켓 한 장으로 제출합니다.
  2. Mac을 유선 전원에 고정: 게이트웨이 사용자에 대해 절전을 끄고, NTP를 강제하고, NAT 이후 벤더가 볼 이그레스 IP를 기록합니다.
  3. OpenClaw를 루프백에 바인딩: TLS는 nginx/Envoy 또는 Zero Trust 터널에서 종료하고 127.0.0.1:18789(또는 선택 포트)로 넘겨 스캐너가 원시 리스너에 닿지 않게 합니다.
  4. GUI 없이 시크릿 주입: SecretRef, launchd EnvironmentVariables, Keychain 기반 스크립트를 사용하고—openclaw.json 옆에 테넌트 앱 시크릿을 평문 커밋하지 마세요.
  5. 프로덕션 경로로 벤더 챌린지 완료: 페이슈·Lark 이벤트 URL과 Teams 메시징 엔드포인트를 사용자가 실제로 타는 DNS·인증서·프록시 체인과 동일하게 등록합니다.
  6. 인증과 스로틀 스모크: OpenClaw가 쓰는 것과 동일한 토큰 클래스로 Graph 채널 읽기 등을 스크립트하고, Lark·페이슈 테스트 이벤트로 서명 헤더를 확인합니다.
  7. 관측과 게임데이: 401·403·429와 재연결 사유 카운터를 보내고, 베이스라인 후 원격 물리 Mac OpenClaw 게이트웨이의 Prometheus·Grafana 메트릭을 참고해 로컬 프록시를 끊고 SLO 창 안에 자동 복구되는지 검증합니다.

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초 사이에서 끊습니다. 캡처에서 관측한 최소 유휴 타임아웃보다 훨씬 짧게 keepalive ping을 쏘세요.

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는 캐시하며, 웹훅이 있는 곳에서는 촘촘한 폴링을 피하고 읽기 위주 크론을 분산합니다. 하나의 앱 등록을 여러 제품이 공유하면 마케팅 실험이 CI 알림을 굶길 수 있으니 Teams 트래픽을 격리하는 방안을 검토하세요.

6.3 페이슈·Lark 검증 실패

암호화 키와 검증 토큰을 함께 순환하고, 챌린지 에코는 JSON 파싱 전 원시 바디 바이트로 처리합니다. 개발자 콘솔에 등록한 콜백 URL이 공개 호스트의 TLS SAN과 일치하는지—후행 슬래시 규율까지—다시 확인하세요.

7. 이 게이트웨이에 Mac mini급 하드웨어가 맞는 이유

macOS는 launchd로 안정적인 재시작, 봇 시크릿용 Keychain 연동, Apple 플랫폼 팀이 이미 익숙한 TLS·프록시 디버깅용 Unix 툴체인을 제공합니다. Apple Silicon Mac mini는 유휴 전력이 대략 수 W 수준인 경우가 많으면서도, 동시 WebSocket 팬아웃과 가벼운 Graph 배치를 노트북 부하 곡선 없이 감당합니다.

Gatekeeper, 시스템 무결성 보호(SIP), FileVault는 단일 프로세스가 페이슈·Lark·Teams 자격 증명을 모두 쥘 때, 공유 하이퍼바이저 위의 임시 Windows VM보다 무인 게이트웨이 리스크를 낮추는 데 유리합니다.

직접 미니를 조달해 랙에 올리기 전에, Mac mini M4 같은 전용 원격 노드로 이 OpenClaw 자리부터 고정해 보세요. ZoneMac에서 베어메탈 macOS를 빌리면 허용 목록·토큰·관측 베이스라인을 첫날부터 프로덕션과 맞출 수 있습니다.

기간 한정

페이슈·Lark·Teams용 정지 게이트웨이 Mac이 필요하신가요?

ZoneMac 클라우드 Mac mini는 예측 가능한 이그레스, 유선 친화 프로파일, OpenClaw와 관측 사이드카를 같은 호스트에 두기에 적합한 베어메탈 macOS를 제공합니다.

종량제 빠른 개통 안전·신뢰
macOS 클라우드 렌탈 초저가 한정 진행
지금 구매