Contents
OpenClaw の公式セキュリティ設定ガイド(2026 年版)
本稿の目的
- OpenClaw を本番環境で安全に運用するための具体的な手順を示す
- 初心者でも追従できるよう、設定ファイルの編集例やコマンド実行結果まで丁寧に解説する
- 公式ドキュメント([1]、[2])で推奨されている項目のみを掲載し、情報の正確性を担保する
1. 許可リスト(Allow‑List)の設定
1-1. なぜ許可リストが必要か
外部からの不正アクセスは「どこから」接続されるかを制御できないと防げません。OpenClaw では allow_list 機能で ホワイトリスト方式 の通信制限が可能です。
1-2. 設定ファイル例 (config.yaml)
|
1 2 3 4 5 6 7 8 9 10 11 |
# config.yaml(抜粋) security: allow_list: enabled: true # ← 必ず有効化する domains: # 許可するホスト名(複数可) - api.mycompany.com - webhook.internal.example ip_ranges: # 許可する IP アドレス帯域(CIDR 表記) - 10.0.0.0/8 - 192.168.1.0/24 |
ポイント
-enabledをtrueにしないと、以下の項目は無視されます。
- ドメインだけでなく IP 範囲も併せて設定すると二段階防御になります。
1-3. 手順(初心者向け)
| 手順 | 操作内容 | 補足 |
|---|---|---|
| ① | サーバーにログインし、/etc/openclaw/config.yaml を開く |
sudo vi /etc/openclaw/config.yaml 推奨 |
| ② | 上記 設定ファイル例 のように security.allow_list ブロックを追記 |
インデントはスペース2つで統一 |
| ③ | ファイル保存後、OpenClaw サービスを再起動 sudo systemctl restart openclaw |
再起動前に構文エラーがないか openclaw config validate を実行すると安全 |
| ④ | 設定が反映されたか確認 curl -s http://localhost:8080/healthz | grep allow_list |
enabled:true が表示されれば成功 |
2. 自動実行ガード(Auto‑Exec Guard)の有効化
公式ドキュメントでは 自動実行要求のブロック を security.auto_exec_guard.enabled で制御します。
2-1. 設定例
|
1 2 3 4 5 |
security: auto_exec_guard: enabled: true # 外部からのスクリプト実行リクエストをすべて拒否 exception_commands: [] # 必要に応じて許可したいコマンド名を列挙 |
2-2. 手順
config.yamlに上記ブロックを追記(手順は 1‑③ と同様)- 再起動後、以下コマンドでステータス確認
bash
$ openclaw status | grep auto_exec_guard
auto_exec_guard: enabled
- 例外設定が必要な場合(内部ジョブなど)
exception_commandsに許可したい CLI 名をカンマ区切りで記入- 変更後は必ずテスト環境で動作確認
注意:公式に未掲載のパラメータ(例:
auto_exec_guardの代替名)を書かないこと。この記事ではドキュメント上確実に存在する項目のみを使用しています。
3. API キーとシークレットの安全な管理
3-1. キー生成・ローテーションフロー(図解付き)
|
1 2 3 4 5 6 |
flowchart TD A[管理コンソールで「API Key」作成] --> B{最小権限を選択} B --> C[シークレットストアへ保存] C --> D[CI/CD パイプラインで取得] D --> E[30 日ごとに自動ローテーション] |
3-2. 実装手順(Vault + GitHub Actions の例)
- キー作成
- コンソール → API Keys → Create New
-
スコープは
read:messagesのみ選択し、期限は「無期限」でも構いませんがローテーション計画を必ず立てます。 -
Vault へ保存
bash
$ vault kv put secret/openclaw/api_key value="YOUR_GENERATED_KEY"
- GitHub Actions で取得(
.github/workflows/deploy.ymlの抜粋)
yaml
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Retrieve API key from Vault
env:
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
run: |
export OPENCLAW_API_KEY=$(vault kv get -field=value secret/openclaw/api_key)
- ローテーション(Cron ジョブ例)
bash
# /etc/cron.d/openclaw_key_rotate
0 2 * */1 root /usr/local/bin/openclaw-key-rotate.sh
openclaw-key-rotate.sh は
- 新キーを生成 (openclaw api-key create --scopes read:messages)
- Vault に上書き保存
- 古いキーを即時無効化(openclaw api-key revoke <old-id>)
3-3. 環境変数の安全な注入例
|
1 2 3 4 5 |
# systemd のサービスファイル (/etc/systemd/system/openclaw.service) [Service] EnvironmentFile=/run/openclaw/env ExecStart=/usr/bin/openclaw serve |
/run/openclaw/env は root が作成し、他ユーザーからは読み取り不可 に設定します。
|
1 2 3 4 5 |
# 作成例(Vault から取得して書き込み) vault kv get -field=value secret/openclaw/api_key > /run/openclaw/env chmod 600 /run/openclaw/env systemctl daemon-reload && systemctl restart openclaw |
4. プロンプトインジェクション対策
4-1. 入力サニタイズ(Python 実装例)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import re from typing import Final # 許可文字は英数字・スペース・句読点に限定 _ALLOWED_PATTERN: Final = re.compile(r'[^a-zA-Z0-9\s.,!?-]') def sanitize_input(user_text: str) -> str: """ 不正文字を空文字に置換して返す。 例外:必要ならばホワイトリスト方式でコマンド列挙可 """ cleaned = _ALLOWED_PATTERN.sub('', user_text) return cleaned.strip() |
- テストケース(ユニットテストの抜粋)
python
assert sanitize_input("Hello! <script>") == "Hello!"
4-2. プロンプト長制限と履歴管理
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
MAX_TOKENS: Final = 512 # OpenClaw が推奨する上限 def build_prompt(user_input: str, history: list[str]) -> str: """ - 履歴は最新 5 件まで使用 - トークン数が上限を超えると例外を送出 """ recent = "\n".join(history[-5:] + [user_input]) token_cnt = len(re.split(r'\s+', recent)) if token_cnt > MAX_TOKENS: raise ValueError(f"プロンプトは {MAX_TOKENS} トークン以下にしてください(現在: {token_cnt})") return recent |
- 実装上のヒント
re.split(r'\s+', ...)は単語ベースでトークン数を概算します。正確なトークン数は OpenClaw SDK のcount_tokens()を利用してください。
5. RBAC(ロールベースアクセスコントロール)の設計と実装
5-1. 標準ロールと最小権限の考え方
| ロール名 | 推奨権限(例) |
|---|---|
| admin | *(全リソースへのフルアクセス) |
| developer | read:messages, write:prompts, list:nodes |
| viewer | read:logs, read:metrics |
ベストプラクティス
- ロールは 3 種類に絞る(過剰なロールは管理コスト増)
- 権限は「読み取りのみ」→「書き込み可能」の段階的に付与する
5-2. 実装手順
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 1️⃣ ロール作成 openclaw rbac role create admin --permissions "*" openclaw rbac role create developer --permissions "read:messages,write:prompts,list:nodes" openclaw rbac role create viewer --permissions "read:logs,read:metrics" # 2️⃣ ユーザーへロール割当 openclaw rbac user assign alice admin openclaw rbac user assign bob developer openclaw rbac user assign carol viewer # 3️⃣ 権限テスト(失敗・成功ケースを必ず確認) openclaw rbac test --user bob --action write:prompts # → success openclaw rbac test --user bob --action delete:nodes # → denied (expected) |
5-3. 定期監査の自動化
| 項目 | コマンド例 | スケジュール |
|---|---|---|
| ロール・権限一覧取得 | openclaw rbac audit --output json > /var/log/openclaw/rbac_audit_$(date +%F).json |
週次(cron: 0 3 * * 1) |
| 不要ロールの自動通知 | jq '.users[] | select(.roles|length==0)' rbac_audit_*.json \| mail -s "OpenClaw RBAC Alert" |
毎日深夜 |
6. 運用・監視のベストプラクティス
6-1. 2026 年時点で顕在化した主な脆弱性と対策
| 脆弱性カテゴリ | 具体的リスク | 推奨対策 |
|---|---|---|
ライブラリの未パッチ(例: node-fetch) |
任意コード実行 | npm audit fix --force、Dependabot の有効化 |
| デフォルトで許可された公開 API | 認証なしで情報取得 | 許可リストでホワイトリスト化(第 1 節参照) |
| プロンプト長無制限 | メモリ枯渇・DoS | MAX_TOKENS = 512 の上限制御(第 4 節) |
| モバイル端末からの平文通信 | 中間者攻撃 | TLS 1.3 強制、証明書ピニング実装 |
6-2. ログ・メトリクス監視設定例
Prometheus + Alertmanager
|
1 2 3 4 5 6 7 8 9 |
# prometheus.yml の抜粋 scrape_configs: - job_name: 'openclaw' static_configs: - targets: ['localhost:9090'] rule_files: - "alert_rules.yml" |
alert_rules.yml
|
1 2 3 4 5 6 7 8 9 10 11 12 |
groups: - name: openclaw_alerts rules: - alert: HighRequestRate expr: rate(openclaw_requests_total[5m]) > 100 for: 2m labels: severity: warning annotations: summary: "OpenClaw のリクエスト数が急増しています" description: "{{ $labels.instance }} が過去5分で {{ $value }} リクエスト/秒を受信" |
Elastic Stack(Filebeat → Logstash → Kibana)
|
1 2 3 4 5 6 7 |
# filebeat.yml の module 設定例 filebeat.modules: - module: openclaw log: enabled: true var.paths: ["/var/log/openclaw/*.log"] |
Logstash 側で JSON 正規化し、Kibana ダッシュボードに「認証失敗」や「権限エラー」の可視化パネルを作成します。
Falco(カーネルレベルの不審行動検知)
falco_rules.yaml
|
1 2 3 4 5 6 |
- rule: OpenClaw unexpected bind desc: "OpenClaw が許可外ポートへバインドしようとした" condition: evt.type = bind and proc.name = openclaw and not fd.port in (8080, 8443) output: "Unexpected port bind by OpenClaw (pid=%proc.pid uid=%user.uid)" priority: WARNING |
6-3. チェックリスト(実装完了時に確認)
| No | 確認項目 |
|---|---|
| 1 | allow_list.enabled が true、かつドメイン・IP が正しく列記されている |
| 2 | auto_exec_guard.enabled が true で例外設定が最小限に抑えられている |
| 3 | API キーは Vault 等シークレットストアに保存し、30 日ローテーションの Cron が動作している |
| 4 | 入力サニタイズ関数とトークン上限制御がコードベースに組み込まれ、単体テストが通っている |
| 5 | RBAC は admin / developer / viewer の3ロールのみで構成され、権限テストが実施済み |
| 6 | モバイルクライアントは TLS 1.3 + MFA(TOTP)で接続し、証明書ピニングを実装している |
| 7 | Prometheus の HighRequestRate アラートと Elastic Stack のログインデックスが正常に送信される |
| 8 | Falco の「OpenClaw unexpected bind」ルールが有効化され、アラートが Slack に届く |
7. まとめ
- 許可リスト と 自動実行ガード はデフォルトで無効のため、必ず有効化し最小権限だけを許可する
- API キー・シークレットは Vault 等の外部管理ツール に保存し、30 日ごとのローテーション を自動化する
- ユーザー入力は サニタイズ関数 と トークン長制限 の二重防御でインジェクションを防止
- RBAC は 3 つのロール に絞り、定期的に監査レポートを生成して過剰権限を排除
- 運用監視は Prometheus + Alertmanager, Elastic Stack, Falco の組み合わせで可視化・自動通知を実装
これらの設定と手順を社内の 「OpenClaw 安全運用チェックリスト(PDF)」 にまとめ、定例レビューに組み込めば、2026 年時点でも十分なセキュリティ水準を維持できます。
参考文献
-
OpenClaw 公式セキュリティ設定ページ
https://open-claw.bot/docs/ja/help/faq/security/ -
OpenClaw ゲートウェイ向けセキュリティガイド(2026 年版)
https://open-claw.bot/docs/ja/gateway/security/