Cron Jobs부터 보안 설정까지 - 안전하게 AI 비서 운영하기
1편에서는 OpenClaw의 개념과 Docker 설치, 채널 연결 방법을 살펴보았습니다.
이제 2편에서는 OpenClaw를 실제 운영 환경에서 활용하기 위한 핵심 설정들을 다룹니다. Cron Jobs를 통한 자동화 설정, Sandbox를 활용한 보안 강화, VPS 배포 방법, 그리고 반드시 알아야 할 보안 위험과 대응책까지 상세하게 안내해 드리겠습니다. 특히 보안 관련 내용은 OpenClaw를 안전하게 사용하기 위해 반드시 숙지해야 할 필수 정보이므로, 끝까지 주의 깊게 읽어주시기 바랍니다.

목 차
1. Cron Jobs와 자동화
OpenClaw의 Cron Jobs 기능은 정해진 시간에 자동으로 작업을 수행하게 해주는 강력한 스케줄링 시스템입니다. 매일 아침 일정과 이메일을 요약받거나, 주기적으로 웹사이트를 모니터링하거나, 특정 조건에서 알림을 받는 등 다양한 자동화 시나리오를 구현할 수 있습니다. 이 기능을 활용하면 사용자가 직접 요청하지 않아도 OpenClaw가 미리 정해진 작업을 수행하여 결과를 전달해주므로, 진정한 의미의 "자율 에이전트"로서 동작하게 됩니다.
Cron Jobs 기본 개념
Cron Job은 크게 "언제 실행할 것인가"와 "무엇을 할 것인가"의 두 가지 요소로 구성됩니다. 시간 설정은 Linux 시스템에서 널리 사용되는 표준 Cron 표현식(5-field)을 사용하며, 실행할 작업은 자연어 메시지로 지정합니다. 이러한 방식 덕분에 복잡한 스크립트를 작성할 필요 없이 "오늘 일정 알려줘"와 같은 일상적인 문장으로 자동화 작업을 정의할 수 있습니다. 모든 Cron Job 데이터는 ~/.openclaw/cron/jobs.json 파일에 JSON 형태로 저장되며, Gateway가 시작될 때 이 파일을 로드하여 스케줄에 따라 작업을 실행합니다.
아래 명령어는 가장 기본적인 Cron Job을 생성하는 예시입니다. 매일 아침 7시에 일정과 이메일을 요약해달라는 요청을 자동으로 실행합니다.
# 기본 Cron Job 생성 예시
docker compose --profile cli run --rm openclaw-cli cron add \
--name "아침 브리핑" \
--cron "0 7 * * *" \
--tz "Asia/Seoul" \
--message "오늘의 일정과 중요한 이메일을 요약해줘"
위 명령어에서
- --cron 옵션에 지정된 "0 7 * * *"는 Cron 표현식으로, 매일 오전 7시 0분에 실행하라는 의미입니다.
- --tz 옵션으로 시간대를 지정하지 않으면 시스템 기본 시간대가 사용되므로, 한국에서 사용하는 경우 반드시 "Asia/Seoul"을 명시하는 것이 좋습니다.
- --message 옵션에는 OpenClaw에게 전달할 자연어 명령을 작성하며, 이 메시지가 지정된 시간에 자동으로 전송됩니다.
생성된 Cron Job을 확인하는 명령어입니다.
# 생성된 Cron Job 목록 확인
docker compose --profile cli run --rm openclaw-cli cron list
Cron 표현식의 각 필드는 다음과 같은 의미를 가지며, 이를 조합하여 다양한 실행 주기를 설정할 수 있습니다. 처음에는 복잡해 보일 수 있지만, 몇 가지 패턴만 익히면 쉽게 활용할 수 있습니다.
| 필드 | 위치 | 범위 | 설명 | 예시 |
| 분 | 1번째 | 0-59 | 실행할 분 | 0 = 정각, 30 = 30분 |
| 시 | 2번째 | 0-23 | 실행할 시간 (24시간 형식) | 7 = 오전 7시, 18 = 오후 6시 |
| 일 | 3번째 | 1-31 | 실행할 날짜 | 1 = 매월 1일, 15 = 매월 15일 |
| 월 | 4번째 | 1-12 | 실행할 월 | 1 = 1월, * = 매월 |
| 요일 | 5번째 | 0-6 | 실행할 요일 | 0 = 일요일, 1 = 월요일, 5 = 금요일 |
[!] 참고: 요일은 0부터 시작하며, 0이 일요일입니다. 일부 시스템에서는 7도 일요일로 인식하지만, 표준적으로 0-6을 사용하는 것이 안전합니다.
Cron vs Heartbeat 비교
OpenClaw에는 Cron 외에도 Heartbeat라는 주기적 실행 메커니즘이 있습니다. 두 기능은 비슷해 보이지만 용도와 동작 방식이 다르므로, 차이점을 이해하면 상황에 맞는 적절한 선택을 할 수 있습니다. Cron은 정확한 시간에 특정 작업을 실행하는 "예약 실행" 방식이고, Heartbeat는 OpenClaw가 주기적으로 깨어나서 할 일이 있는지 스스로 판단하는 "프로액티브 모니터링" 방식입니다.
| 특성 | Cron Jobs | Heartbeat |
| 실행 시점 | 정확한 시간에 실행 (예: 매일 7시) | 주기적인 상태 체크 (예: 5분마다) |
| 용도 | 예약된 작업 수행 (브리핑, 보고서 생성) | 프로액티브 모니터링 (새 이메일, 일정 알림) |
| 세션 | 격리된 세션 또는 메인 세션 선택 가능 | 항상 메인 세션에서 실행 |
| 컨텍스트 | 작업별로 독립적인 컨텍스트 | 전체 대화 히스토리가 포함된 컨텍스트 |
| 메시지 | 사용자가 정의한 메시지 전달 | 시스템 이벤트로 에이전트 깨우기 |
Heartbeat는 설정 파일에서 활성화하면 OpenClaw가 주기적으로 "깨어나서" 할 일이 있는지 확인합니다. 예를 들어 새로운 이메일이 도착했는지, 캘린더에 다가오는 일정이 있는지, 모니터링 중인 웹사이트에 변화가 있는지 등을 스스로 체크하고 필요시 사용자에게 알림을 보냅니다. 이 기능은 에이전트가 사용자의 요청을 기다리지 않고 선제적으로 행동한다는 점에서 진정한 "AI 비서"의 모습에 가깝습니다.
Heartbeat 설정은 ~/.openclaw/openclaw.json 파일에서 다음과 같이 구성할 수 있습니다.
{
"agents": {
"defaults": {
"heartbeat": {
"enabled": true,
"intervalMinutes": 15,
"quietHours": {
"start": "23:00",
"end": "07:00"
}
}
}
}
}
위 설정에서 intervalMinutes는 Heartbeat 실행 주기를 분 단위로 지정하며, quietHours는 방해금지 시간대를 설정합니다. 야간에는 불필요한 알림을 방지하기 위해 quietHours를 설정하는 것이 좋습니다. Heartbeat가 너무 자주 실행되면 API 비용이 증가하므로, 15분에서 30분 정도의 간격을 권장합니다.
실용적인 Cron Job 예시
다양한 활용 시나리오에 맞는 Cron Job 설정 예시를 살펴보겠습니다. 각 예시는 실제 업무 환경에서 유용하게 사용할 수 있는 자동화 패턴입니다. 명령어가 길어 보이지만, 각 옵션의 의미를 이해하면 자신의 필요에 맞게 쉽게 수정할 수 있습니다.
예시 1 | 매일 아침 브리핑 결과를 채널 전송
가장 많이 사용되는 패턴으로, 매일 아침 일정과 이메일을 요약하여 특정 채널로 전송합니다. --deliver 옵션과 --channel, --to 옵션을 사용하면 결과를 웹 UI가 아닌 Telegram이나 Slack으로 직접 받을 수 있습니다.
docker compose --profile cli run --rm openclaw-cli cron add \
--name "Morning Brief" \
--cron "0 7 * * 1-5" \
--tz "Asia/Seoul" \
--session isolated \
--message "오늘 일정과 중요 이메일을 요약해줘. 간결하게 핵심만 정리해줘." \
--deliver \
--channel telegram \
--to "user:123456789"
위 예시에서 --cron "0 7 * * 1-5"는 월요일부터 금요일까지(1-5) 오전 7시에 실행하라는 의미입니다. 주말에는 브리핑이 필요 없다면 이렇게 평일만 지정할 수 있습니다. --session isolated 옵션은 이 작업을 독립된 세션에서 실행하도록 하여, 메인 대화 히스토리에 영향을 주지 않습니다.
예시 2 | 매주 금요일 주간 보고서 생성
주간 업무를 정리하여 보고서를 생성하는 작업입니다. AI가 한 주간의 작업 기록을 분석하고 요약하여 문서로 만들어줍니다.
docker compose --profile cli run --rm openclaw-cli cron add \
--name "Weekly Report" \
--cron "0 17 * * 5" \
--tz "Asia/Seoul" \
--session isolated \
--message "이번 주 완료한 작업과 다음 주 계획을 정리해서 주간 보고서를 마크다운 형식으로 작성해줘. 파일로 저장하고 Slack #reports 채널에 공유해줘."
예시 3 | 시간당 웹사이트 모니터링
운영 중인 웹사이트나 서비스의 상태를 주기적으로 확인하고, 문제가 발생하면 즉시 알림을 받습니다.
docker compose --profile cli run --rm openclaw-cli cron add \
--name "Site Monitor" \
--cron "0 * * * *" \
--tz "Asia/Seoul" \
--session isolated \
--message "https://my-website.com 과 https://api.my-website.com/health 의 응답 상태를 확인해줘. 응답 시간이 3초를 초과하거나 오류가 발생하면 Telegram으로 알려줘."
예시 4 | 일회성 리마인더
특정 시간에 한 번만 실행되고 자동으로 삭제되는 리마인더입니다. --at 옵션으로 정확한 시간을 지정하고, --delete-after-run 옵션으로 실행 후 자동 삭제를 설정합니다.
docker compose --profile cli run --rm openclaw-cli cron add \
--name "Meeting Reminder" \
--at "2026-02-03T14:00:00+09:00" \
--session main \
--system-event "리마인더: 30분 후 팀 미팅이 있습니다. 회의 자료 준비하셨나요?" \
--wake now \
--delete-after-run
Cron Job 관리 명령어
생성된 Cron Job을 조회, 수정, 삭제하는 관리 명령어들입니다. 이 명령어들을 활용하면 설정 파일을 직접 편집하지 않고도 Cron Job을 효과적으로 관리할 수 있습니다.
먼저 현재 등록된 모든 Cron Job 목록을 확인하는 명령어입니다. 각 Job의 ID, 이름, 스케줄, 마지막 실행 시간 등을 확인할 수 있습니다.
# 모든 Cron Job 목록 보기
docker compose --profile cli run --rm openclaw-cli cron list
# 출력 예시:
# ID NAME CRON NEXT RUN LAST RUN
# abc123 Morning Brief 0 7 * * 1-5 2026-02-03 07:00 2026-02-02 07:00
# def456 Site Monitor 0 * * * * 2026-02-02 16:00 2026-02-02 15:00
특정 Cron Job을 테스트하거나 즉시 실행해야 할 때는 다음 명령어를 사용합니다. --force 옵션을 추가하면 스케줄과 관계없이 즉시 실행됩니다.
# 특정 Cron Job 즉시 실행 (테스트용)
docker compose --profile cli run --rm openclaw-cli cron run abc123 --force
# Cron Job 실행 이력 확인
docker compose --profile cli run --rm openclaw-cli cron runs --id abc123
Cron Job의 스케줄이나 메시지를 수정해야 할 때는 edit 명령어를 사용합니다. 전체를 다시 만들 필요 없이 특정 옵션만 변경할 수 있습니다.
# Cron Job 스케줄 수정 (7시에서 8시로 변경)
docker compose --profile cli run --rm openclaw-cli cron edit abc123 \
--cron "0 8 * * 1-5"
# Cron Job 메시지 수정
docker compose --profile cli run --rm openclaw-cli cron edit abc123 \
--message "오늘 일정을 간단히 알려줘"
더 이상 필요 없는 Cron Job은 remove 명령어로 삭제합니다. 삭제된 Job은 복구할 수 없으므로 주의가 필요합니다.
# Cron Job 삭제
docker compose --profile cli run --rm openclaw-cli cron remove abc123
[!] 주의: Cron Job은 LLM API 호출을 발생시키므로 비용이 발생합니다. 실행 주기가 짧은 Job을 많이 설정하면 예상보다 높은 API 비용이 청구될 수 있습니다. 예를 들어 1시간마다 실행되는 Job이 5개 있다면, 하루에 120번의 API 호출이 발생합니다. 처음에는 긴 주기로 시작하여 필요에 따라 점진적으로 조정하는 것이 좋습니다.
2. Sandbox 설정과 보안
OpenClaw의 Sandbox 기능은 AI 에이전트의 도구 실행을 Docker 컨테이너 내부로 격리하여 호스트 시스템을 보호하는 핵심 보안 기능입니다. OpenClaw는 파일 읽기/쓰기, 셸 명령 실행, 브라우저 제어 등 강력한 시스템 접근 권한을 가지므로, 악의적인 입력이나 실수로 인한 피해를 방지하기 위해 Sandbox 사용이 강력히 권장됩니다. 특히 그룹 채팅에서 사용하거나 이메일, 웹 콘텐츠 같은 외부 입력을 처리할 때는 Prompt Injection 공격에 노출될 수 있으므로, Sandbox 없이 운영하는 것은 매우 위험합니다.
Sandbox 모드 이해
Sandbox의 핵심 개념은 "Gateway는 호스트에서 실행하면서, 위험한 도구(bash, read, write, edit 등)만 Docker 컨테이너 안에서 실행"하는 것입니다. 이를 통해 AI 에이전트가 실행하는 명령이 아무리 위험해도 호스트 시스템에는 영향을 미치지 않습니다. 컨테이너 내부에서 파일을 삭제하거나 시스템을 변경해도, 그 영향은 컨테이너 내부에 국한되며 호스트의 파일 시스템이나 설정에는 전혀 영향이 없습니다.
flowchart TB
subgraph HOST["Host System (Mac Mini)"]
GW["OpenClaw Gateway<br/>(Node.js 프로세스)"]
CFG["~/.openclaw/<br/>(설정 파일, 메모리)"]
DOCKER["Docker Engine"]
end
subgraph SANDBOX["Docker Container (Sandbox)"]
EXEC["bash / exec<br/>(명령어 실행)"]
FS["격리된 File System<br/>(/workspace)"]
TOOLS["read / write / edit<br/>(파일 조작 도구)"]
end
GW -->|"도구 실행 요청"| DOCKER
DOCKER -->|"컨테이너 내부 실행"| EXEC
DOCKER -->|"컨테이너 내부 실행"| TOOLS
EXEC --> FS
TOOLS --> FS
GW <-->|"설정/메모리 접근"| CFG
위 다이어그램에서 볼 수 있듯이, Gateway 자체는 호스트에서 실행되어 설정 파일과 메모리에 접근하지만, 실제 명령어 실행과 파일 조작은 모두 격리된 Docker 컨테이너 내부에서 이루어집니다. 컨테이너 내부의 /workspace 디렉토리는 호스트의 실제 파일 시스템과 분리되어 있으므로, AI가 "모든 파일 삭제해"라는 명령을 받아도 컨테이너 내부의 파일만 삭제됩니다.
Sandbox 설정 옵션 상세
Sandbox 설정은 ~/.openclaw/openclaw.json 파일에서 구성합니다. 아래는 권장되는 보안 설정이 적용된 전체 구성 예시입니다. 각 옵션의 의미를 상세히 설명하겠습니다.
{
"agents": {
"defaults": {
"sandbox": {
"mode": "non-main",
"scope": "agent",
"workspaceAccess": "rw",
"workspaceRoot": "~/.openclaw/sandboxes",
"docker": {
"image": "openclaw-sandbox:bookworm-slim",
"workdir": "/workspace",
"readOnlyRoot": true,
"tmpfs": ["/tmp", "/var/tmp", "/run"],
"network": "none",
"user": "1000:1000",
"capDrop": ["ALL"],
"pidsLimit": 256,
"memory": "1g",
"memorySwap": "2g",
"cpus": 1,
"env": {
"LANG": "C.UTF-8"
}
},
"prune": {
"idleHours": 24,
"maxAgeDays": 7
}
}
}
},
"tools": {
"sandbox": {
"tools": {
"allow": [
"exec", "process", "read", "write", "edit",
"sessions_list", "sessions_history", "sessions_send",
"sessions_spawn", "session_status"
],
"deny": [
"browser", "canvas", "nodes", "cron",
"discord", "gateway", "elevated"
]
}
}
}
}
주요 설정 옵션의 의미를 표로 정리하면 다음과 같습니다. 각 옵션은 보안과 기능 사이의 균형을 조절하는 역할을 합니다.
| 옵션 | 가능한 값 | 설명 | 권장값 |
| mode | off / non-main / all | off: Sandbox 비활성화, non-main: 메인 세션 외 격리, all: 모든 세션 격리 | non-main |
| scope | session / agent / shared | session: 세션별 컨테이너 생성, agent: 에이전트별 컨테이너, shared: 모든 세션이 하나의 컨테이너 공유 | agent |
| workspaceAccess | none / ro / rw | none: 에이전트 워크스페이스 접근 불가, ro: 읽기 전용, rw: 읽기/쓰기 | rw |
| network | none / bridge / host | none: 네트워크 완전 차단, bridge: Docker 네트워크, host: 호스트 네트워크 사용 | none |
| readOnlyRoot | true / false | 컨테이너 루트 파일시스템 읽기 전용 설정 | true |
| pidsLimit | 숫자 | 컨테이너 내 최대 프로세스 수 제한 | 256 |
| memory | 문자열 | 컨테이너 메모리 제한 (예: "1g", "512m") | 1g |
mode 설정에서 "non-main"을 권장하는 이유는, 개인 DM 대화(메인 세션)에서는 신뢰할 수 있는 사용자만 대화하므로 어느 정도 자유도를 허용하고, 그룹 채팅이나 자동화 작업(비메인 세션)에서는 격리를 적용하여 보안을 강화하기 위함입니다. 완전한 보안이 필요하다면 "all"로 설정하여 모든 세션을 격리할 수 있습니다.
network 설정은 매우 중요합니다. "none"으로 설정하면 컨테이너 내부에서 외부 네트워크에 접근할 수 없으므로, 악의적인 명령이 외부로 데이터를 전송하는 것을 원천 차단합니다. 단, 일부 작업(웹 스크래핑, API 호출 등)에서 네트워크가 필요한 경우 "bridge"로 설정해야 하지만, 이 경우 보안 위험이 증가합니다.
Sandbox 이미지 빌드
Sandbox 기능을 사용하려면 먼저 Sandbox용 Docker 이미지를 빌드해야 합니다. OpenClaw 저장소에는 이를 위한 스크립트가 포함되어 있으며, 용도에 따라 세 가지 이미지를 선택할 수 있습니다.
# OpenClaw 저장소로 이동
cd openclaw
# 1. 기본 Sandbox 이미지 빌드 (최소 구성, 권장)
./scripts/sandbox-setup.sh
# 결과: openclaw-sandbox:bookworm-slim
# 2. 개발 도구가 포함된 Common 이미지 빌드
# Node.js, Python, Go, Rust 등 개발 환경 포함
./scripts/sandbox-common-setup.sh
# 결과: openclaw-sandbox-common:bookworm-slim
# 3. 브라우저가 포함된 이미지 빌드
# Chromium, Xvfb, noVNC 포함 (웹 자동화용)
./scripts/sandbox-browser-setup.sh
# 결과: openclaw-sandbox-browser:bookworm-slim
기본 Sandbox 이미지는 최소한의 도구만 포함하고 있어 가장 안전합니다. 개발 작업이 필요하다면 Common 이미지를, 웹 브라우저 자동화가 필요하다면 Browser 이미지를 사용(비권장)합니다. 이미지가 커질수록 잠재적인 보안 취약점도 증가하므로, 필요한 최소한의 이미지를 선택하는 것이 좋습니다.
특수한 도구나 환경이 필요한 경우 커스텀 Sandbox 이미지를 직접 작성할 수 있습니다. 아래는 Python 데이터 분석 환경이 포함된 커스텀 이미지 예시입니다.
# Dockerfile.sandbox-custom
FROM debian:bookworm-slim
# 메타데이터
LABEL maintainer="your-email@example.com"
LABEL description="Custom OpenClaw Sandbox with Python Data Analysis"
# 기본 도구 및 Python 설치
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
jq \
python3 \
python3-pip \
python3-venv \
&& rm -rf /var/lib/apt/lists/*
# Python 패키지 설치 (데이터 분석용)
RUN pip3 install --no-cache-dir --break-system-packages \
pandas \
numpy \
matplotlib \
requests
# 보안: 비루트 사용자 생성
RUN useradd -m -s /bin/bash -u 1000 sandbox
# 작업 디렉토리 설정
WORKDIR /workspace
RUN chown sandbox:sandbox /workspace
# 비루트 사용자로 전환
USER sandbox
# 기본 셸
CMD ["/bin/bash"]
위 Dockerfile을 빌드하고 설정에 적용하는 방법입니다.
# 커스텀 이미지 빌드
docker build -t my-openclaw-sandbox -f Dockerfile.sandbox-custom .
# 빌드 확인
docker images | grep my-openclaw-sandbox
빌드된 이미지를 사용하려면 openclaw.json에서 image 옵션을 변경합니다.
{
"agents": {
"defaults": {
"sandbox": {
"docker": {
"image": "my-openclaw-sandbox"
}
}
}
}
}
도구 허용/차단 정책
Sandbox 내에서 사용할 수 있는 도구를 세밀하게 제어할 수 있습니다. tools.sandbox.tools 설정에서 allow(허용)와 deny(차단) 목록을 정의하며, 중요한 규칙은 deny가 allow보다 항상 우선한다는 점입니다. 즉, 같은 도구가 양쪽 목록에 있으면 차단됩니다.
{
"tools": {
"sandbox": {
"tools": {
"allow": [
"exec",
"read",
"write",
"edit",
"process"
],
"deny": [
"browser",
"cron",
"gateway",
"elevated",
"canvas",
"nodes"
]
}
}
}
}
각 도구의 역할과 보안 위험 수준을 이해하면 적절한 정책을 수립할 수 있습니다.
도구 기능 보안 위험 권장 설정
| 도구 | 기능 | 보안 위험 | 권장 설정 |
| exec | 셸 명령어 실행 | 중간 (Sandbox 내 격리) | allow |
| read | 파일 읽기 | 낮음 | allow |
| write | 파일 쓰기 | 낮음 (Sandbox 내 격리) | allow |
| edit | 파일 편집 | 낮음 (Sandbox 내 격리) | allow |
| browser | 웹 브라우저 제어 | 높음 (호스트에서 실행) | deny |
| cron | Cron Job 관리 | 중간 | deny |
| gateway | Gateway 설정 변경 | 높음 | deny |
| elevated | 관리자 권한 작업 | 매우 높음 | deny |
[!] 중요: browser 도구를 Sandbox에서 허용하면 격리가 무력화됩니다. 브라우저는 Sandbox 컨테이너가 아닌 호스트 시스템에서 실행되기 때문입니다. browser 도구가 필요한 경우, 별도의 Browser Sandbox 이미지를 사용하고 해당 에이전트만 제한된 환경에서 운영해야 합니다.
Sandbox 컨테이너 관리
Sandbox 컨테이너는 자동으로 생성되고 관리되지만, 수동으로 상태를 확인하거나 정리해야 할 때도 있습니다. prune 설정을 통해 자동 정리 정책을 구성할 수 있습니다.
{
"agents": {
"defaults": {
"sandbox": {
"prune": {
"idleHours": 24,
"maxAgeDays": 7
}
}
}
}
}
위 설정에서 idleHours는 마지막 사용 후 일정 시간이 지나면 컨테이너를 제거하는 옵션이고, maxAgeDays는 생성 후 일정 기간이 지나면 무조건 제거하는 옵션입니다. 두 조건 중 하나라도 충족하면 컨테이너가 정리됩니다. 값을 0으로 설정하면 해당 조건이 비활성화됩니다.
현재 실행 중인 Sandbox 컨테이너를 확인하고 수동으로 관리하는 명령어입니다.
# 실행 중인 Sandbox 컨테이너 목록
docker ps --filter "name=openclaw-sandbox"
# 특정 Sandbox 컨테이너 로그 확인
docker logs openclaw-sandbox-agent-main
# Sandbox 컨테이너 수동 재생성
docker compose --profile cli run --rm openclaw-cli sandbox recreate --agent main
# 모든 Sandbox 컨테이너 정리
docker rm -f $(docker ps -aq --filter "name=openclaw-sandbox")
3. VPS 배포와 보안 강화
OpenClaw를 개인 컴퓨터에서 직접 실행하는 것은 보안상 매우 위험합니다. AI 에이전트가 시스템에 대한 높은 권한을 가지고 있으므로, Prompt Injection 공격이나 에이전트의 오작동으로 인해 개인 파일이 유출되거나 시스템이 손상될 수 있습니다. 별도의 VPS(Virtual Private Server)에 배포하면 개인 데이터가 있는 메인 시스템과 물리적으로 격리되어 훨씬 안전하게 운영할 수 있습니다. 이 섹션에서는 VPS 배포의 장점과 보안 강화 설정 방법을 상세히 설명합니다.
왜 VPS에서 실행해야 하는가
VPS 배포를 권장하는 이유는 크게 네 가지입니다.
- 첫째, 개인 컴퓨터의 민감한 데이터(사진, 문서, 비밀번호, 브라우저 기록 등)가 AI 에이전트에 노출되지 않습니다. OpenClaw는 파일 시스템 전체에 접근할 수 있으므로, 개인 컴퓨터에서 실행하면 이러한 정보가 위험에 노출됩니다.
- 둘째, VPS는 24시간 상시 운영이 가능하여 언제든지 메시징 앱을 통해 AI 비서에게 접근할 수 있습니다. 컴퓨터를 끄거나 절전 모드로 전환해도 OpenClaw는 계속 동작합니다.
- 셋째, 문제가 발생하더라도 VPS만 영향을 받고 개인 컴퓨터는 안전합니다. AI가 잘못된 명령을 실행하거나 해킹 시도가 있더라도 피해 범위가 VPS로 한정됩니다.
- 넷째, VPS 환경에서는 더 강력한 보안 설정(방화벽, 네트워크 격리, 모니터링)을 적용할 수 있습니다. 개인 컴퓨터에서는 사용 편의성 때문에 적용하기 어려운 보안 설정도 VPS에서는 자유롭게 구성할 수 있습니다.
아래 다이어그램은 VPS 기반 OpenClaw 배포의 권장 아키텍처를 보여줍니다.
flowchart TB
subgraph INTERNET["인터넷"]
USER["사용자<br/>(MacBook, 스마트폰)"]
TG["Telegram"]
DC["Discord"]
end
subgraph CF["Cloudflare"]
TUNNEL["Cloudflare Tunnel<br/>(암호화된 연결)"]
ZT["Zero Trust<br/>(추가 인증)"]
end
subgraph VPS["VPS (DigitalOcean / Mac Mini)"]
FW["방화벽<br/>(UFW)"]
subgraph DOCKER["Docker Network"]
CFD["cloudflared<br/>(터널 클라이언트)"]
NGINX["Nginx<br/>(리버스 프록시)"]
OC["OpenClaw<br/>Gateway"]
SANDBOX["Sandbox<br/>(격리 실행)"]
end
end
USER -->|"HTTPS"| TUNNEL
TUNNEL --> ZT
ZT --> CFD
CFD --> NGINX
NGINX --> OC
OC --> SANDBOX
TG -->|"Bot API"| OC
DC -->|"Bot API"| OC
보안 강화 Docker Compose 설정
VPS 환경에서 사용할 수 있는 보안이 강화된 Docker Compose 설정입니다. 이 설정은 컨테이너 권한 최소화, 리소스 제한, 네트워크 격리 등 프로덕션 환경에서 권장되는 보안 모범 사례를 모두 적용합니다.
# docker-compose.production.yml
version: '3.8'
services:
# OpenClaw Gateway 서비스
openclaw-gateway:
image: openclaw:local
container_name: openclaw-gateway
# 보안 강화 설정
security_opt:
- no-new-privileges:true # 권한 상승 방지
cap_drop:
- ALL # 모든 Linux capabilities 제거
cap_add:
- NET_BIND_SERVICE # 포트 바인딩에 필요한 최소 권한만
read_only: true # 루트 파일시스템 읽기 전용
# 임시 파일 시스템 설정 (필요한 경로만 쓰기 가능)
tmpfs:
- /tmp:noexec,nosuid,nodev,size=100m
- /var/tmp:noexec,nosuid,nodev,size=50m
# 환경 변수 (민감 정보는 .env 파일에서 로드)
environment:
HOME: /home/node
NODE_ENV: production
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
# 볼륨 마운트 (설정과 워크스페이스만)
volumes:
- openclaw-config:/home/node/.openclaw:rw
- openclaw-workspace:/home/node/.openclaw/workspace:rw
# 포트 바인딩 (localhost만, 외부 직접 접근 차단)
ports:
- "127.0.0.1:18789:18789"
# 내부 네트워크만 사용
networks:
- openclaw-internal
# 리소스 제한 (DoS 방지)
deploy:
resources:
limits:
memory: 2G
cpus: '2'
reservations:
memory: 512M
# 재시작 정책
restart: unless-stopped
# 헬스 체크
healthcheck:
test: ["CMD", "node", "dist/index.js", "health", "--token", "${OPENCLAW_GATEWAY_TOKEN}"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
# Cloudflare Tunnel (외부 접근용)
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
command: tunnel run
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
networks:
- openclaw-internal
restart: unless-stopped
depends_on:
- openclaw-gateway
# 네임드 볼륨 (데이터 영속성)
volumes:
openclaw-config:
driver: local
openclaw-workspace:
driver: local
# 내부 네트워크 (격리)
networks:
openclaw-internal:
driver: bridge
internal: false # Telegram/Discord API 접근을 위해 외부 통신 허용
위 설정에서 사용된 주요 보안 옵션을 설명합니다.
| 옵션 | 설명 | 효과 |
| no-new-privileges | 프로세스가 추가 권한을 얻는 것을 방지 | setuid 바이너리 등을 통한 권한 상승 차단 |
| cap_drop: ALL | 모든 Linux capabilities 제거 | 컨테이너의 커널 수준 권한 최소화 |
| read_only: true | 루트 파일시스템 읽기 전용 | 악성 코드 설치/수정 방지 |
| tmpfs | 메모리 기반 임시 파일시스템 | 디스크 쓰기 없이 임시 파일 사용 |
| 127.0.0.1:18789:18789 | localhost 바인딩 | 외부에서 직접 접근 불가 |
| resources.limits | 메모리/CPU 제한 | 리소스 고갈 공격(DoS) 방지 |
환경 변수 파일(.env)을 함께 생성해야 합니다. 이 파일에는 민감한 정보가 포함되므로 권한을 제한하고 Git에 커밋하지 않도록 주의합니다.
# .env 파일 생성
cat > .env << 'EOF'
# OpenClaw 설정
OPENCLAW_GATEWAY_TOKEN=your-very-long-random-token-here-at-least-32-chars
ANTHROPIC_API_KEY=sk-ant-api03-your-api-key-here
# Cloudflare Tunnel (선택사항)
CLOUDFLARE_TUNNEL_TOKEN=your-tunnel-token-here
# 추가 채널 (필요시)
# TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
# DISCORD_BOT_TOKEN=your-discord-bot-token
EOF
# 파일 권한 제한 (소유자만 읽기 가능)
chmod 600 .env
보안 하드닝 체크리스트
VPS에 OpenClaw를 배포할 때 반드시 확인해야 할 보안 항목들을 체크리스트로 정리했습니다. 각 항목을 하나씩 확인하며 설정하시기 바랍니다.
| 분류 | 항목 | 설정 방법 | 중요도 |
| 컨테이너 | 비루트 실행 | Dockerfile에서 USER 지정 | 필수 |
| 컨테이너 | 읽기 전용 루트 | read_only: true | 필수 |
| 컨테이너 | 권한 최소화 | cap_drop: ALL + 필요한 것만 cap_add | 필수 |
| 컨테이너 | 리소스 제한 | deploy.resources.limits 설정 | 권장 |
| 네트워크 | localhost 바인딩 | 127.0.0.1:port:port 형식 | 필수 |
| 네트워크 | 방화벽 설정 | UFW로 불필요한 포트 차단 | 필수 |
| 네트워크 | Cloudflare Tunnel | 직접 포트 노출 대신 터널 사용 | 권장 |
| 인증 | Gateway 토큰 | 32자 이상 랜덤 문자열 | 필수 |
| 인증 | Zero Trust | Cloudflare Access 설정 | 권장 |
| 인증 | DM 페어링 | dmPolicy: pairedOnly | 필수 |
| 데이터 | API 키 분리 | .env 파일, chmod 600 | 필수 |
| 데이터 | 볼륨 권한 | 적절한 소유자/권한 설정 | 권장 |
| 모니터링 | 헬스체크 | healthcheck 설정 | 권장 |
| 모니터링 | 로그 수집 | 중앙 로깅 시스템 연동 | 선택 |
4. 실전 활용 사례
OpenClaw는 다양한 실무 시나리오에서 활용될 수 있습니다. 이 섹션에서는 개발자 워크플로우 자동화, 이메일 관리, 스마트홈 제어, 그리고 n8n 워크플로우와의 연동 등 실제로 유용한 활용 사례들을 구체적인 대화 예시와 함께 소개합니다. 각 사례는 실제 업무 환경에서 검증된 패턴을 바탕으로 작성되었습니다.
개발자 워크플로우 자동화
개발자들 사이에서 OpenClaw가 인기를 끄는 가장 큰 이유는 코딩 관련 자동화 능력입니다. Telegram으로 간단한 요청을 보내면 OpenClaw가 테스트 실행, 코드 분석, 버그 수정, PR 생성까지 자동으로 처리할 수 있습니다. 특히 반복적인 작업이나 단순한 수정 작업에서 큰 효과를 발휘합니다.
사례 1 | 테스트 실패 자동 수정
[Telegram 대화]
나: CI에서 테스트 3개 실패했어. 확인하고 수정해줘.
OpenClaw: 테스트를 실행하고 분석하겠습니다.
[작업 중...]
테스트 실행 결과를 분석했습니다. 3개의 실패한 테스트를 발견했습니다:
1. test_user_authentication (auth/test_auth.py:45)
- 원인: 토큰 만료 시간 계산에서 timezone 처리 누락
- 수정: datetime.now(UTC) 대신 datetime.now(tz=timezone.utc) 사용
2. test_api_rate_limit (api/test_rate_limit.py:78)
- 원인: 경계값(boundary) 테스트에서 off-by-one 에러
- 수정: >= 조건을 > 조건으로 변경
3. test_database_connection (db/test_connection.py:23)
- 원인: 테스트 환경에서 connection timeout 값 부족
- 수정: timeout을 5초에서 10초로 증가
수정을 진행할까요?
나: 응, 수정하고 PR 만들어줘
OpenClaw: 수정을 진행합니다.
[Claude Code 세션 시작]
수정이 완료되었습니다. 변경사항:
- auth/token_utils.py: timezone 처리 수정 (+3 lines)
- api/rate_limiter.py: 경계값 조건 수정 (+1 line)
- db/config.py: 테스트 환경 timeout 설정 (+2 lines)
- tests/conftest.py: 테스트 픽스처 업데이트 (+5 lines)
모든 테스트 재실행 결과: 47/47 통과
PR #234를 생성했습니다:
"fix: resolve timezone, rate limit, and db timeout issues"
https://github.com/your-org/your-repo/pull/234
리뷰어로 @teammate를 추가할까요?
나: 응, 추가해줘
OpenClaw: @teammate를 리뷰어로 추가했습니다.
PR 상태: Open, 리뷰 대기 중
이메일 관리 자동화
매일 쏟아지는 이메일을 효율적으로 관리하는 것은 많은 직장인의 숙제입니다. OpenClaw의 Cron Job과 Gmail 연동을 활용하면 이메일 분류, 요약, 응답 초안 작성까지 자동화할 수 있습니다.
사례 | 아침 이메일 브리핑
매일 아침 7시에 자동 실행되는 Cron Job의 결과 예시입니다.
[Telegram - 매일 오전 7시]
OpenClaw: 좋은 아침입니다! 오늘의 이메일 브리핑입니다.
받은 이메일 현황 (어제 오후 6시 이후)
- 총 28통 수신
- 처리 필요: 5통
- 자동 분류됨: 23통
━━━━━━━━━━━━━━━━━━━━━━━━━━━
[긴급] 2통
1. 클라이언트 A사 - 김부장
제목: RE: 계약서 수정본 검토 요청
요약: 오늘 오후 3시까지 수정된 계약서 검토 요청.
주요 변경점은 결제 조건(30일에서 45일로)과
손해배상 조항 수정.
--> 응답 초안을 작성할까요?
2. CTO - 박상무
제목: 내일 보드 미팅 발표자료 확인
요약: 내일 오전 10시 보드 미팅 발표자료
오늘 중 최종 확인 요청.
--> 캘린더에 리마인더를 추가할까요?
━━━━━━━━━━━━━━━━━━━━━━━━━━━
[일반] 3통
3. HR팀 - 연차 승인 완료
4. 마케팅팀 - 이번 주 캠페인 성과 리포트
5. IT팀 - 시스템 점검 공지 (2/5 새벽 2-4시)
━━━━━━━━━━━━━━━━━━━━━━━━━━━
[자동 처리됨] 23통
- 뉴스레터: 8통 --> '뉴스레터' 폴더로 이동
- 알림/자동발송: 12통 --> '알림' 폴더로 이동
- 스팸 의심: 3통 --> 스팸 폴더로 이동
어떤 항목부터 처리할까요?
나: 1번 응답 초안 만들어줘
OpenClaw: 계약서 검토 요청에 대한 응답 초안입니다:
---
김부장님,
보내주신 수정 계약서 잘 받았습니다.
말씀하신 주요 변경사항(결제 조건 45일 연장,
손해배상 조항 수정)에 대해 검토 후
오늘 오후 3시까지 피드백 드리겠습니다.
검토 과정에서 추가 문의사항이 있으면
바로 연락드리겠습니다.
감사합니다.
[이름]
---
이대로 전송할까요, 아니면 수정이 필요할까요?
n8n 워크플로우와 연동
n8n을 이미 사용하고 있다면 OpenClaw와 연동하여 시너지를 낼 수 있습니다. OpenClaw가 자연어 인터페이스를 담당하고, n8n이 복잡한 데이터 처리와 다중 서비스 연동을 담당하는 방식입니다. 이 조합을 통해 "자연어로 요청하면 복잡한 자동화가 실행되는" 강력한 시스템을 구축할 수 있습니다.
flowchart LR
subgraph USER["사용자"]
TG["Telegram"]
end
subgraph OPENCLAW["OpenClaw"]
NLU["자연어 이해"]
SKILL["n8n 트리거 스킬"]
end
subgraph N8N["n8n 워크플로우"]
WH["Webhook 트리거"]
DB["DB 쿼리"]
PROCESS["데이터 처리"]
REPORT["보고서 생성"]
end
subgraph OUTPUT["출력"]
PDF["PDF 파일"]
SHEET["Google Sheets"]
end
TG -->|"매출 보고서 만들어줘"| NLU
NLU -->|"파라미터 추출"| SKILL
SKILL -->|"HTTP POST"| WH
WH --> DB
DB --> PROCESS
PROCESS --> REPORT
REPORT --> PDF
REPORT --> SHEET
PDF -->|"파일 전송"| TG
n8n 트리거 스킬 생성
먼저 OpenClaw가 n8n 워크플로우를 호출할 수 있도록 스킬을 생성합니다. 스킬 파일은 ~/.openclaw/workspace/skills/n8n-trigger/SKILL.md 경로에 저장합니다.
---
name: n8n-trigger
description: n8n 워크플로우를 자연어 명령으로 트리거하는 스킬
version: 1.0.0
author: denny
---
# n8n Workflow Trigger Skill
이 스킬은 사용자의 자연어 요청을 분석하여 적절한 n8n 워크플로우를
트리거합니다. 각 워크플로우는 특정 웹훅 URL을 통해 호출됩니다.
## 사용 가능한 워크플로우
### 1. 매출 보고서 생성
트리거 키워드: "매출", "보고서", "리포트", "실적"
웹훅: https://n8n.example.com/webhook/sales-report
파라미터:
- period: 기간 (예: "2026-01", "2026-Q1", "이번 달")
- format: 출력 형식 ("pdf", "xlsx", "sheets")
- detail_level: 상세도 ("summary", "detailed")
### 2. 데이터 백업
트리거 키워드: "백업", "backup", "데이터 저장"
웹훅: https://n8n.example.com/webhook/data-backup
파라미터:
- target: 백업 대상 ("all", "database", "files", "config")
- destination: 저장 위치 ("s3", "gdrive", "nas")
실제 사용 예시
[Telegram 대화]
나: 1월 매출 보고서 PDF로 만들어줘
OpenClaw: 1월 매출 보고서 생성을 시작합니다.
n8n 워크플로우를 트리거하고 있습니다...
- 기간: 2026년 1월
- 형식: PDF
- 상세도: 일반
[작업 중... 약 30초 소요]
매출 보고서가 생성되었습니다!
2026년 1월 매출 보고서 요약:
- 총 매출: 1,234,567,000원 (전월 대비 +12.3%)
- 주요 제품: A제품 45%, B제품 32%, 기타 23%
- 신규 고객: 156명
- 재구매율: 67.8%
[PDF 파일: 2026-01-sales-report.pdf]
Google Sheets에도 저장할까요?
스마트홈 제어
Home Assistant나 Philips Hue와 연동하면 OpenClaw로 스마트홈 기기를 제어할 수 있습니다. 복잡한 앱을 열지 않고 Telegram으로 간단하게 명령을 내릴 수 있어 편리합니다. Home Assistant 스킬을 설치하면 다양한 스마트홈 기기를 자연어로 제어할 수 있습니다.
[Discord 대화]
나: 집 공기질 상태 어때?
OpenClaw: Home Assistant에서 실내 환경 정보를 가져왔습니다.
현재 실내 환경 (거실 기준)
| 항목 | 현재값 | 상태 | 권장 범위 |
|------|--------|------|-----------|
| PM2.5 | 45 ug/m3 | 보통 | 0-35 |
| PM10 | 62 ug/m3 | 보통 | 0-50 |
| CO2 | 850 ppm | 양호 | 400-1000 |
| 온도 | 23.5도 | 적정 | 20-26 |
| 습도 | 42% | 약간 건조 | 40-60 |
권장 조치:
- PM2.5가 권장 범위를 약간 초과했습니다
- 습도가 낮은 편입니다
공기청정기를 켜고 가습기를 작동시킬까요?
나: 응, 공기청정기 자동모드로 켜고 습도 50%로 맞춰줘
OpenClaw: 설정을 변경했습니다.
[v] 공기청정기 (거실)
- 모드: 자동
- 팬 속도: 센서 연동
- 현재 상태: 작동 중
[v] 가습기 (거실)
- 목표 습도: 50%
- 현재 상태: 작동 중
- 예상 도달 시간: 약 25분
30분 후에 상태를 다시 확인해드릴까요?
5. 주의사항과 보안 위험
OpenClaw는 강력한 기능을 제공하지만, 그만큼 심각한 보안 위험도 존재합니다. 이 섹션은 OpenClaw를 사용하기 전에 반드시 읽어야 할 가장 중요한 부분입니다. 보안 위험을 이해하지 못하고 사용하면 개인정보 유출, 시스템 손상, 금전적 피해 등 심각한 결과를 초래할 수 있습니다. 특히 Prompt Injection 공격은 현재 완전한 해결책이 없는 근본적인 취약점이므로, 이를 전제로 한 방어적 운영이 필요합니다.
Prompt Injection | 가장 심각한 위험
Prompt Injection은 악의적인 텍스트가 AI의 지시사항처럼 해석되어 의도하지 않은 행동을 유발하는 공격입니다. 일반적인 챗봇에서는 이상한 응답을 하는 정도의 문제이지만, OpenClaw처럼 시스템에 대한 높은 권한을 가진 에이전트에서는 이 공격이 치명적일 수 있습니다. 공격자가 AI를 조종하여 파일을 삭제하거나, 민감한 정보를 외부로 전송하거나, 악성 코드를 실행할 수 있습니다.
Prompt Injection 공격의 구체적인 예시를 살펴보겠습니다. 악의적인 이메일에 HTML 주석으로 숨겨진 명령어가 포함되어 있는 경우입니다.
From: attacker@malicious.com
Subject: 프로젝트 진행 상황 공유
안녕하세요,
요청하신 프로젝트 진행 상황을 공유드립니다.
자세한 내용은 첨부 문서를 확인해주세요.
감사합니다.
OpenClaw가 이 이메일을 "요약해줘"라는 요청을 받아 처리하면, HTML 주석 안의 내용을 명령어로 해석하여 실행할 수 있습니다. 특히 무서운 점은 사용자에게는 정상적인 응답만 표시되고, 실제로 민감한 정보가 유출되었다는 사실을 알 수 없다는 것입니다.
이 문제가 심각한 이유는 현재 완전한 해결책이 없기 때문입니다. 최신 LLM들은 어느 정도의 방어 기능을 갖추고 있지만, 충분히 정교한 공격에는 여전히 취약합니다. 이것은 OpenClaw만의 문제가 아니라 모든 LLM 기반 에이전트 시스템이 공유하는 근본적인 한계입니다.
Prompt Injection 대응책:
| 대응책 | 설명 | 효과 |
| Sandbox 필수 활성화 | 모든 도구 실행을 격리된 환경에서 수행 | 피해 범위 제한 |
| network: none 설정 | 외부 네트워크 접근 차단 | 데이터 유출 방지 |
| 민감 도구 deny | browser, cron, gateway 등 차단 | 위험 행동 차단 |
| 별도 에이전트 분리 | 이메일/웹 처리용 에이전트 격리 | 공격 영향 격리 |
| 자동 실행 제한 | 위험한 작업은 사용자 확인 요구 | 사람의 검토 추가 |
자격증명 노출
OpenClaw는 ~/.openclaw/ 디렉토리에 API 키, OAuth 토큰, 세션 정보 등 민감한 자격증명을 저장합니다. 이 디렉토리가 노출되면 Anthropic API, 연동된 서비스(Gmail, Slack, Discord 등), 채널 봇 토큰 등 모든 연동 서비스에 대한 접근 권한이 유출됩니다. 따라서 이 디렉토리의 보안을 철저히 관리해야 합니다.
~/.openclaw/
├── credentials/
│ ├── whatsapp/ # WhatsApp 세션 정보
│ │ └── session.json # 세션 키, 디바이스 정보
│ └── oauth/
│ ├── google.json # Google OAuth 토큰
│ └── slack.json # Slack OAuth 토큰
├── agents/
│ └── main/
│ ├── auth-profiles.json # API 키 프로필
│ └── MEMORY.md # 대화 기록 (개인정보 포함 가능)
├── openclaw.json # 메인 설정 (API 키 포함 가능)
└── .env # 환경 변수 (API 키)
자격증명 보호 대응책:
# 1. 디렉토리 권한 제한 (소유자만 접근)
chmod 700 ~/.openclaw
chmod 600 ~/.openclaw/.env
chmod 600 ~/.openclaw/openclaw.json
# 2. Git에서 제외 (.gitignore)
echo ".env" >> .gitignore
echo "openclaw.json" >> .gitignore
echo "credentials/" >> .gitignore
# 3. 백업 시 암호화
tar czf - ~/.openclaw | gpg -c > openclaw-backup.tar.gz.gpg
Skills 공급망 공격
ClawHub에 업로드된 커뮤니티 스킬 중 악의적인 코드가 포함된 경우가 실제로 발생했습니다. Tom's Hardware 보도에 따르면, 14개의 악성 스킬이 발견되어 제거되었습니다. 이러한 악성 스킬은 정상적인 기능을 제공하는 것처럼 보이면서 백그라운드에서 자격증명을 수집하거나, 사용자 데이터를 외부로 전송할 수 있습니다. 스킬을 설치하기 전에 반드시 코드를 검토해야 합니다.
Skills 공급망 공격 대응책:
# 1. 스킬 설치 전 SKILL.md 내용 확인
cat ~/.openclaw/workspace/skills/{skill-name}/SKILL.md
# 2. 설치된 스킬의 모든 파일 검사
find ~/.openclaw/workspace/skills/{skill-name} -type f -exec cat {} \;
# 3. 신뢰할 수 있는 작성자의 스킬만 설치
# - 공식 스킬 (openclaw org)
# - 검증된 커뮤니티 스킬 (stars 많고 리뷰 있는)
# - 직접 코드 검토한 스킬
Agency Risk | 의도하지 않은 행동
Agency Risk는 악의적인 공격이 아니라 AI의 한계로 인해 발생하는 문제입니다. AI가 사용자의 의도를 잘못 해석하거나, 주어진 명령을 예상치 못한 방식으로 수행하여 피해가 발생할 수 있습니다. 예를 들어 "오래된 파일 삭제해줘"라는 명령에 중요한 프로젝트 파일이 포함될 수 있습니다.
실제 발생한 사례들:
| 상황 | 사용자 의도 | AI 행동 | 결과 |
| "홈 디렉토리 보여줘" | 파일 목록 확인 | 그룹 채팅에 전체 구조 공개 | 민감한 폴더명 노출 |
| "이메일 정리해줘" | 스팸 분류 | 중요 이메일 삭제 | 데이터 손실 |
| "오래된 파일 삭제해줘" | 임시 파일 정리 | 프로젝트 파일 삭제 | 작업 손실 |
Agency Risk 대응책:
| 대응책 | 설명 |
| 확인 요청 설정 | 파괴적 작업(삭제, 전송)에 대해 사용자 확인 요구 |
| 그룹 채팅 제한 | 그룹 채팅에서는 Sandbox 모드 필수 활성화 |
| 백업 유지 | 중요 데이터에 대한 정기 백업 |
| 점진적 확장 | 처음에는 제한된 권한으로 시작 |
보안 전문가들의 경고
여러 보안 전문가들이 OpenClaw 사용에 대해 경고하고 있습니다. Google Security Team 창립 멤버 Heather Adkins는 "My threat model is not your threat model, but it should be. Don't run Clawdbot."이라고 직접적으로 경고했습니다. AI 연구자 Simon Willison은 "Prompt Injection은 이론적 위험이 아닙니다. 문서화되고 재현 가능한 문제이며, 오늘날까지 해결되지 않았습니다."라고 지적했습니다.
Cisco의 보안 팀은 OpenClaw를 분석한 결과, 악성 스킬이 실행될 때 9개의 보안 문제(2개 Critical, 5개 High)를 발견했다고 보고했습니다. 이러한 전문가들의 경고는 OpenClaw가 아무리 편리해도 신중하게 접근해야 함을 보여줍니다.
6. 내가 주로 사용하는 방식
실제 운영 환경에서 OpenClaw를 안전하게 활용하기 위한 권장 구성을 공유합니다. 이 구성은 보안과 편의성 사이의 균형을 고려하여 설계되었으며, 개인 프로젝트나 실험 목적으로 적합합니다.
인프라 구성
| 항목 | 설명 | 이유 |
| 실행 환경 | Mac Mini (홈서버) 또는 VPS | 개인 MacBook과 물리적 분리 |
| 컨테이너화 | Docker + Sandbox 모드 | 격리 및 보안 강화 |
| 주요 채널 | Telegram | 설정 간단, 봇 API 안정적 |
| AI Provider | Anthropic Claude Opus | Prompt Injection 저항성 높음 |
| Sandbox mode | non-main | 개인 DM 외에는 모두 격리 |
| 외부 접근 | Cloudflare Tunnel | 공인 IP 노출 없음, 암호화 |
주로 활용하는 기능
- 아침 브리핑: 매일 오전 7시 캘린더, 이메일 요약을 Telegram으로 수신
- 리마인더: "30분 후에 알려줘", "내일 오전 10시에 리마인드" 같은 자연어 알림
- 문서 처리: PDF 요약, 간단한 번역 작업
- 개발 보조: 테스트 실행 결과 확인, 간단한 코드 수정 요청
보안상의 이유로 다음 기능들은 의도적으로 사용하지 않습니다.
| 기능 | 사용하지 않는 이유 |
| 실제 금융 계정 연동 | 금전적 피해 위험 |
| 프로덕션 서버 접근 | 서비스 장애 위험 |
| 민감한 개인정보 이메일 처리 | Prompt Injection 위험 |
| 기업 Slack/Teams 연동 | 조직 데이터 노출 위험 |
| browser 도구 | Sandbox 격리 무력화 |
7. OpenClaw를 사용할까 말까
OpenClaw는 분명 혁신적인 프로젝트이지만, 모든 사람에게 적합한 것은 아닙니다. 아래 기준을 참고하여 사용 여부를 결정하시기 바랍니다.
사용을 권장하는 경우
| 조건 | 설명 |
| 별도의 격리 환경 보유 | VPS, Mac Mini, Raspberry Pi 등 개인 컴퓨터와 분리된 환경 |
| Docker/Linux 숙련자 | 설정 파일 수정, 컨테이너 관리, 트러블슈팅에 자신 있음 |
| AI 에이전트 실험 목적 | 새로운 기술을 탐색하고 배우고 싶음 |
| 보안 위험 관리 가능 | Prompt Injection, 자격증명 관리 등을 이해하고 대응 가능 |
사용을 권장하지 않는 경우
| 조건 | 설명 |
| 개인 컴퓨터에서 풀 권한 실행 | 절대 금지 - 개인 데이터 위험 |
| 민감한 업무/금융 데이터 처리 | 보안 위험이 너무 높음 |
| 보안 설정에 자신 없음 | 먼저 Docker, Linux 보안 학습 필요 |
| 프로덕션 환경 즉시 사용 | 충분한 테스트 기간 필요 |
| "설치만 하면 되겠지" 마인드 | 상당한 설정과 학습 필요 |
최종 권장 사항
OpenClaw는 "미래의 모습"을 보여주는 혁신적인 프로젝트입니다. 하지만 현재 시점에서는 실험적 도구로 접근해야 합니다.
단계별 접근 권장:
| 단계 | 내용 | 기간 |
| 1. 학습 | 문서 읽기, 보안 위험 이해 | 1-2주 |
| 2. 격리 테스트 | VPS에서 더미 데이터로 테스트 | 2-4주 |
| 3. 제한된 사용 | 비민감 작업부터 시작 (리마인더 등) | 1-2개월 |
| 4. 점진적 확장 | 안정성 확인 후 기능 범위 확대 | 지속 |
OpenClaw 공식 문서에서도 다음과 같이 명시하고 있습니다: "OpenClaw는 고도의 권한을 가진 도구입니다. 부주의한 사용은 심각한 결과를 초래할 수 있습니다."
8. 마무리
이번 2편에서는 Cron Jobs를 통한 자동화, Sandbox를 활용한 보안 강화, VPS 배포 방법, 실전 활용 사례, 그리고 반드시 알아야 할 보안 위험까지 상세하게 다루었습니다. OpenClaw는 분명 AI 에이전트의 미래를 보여주는 혁신적인 프로젝트입니다. 매일 아침 일정을 브리핑 받고, Telegram으로 코드 수정을 요청하고, 스마트홈을 제어하는 경험은 정말 "미래에서 온" 느낌을 줍니다. 하지만 그 강력함만큼 신중한 접근이 필요합니다.
1편과 2편을 통해 전달하고 싶었던 핵심 메시지는 다음과 같습니다.
- 첫째, OpenClaw는 단순한 챗봇이 아니라 시스템에 대한 높은 권한을 가진 자율 에이전트입니다.
- 둘째, 반드시 격리된 환경(VPS, Docker Sandbox)에서 실행해야 합니다.
- 셋째, Prompt Injection은 현재 해결되지 않은 근본적인 취약점입니다.
- 넷째, 점진적으로 기능을 확장하면서 안전성을 확인해야 합니다.
이러한 주의사항을 충분히 이해하고 적절한 보안 조치를 취한다면, OpenClaw는 개인 생산성을 크게 향상시킬 수 있는 강력한 도구가 될 것입니다. 기술의 발전은 항상 기회와 위험을 함께 가져옵니다. OpenClaw를 현명하게 활용하여 AI 에이전트 시대의 선구자가 되시기 바랍니다.
참고 자료
- OpenClaw 공식 웹사이트: https://openclaw.ai/
- GitHub 저장소: https://github.com/openclaw/openclaw
- 공식 문서: https://docs.openclaw.ai/
- Docker 설치 가이드: https://docs.openclaw.ai/install/docker
- 보안 가이드: https://docs.openclaw.ai/gateway/security
- Sandbox 설정: https://docs.openclaw.ai/gateway/sandboxing
- Cron Jobs 문서: https://docs.openclaw.ai/automation/cron-jobs
- Discord 커뮤니티: https://discord.com/invite/clawd
- ClawHub (스킬 마켓): https://clawhub.com
- Tom's Hardware 보안 기사: https://www.tomshardware.com/software/14-malicious-claude-computer-use-extensions
- Cisco Security 분석: https://blogs.cisco.com/security/mcp-security-risks
'AI 활용' 카테고리의 다른 글
| 글로벌 제조업 AI 활용 사례 - 세계를 선도하는 혁신 기업들 (0) | 2026.03.09 |
|---|---|
| 국내 제조업 AI 활용 사례 - 생산성 혁신의 선도주자들 (2) | 2026.03.09 |
| openClaw 활용 가이드 (1편) - 설치부터 채널 연결까지 (0) | 2026.02.03 |
| n8n-mcp-skill을 위한 n8n-mcp 완벽 설정 가이드 (0) | 2026.01.19 |
| [claude] n8n-mcp-skill로 실전 워크플로우 작성해 볼까요? (1) | 2026.01.18 |