목록으로 돌아가기

블로그

원격 AI 코딩의 보안 모범 사례

AI 에이전트가 코드베이스에 쓰기 권한을 갖고 네트워크를 통해 제어할 때, 보안 결정이 중요합니다. 올바른 선택을 하는 방법을 소개합니다.

게시일 태그: 보안 / 가이드 / 모범사례 / seo
블로그

이 카테고리의 제품 및 엔지니어링 업데이트를 확인하세요.

카테고리 보기

AI 코딩 에이전트를 원격으로 실행하면 책상에 앉아 있을 때와는 다른 보안 고려사항이 생깁니다. 에이전트는 코드베이스에 접근하고, 명령을 실행하고, 파일을 수정할 수 있습니다. 휴대폰과 Mac 사이의 네트워크 경로는 잠재적으로 신뢰할 수 없는 영역을 거칩니다.

이것이 원격 AI 코딩을 피할 이유는 아닙니다. 위협 모델을 이해하고 정보에 기반한 결정을 내릴 이유입니다. 대부분의 위험은 간단한 실천으로 관리할 수 있습니다.

위협 모델

구체적 대응에 앞서, 보호 대상을 이해합니다:

자산:

  • 소스 코드(지적 재산, 설정 파일의 시크릿)
  • 개발 환경(명령 실행 능력)
  • Mac의 git 자격 증명과 SSH 키
  • 코드가 사용하는 서비스의 API 키

위협 행위자:

  • 노출된 서비스를 스캔하는 기회주의적 공격자
  • 공유 WiFi의 네트워크 도청자
  • 휴대폰을 찾거나 훔친 사람
  • 사용 중인 도구의 공급망 공격

공격 면:

  • 휴대폰과 Mac 간의 네트워크 연결
  • 인증 메커니즘
  • AI 에이전트의 파일시스템 권한
  • Mac에서 실행되는 서버 프로세스

레이어 1: 네트워크 보안

암호화된 연결 사용

LAN 모드(ws://): 트래픽이 암호화되지 않습니다. 집의 WiFi에서는 트래픽이 로컬 네트워크를 벗어나지 않으므로 허용 가능합니다. 공유 또는 공개 네트워크에서는 허용되지 않습니다.

Cloudflare Tunnel(wss://): TLS로 트래픽이 암호화됩니다. 인터넷을 거치는 모든 연결에 사용하세요. 터널은 휴대폰과 Cloudflare 엣지 사이, Cloudflare와 Mac 사이를 암호화합니다.

기본 원칙: 자신이 통제하는 네트워크(집, 사무실)에서는 LAN 모드로 충분합니다. 그 외에는 Cloudflare Tunnel을 사용하세요.

원시 포트를 노출하지 마세요

라우터에서 포트 8765(또는 다른 포트)를 Mac으로 포워딩하지 마세요. 이는 중간 보호 없이 서버를 인터넷에 직접 노출합니다.

Cloudflare Tunnel은 이를 완전히 회피합니다 — Mac이 Cloudflare로 아웃바운드 연결을 시작합니다. 인바운드 포트가 필요 없습니다.

Mac 앱에는 방화벽 감지 기능이 포함되어 방화벽 구성에 대한 경고를 표시합니다. Mac의 방화벽을 스텔스 모드로 활성화된 상태로 유지하세요.

레이어 2: 인증

API 키 설정

Tactic Remote는 WebSocket 연결에 API 키 인증을 사용합니다:

  • LAN 연결: API 키는 선택 사항입니다. 로컬 네트워크가 신뢰 경계 역할을 합니다.
  • Cloudflare Tunnel 연결: API 키가 필수입니다. 서버가 인증되지 않은 연결을 거부합니다.

API 키는 WebSocket 핸드셰이크 중 Sec-WebSocket-Protocol 헤더를 통해 전송됩니다. wss://에서는 이것이 암호화됩니다.

API 키 모범 사례

  1. 생성된 키를 사용하세요. Mac 앱이 32자 랜덤 키를 생성합니다. 수동으로 선택할 어떤 비밀번호보다 강력합니다.
  2. 안전하게 전달하세요. QR 코드 기능으로 직접 대면하여 iPhone에 키를 전달하세요. 이메일, Slack, SMS로 보내지 마세요.
  3. 주기적으로 교체하세요. 키가 유출되었을 수 있다면 Mac 앱에서 새 키를 생성하고 iPhone을 업데이트하세요.
  4. 재사용하지 마세요. Tactic Remote API 키를 다른 서비스에 사용하지 마세요. 단일 목적의 자격 증명입니다.

속도 제한

서버에는 반복된 인증 실패 시도를 억제하는 속도 제한 미들웨어가 포함됩니다. 이는 API 키에 대한 무차별 대입 공격을 방어합니다. 32자 랜덤 키로는 무차별 대입이 계산적으로 불가능하지만, 속도 제한은 심층 방어를 추가합니다.

레이어 3: 접근 제어

경로 제한

Tactic Remote는 CLAUDE_REMOTE_ALLOWED_PATH 환경 변수를 지원합니다. 이는 Claude Code가 접근할 수 있는 디렉토리를 제한합니다. 코드 디렉토리로 설정하세요:

export CLAUDE_REMOTE_ALLOWED_PATH=/Users/you/code

이 설정 없이는 Claude Code가 전체 홈 디렉토리에 접근합니다(기본 동작). 경로 제한은 문제 발생 시 피해 범위를 줄입니다.

Claude Code 권한

Claude Code 자체에 권한 시스템이 있습니다. Tactic Remote에서 두 가지 모드를 사용할 수 있습니다:

  1. 표준 모드: claude — Claude Code가 위험한 작업(파일 삭제, 낯선 명령 실행) 전에 승인을 요청합니다
  2. 권한 건너뛰기 모드: claude --dangerously-skip-permissions — Claude Code가 승인 없이 실행합니다. 빠르지만 안전장치가 없습니다.

원격 사용 권장: 항상 표준 모드를 사용하세요. 승인 프롬프트는 원격에서 특히 유용합니다. iPhone에서 제안된 작업을 검토하고 Y/N을 탭할 수 있기 때문입니다. 권한을 건너뛰면 Claude가 여러분의 인지 없이 무엇이든 할 수 있습니다 — 직접 보고 있지 않을 때 위험합니다.

서버 측 유효성 검사

Tactic Remote 서버는 모든 수신 명령을 검증합니다. lib/validators.js 모듈이 확인하는 항목:

  • 명령 형식의 정확성
  • 경로 순회 시도
  • 입력 길이 제한

lib/execSafe.js 모듈은 명령 실행을 안전 검사로 감쌉니다. 이것이 Claude Code 자체 권한을 대체하지는 않지만, 서버 레벨에서 방어 계층을 추가합니다.

레이어 4: 물리적 및 기기 보안

Mac 보안

Mac이 실행 엔진입니다. 누군가 물리적 접근을 얻으면:

  • 모든 코드에 접근 가능
  • Claude Code를 직접 제어 가능
  • Mac 앱에서 API 키 읽기 가능

대응:

  • FileVault 활성화(전체 디스크 암호화)
  • 강력한 로그인 비밀번호 사용
  • 자동 화면 잠금 활성화(5분 이내)
  • 부재 중 서버를 실행하려면 Mac이 물리적으로 안전한 장소에 있는지 확인

iPhone 보안

iPhone이 제어 면입니다. 누군가 잠금 해제된 폰에 접근하면:

  • Tactic Remote를 통해 Mac에 명령 전송 가능
  • API 키를 포함한 연결 설정 읽기 가능

대응:

  • Face ID 또는 강력한 암호 활성화
  • iOS를 최신 상태로 유지
  • 잠금 해제된 폰을 방치하지 않기

레이어 5: 운영 보안

프롬프트에 넣지 말아야 할 것

휴대폰에서 Claude Code에 지시를 보낼 때, 프롬프트가 대화 컨텍스트의 일부가 된다는 점을 기억하세요. 포함하지 말아야 할 것:

  • 프롬프트 내의 비밀번호나 API 키("API 키 abc123을 사용해서...")
  • 데이터베이스 자격 증명
  • 사용자나 고객의 개인 정보

대신 환경 변수명으로 참조하세요: "STRIPE_SECRET_KEY 환경 변수에서 API 키를 사용하세요."

승인 전 검토

Claude Code가 승인을 요청할 때(Y/N 프롬프트), Y를 탭하기 전에 무엇을 하려는지 읽으세요. 원격에서는 주의가 분산될 수 있으므로 특히 중요합니다. 일반적인 승인 요청:

  • 파일 삭제
  • 셸 명령 실행
  • 패키지 설치
  • 설정 파일 수정

간단한 검토에 몇 초만 걸리며 의도하지 않은 작업을 방지합니다.

이벤트 로그 모니터링

Mac 앱은 모든 hook 이벤트의 이벤트 로그를 관리합니다. 주기적으로 검토하여 본인의 세션과 명령만 나타나는지 확인하세요. 예상치 못한 활동은 무단 접근을 의미할 수 있습니다.

위협 시나리오와 대응

시나리오: 휴대폰 분실 또는 도난

위험: 공격자가 저장된 연결 설정으로 Tactic Remote에 접근.

대응:

  1. Mac에서 즉시 새 API 키 생성(기존 키 무효화)
  2. 선택적으로 상황이 해결될 때까지 서버 중단
  3. 복구할 수 없다면 원격으로 폰 초기화

시나리오: API 키 유출

위험: 누군가가 터널 URL과 API 키를 보유.

대응:

  1. Mac 앱에서 새 API 키 생성
  2. 터널 URL도 노출되었다면 cloudflared 재시작(새 랜덤 URL 할당)
  3. 이벤트 로그에서 무단 세션 활동 확인
  4. 최근 git 히스토리에서 예상치 못한 커밋 검토

시나리오: 신뢰할 수 없는 WiFi 네트워크

위험: 네트워크 도청, 중간자 공격.

대응: 설계상 처리됩니다. Cloudflare Tunnel은 TLS를 사용하므로 트래픽이 암호화됩니다. 침해된 네트워크에서도 공격자는 암호화된 WebSocket 프레임만 볼 수 있고, 터미널 내용은 보지 못합니다.

시나리오: Claude Code의 의도하지 않은 변경

위험: AI 에이전트가 예상하지 못한 것을 수정.

대응:

  1. 휴대폰에서 Ctrl+C로 Claude 중단
  2. 세션에서 git diff로 변경사항 검토
  3. 필요하면 되돌리기: git checkout . 또는 git reset
  4. git 버전 관리가 존재하는 이유 — 안전망입니다

보안 체크리스트

원격 작업 시작 전:

  • 인터넷 접근용 Cloudflare Tunnel 활성화
  • API 키 설정(32자 이상 랜덤 문자열)
  • QR 코드로 API 키 전달(인터넷 경유 아님)
  • Mac 방화벽 활성화
  • Mac FileVault 활성화
  • Mac 자동 잠금 설정
  • iPhone 암호/Face ID 활성화
  • Claude Code 표준 모드로 실행(--dangerously-skip-permissions 아님)
  • 파일시스템 접근 제한을 위한 CLAUDE_REMOTE_ALLOWED_PATH 설정
  • 작업 시작 전 복구 지점으로 최근 git commit

Tactic Remote 사용해 보기

휴대전화로 코딩 에이전트를 원격 제어하세요

Mac, Windows, Linux 컴퓨터의 Claude Code, Codex 등에 연결하세요. iPhone이나 iPad에서 진행 상황을 확인하고 다음 요청을 보낼 수 있습니다.