Skip to content

workstanleypan/openclaw-deploy

Repository files navigation

OpenClaw EC2 一键部署

在当前 EC2 实例上一键部署 OpenClaw,集成 Amazon Bedrock。

快速开始

# 1. 编辑配置 (可选)
vim config.env

# 2. 一键部署
chmod +x deploy.sh
./deploy.sh

# 3. 配置 Bedrock 权限 (必须,否则 AI 无法工作)
./setup-iam-policy.sh --create

# 4. 验证 Bedrock 可用
aws bedrock list-foundation-models --region us-east-1 --max-results 1

部署脚本会自动检查 AWS 凭证和 Bedrock 权限。如果检测到缺失,会提示你配置。

如果 EC2 没有 IAM Role,部署脚本会引导你运行 aws configure./setup-iam-policy.sh --create

从本地源码部署

如果你已经 clone 了 openclaw 源码:

OPENCLAW_SOURCE_DIR=/home/ec2-user/openclaw ./deploy.sh

配置说明

编辑 config.env 或通过环境变量传入:

变量 默认值 说明
OPENCLAW_MODEL global.amazon.nova-2-lite-v1:0 Bedrock 模型 ID
OPENCLAW_PORT 18789 Gateway 端口
OPENCLAW_BIND loopback 绑定地址 (loopback/lan)
OPENCLAW_SOURCE_DIR (空) 源码路径,留空从 npm 安装
USE_BEDROCK true 是否配置 Bedrock
INSTALL_DOCKER false 是否安装 Docker

可用模型

模型 价格 (输入/输出 每百万tokens) 适用场景
Nova 2 Lite (默认) $0.30 / $2.50 日常任务,最便宜
Claude Opus 4.6 最新旗舰 最强模型,编程/推理/企业级
Claude Sonnet 4.5 $3 / $15 复杂推理
Claude Opus 4.5 旗舰级 深度推理
Claude Sonnet 4 $3 / $15 编程任务
Claude Haiku 4.5 $1 / $5 快速响应
Nova Pro $0.80 / $3.20 平衡性能
DeepSeek R1 按量计费 深度推理
Llama 3.3 70B 按量计费 开源模型

Global (跨区域推理) 模型 — Bedrock 自动路由到最优区域,降低延迟:

模型 ID 前缀 说明
Claude Opus 4.6 Global global.anthropic.claude-opus-4-6-v1 跨区域推理,自动选择最优 region
Claude Sonnet 4.6 Global global.anthropic.claude-sonnet-4-6 跨区域推理
Claude Haiku 4.5 Global global.anthropic.claude-haiku-4-5-20251001-v1:0 跨区域推理,最便宜

us.* 前缀固定在 US 区域推理,global.* 前缀由 Bedrock 自动路由到负载最低的区域。价格相同,但 global 可能有更低延迟。

部署后切换模型

快速切换主模型

./switch-model.sh              # 交互式选择
./switch-model.sh 2            # 直接选 Claude Opus 4.6
./switch-model.sh --show       # 查看当前配置

多模型精细配置

运行 ./switch-model.sh --multi 进入交互式多模型配置,可以设置:

  • 主模型 — 日常任务使用 (如 Nova 2 Lite,最便宜)
  • 回退模型 — 主模型失败时自动切换 (如回退到 Claude)
  • 图像模型 — 处理图片时使用的专用模型
  • 思考模式 — off / low / medium / high 控制推理深度
  • 模型别名 — 在聊天中用 /model opus 快速切换

典型配置策略:

策略 主模型 回退 适用场景
省钱优先 Nova 2 Lite Haiku 4.5 日常聊天,简单任务
平衡 Nova Pro Sonnet 4.5 多数场景
性能优先 Opus 4.6 Sonnet 4.5 → Nova Pro 编程/复杂推理
混合 Haiku 4.5 Opus 4.6 简单任务快速,复杂任务回退到强模型

聊天中实时切换

部署后可以在任何消息渠道 (WhatsApp/Telegram/Discord/Web) 中发送命令实时切换:

/model              查看可用模型列表
/model 3            切换到列表中第 3 个
/model opus         用别名切换
/thinking high      开启深度推理 (消耗更多 tokens)
/thinking off       关闭推理 (更快更便宜)

手动编辑配置

vim ~/.openclaw/openclaw.json
systemctl --user restart openclaw-gateway

配置示例 (多模型 + 回退 + 别名):

{
  "agents": {
    "defaults": {
      "model": {
        "primary": "amazon-bedrock/global.amazon.nova-2-lite-v1:0",
        "fallbacks": [
          "amazon-bedrock/global.anthropic.claude-opus-4-6-v1:0",
          "amazon-bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0"
        ]
      },
      "imageModel": {
        "primary": "amazon-bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0"
      },
      "models": {
        "amazon-bedrock/global.amazon.nova-2-lite-v1:0": { "alias": "nova" },
        "amazon-bedrock/global.anthropic.claude-opus-4-6-v1:0": { "alias": "opus" },
        "amazon-bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0": { "alias": "sonnet" }
      },
      "thinkingDefault": "low"
    }
  }
}

前提条件

  • EC2 实例需要绑定 IAM Role,且具有 Bedrock 访问权限
    • 运行 ./setup-iam-policy.sh --create 可一键创建安全 IAM Role 并绑定
    • 或手动在 IAM Console 中创建 Role,附加 Bedrock 权限
  • 如果没有 IAM Role,部署脚本会引导你运行 aws configure 配置 Access Key (临时方案)
  • Bedrock Console 中启用所需模型
    • 部署脚本会自动检查模型是否可用,不可用时会给出控制台链接

AWS 认证方式

支持三种认证方式,在 config.env 中配置:

方式 1: IAM Role (EC2 推荐,最安全)

EC2 实例绑定 IAM Role 后无需任何凭证配置,脚本自动检测。

# 部署后创建安全 IAM Role
./setup-iam-policy.sh --create

方式 2: Access Key (非 EC2 环境)

适用于本地机器、非 AWS 环境、或没有 IAM Role 的场景。

# 在 config.env 中设置
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=us-east-1

脚本会自动将凭证写入 ~/.aws/credentials,部署完成后建议切换到 IAM Role 并删除 Access Key。

方式 3: SSO Profile

已配置 aws sso login 的环境可以直接使用 Profile。

# 在 config.env 中设置
AWS_PROFILE=my-sso-profile

IAM 安全权限配置 (防止破坏性操作)

OpenClaw AI 代理可以执行 shell 命令和调用 AWS API。为了确保安全,提供三层防护:

三层安全架构

层级 机制 作用
第 1 层 IAM Policy AWS API 级别 — 即使 AI 尝试调用破坏性 API,IAM 也会拒绝
第 2 层 exec-approvals Shell 命令级别 — 白名单模式,只允许安全命令
第 3 层 sandbox 进程隔离 — 非主会话在 Docker 容器中运行,工作区只读

快速配置

# 查看推荐的 IAM 策略 (不执行任何操作)
./setup-iam-policy.sh --show

# 一键创建安全 IAM Role + 配置 exec-approvals + sandbox
./setup-iam-policy.sh --create

# 验证权限安全性
./setup-iam-policy.sh --verify

# 仅配置 exec-approvals (不需要 AWS 管理员权限)
./setup-iam-policy.sh --exec-approvals

IAM Policy 详情

允许的操作 (安全):

  • Bedrock 模型调用 (InvokeModel) — 仅限指定区域
  • Bedrock 模型列表 (ListFoundationModels)
  • SSM Session Manager — 安全远程访问
  • EC2/S3/CloudWatch/CostExplorer 只读 (Describe*, Get*, List*)
  • CloudTrail 只读 (LookupEvents, DescribeTrails, ListTrails) — 用于 Inference Region 追踪

显式拒绝的操作 (Deny 优先级最高,覆盖 30+ 个 AWS 服务):

  • EC2: 创建/终止/停止实例, 安全组, VPC, 子网, EIP, 卷, 快照, AMI, 启动模板
  • S3: 创建/删除桶, 上传/删除对象, 修改策略/ACL/加密/版本控制
  • IAM: 所有 Create/Delete/Update/Put/Attach/Detach 操作
  • Lambda: 创建/删除/更新函数, 层, 事件映射, 权限
  • RDS: 创建/删除/修改实例和集群, 快照
  • DynamoDB: 创建/删除/修改表, 写入/删除数据
  • ECS/EKS/ECR: 创建/删除集群, 服务, 任务, 镜像仓库
  • ALB/NLB: 创建/删除负载均衡器, 目标组, 监听器
  • Route53/CloudFront/API Gateway: 所有写入操作
  • SQS/SNS/Kinesis/EventBridge: 创建/删除队列, 主题, 流, 规则
  • CloudFormation: 创建/删除/更新堆栈
  • KMS/Secrets Manager/SSM Parameter: 创建/删除密钥和参数
  • WAF/GuardDuty/Inspector: 创建/删除安全资源
  • EFS/FSx/Glue/Athena/EMR/SageMaker: 创建/删除存储和分析资源
  • AutoScaling: 创建/删除/修改伸缩组
  • Cognito: 创建/删除用户池
  • Bedrock 资源: 创建自定义模型, 预置吞吐量, Agent, 知识库
  • Organizations/Account: 所有操作

exec-approvals 命令白名单

配置后 AI 代理只能执行以下类型的命令:

# 系统信息 (只读)
ls, cat, head, tail, ps, df, free, uptime, whoami, uname

# 文本处理
grep, sort, uniq, cut, tr, jq, wc, find

# AWS 只读命令
aws ec2 describe-*, aws s3 ls, aws logs get-*, aws ce get-*

# Bedrock 调用
aws bedrock invoke-model, aws bedrock list-*

# OpenClaw 管理
openclaw *

不在白名单中的命令 (如 rm, sudo, aws ec2 terminate-instances) 会被拒绝或需要人工确认。

手动编辑 exec-approvals

vim ~/.openclaw/exec-approvals.json

添加或移除白名单条目:

{
  "version": 1,
  "defaults": {
    "security": "allowlist",
    "ask": "on-miss",
    "askFallback": "deny"
  },
  "agents": {
    "__defaults__": {
      "security": "allowlist",
      "allowlist": [
        { "pattern": "cat" },
        { "pattern": "aws ec2 describe-*" },
        { "pattern": "aws bedrock *" }
      ]
    }
  }
}

security 选项:

  • deny — 拒绝所有命令执行 (最严格)
  • allowlist — 只允许白名单中的命令 (推荐)
  • full — 允许所有命令 (不推荐)

临时权限授予 (按需创建资源)

默认策略锁死所有写入操作。当你确实需要 AI 创建 AWS 资源时,用 aws-grant.sh 临时放行:

# 查看可用的预设权限组
./aws-grant.sh list

# 授予 S3 写入权限 (默认 1 小时后自动过期)
./aws-grant.sh allow s3-write

# 授予 EC2 创建权限 (30 分钟)
./aws-grant.sh allow ec2-create -t 30

# 授予 Lambda 部署权限 (2 小时)
./aws-grant.sh allow lambda-deploy -t 120

# 自定义权限 (指定 actions 和 resource)
./aws-grant.sh allow custom "s3:PutObject" "arn:aws:s3:::my-bucket/*"

# 完成后立即收回所有临时权限
./aws-grant.sh revoke

# 查看当前临时权限状态
./aws-grant.sh status

# 查看授权历史
./aws-grant.sh log

工作流程:

  1. AI 提出需要创建某个 AWS 资源 (如 "我需要创建一个 S3 桶")
  2. 你审查请求,运行 ./aws-grant.sh allow s3-write
  3. 脚本显示将授予的具体 IAM Actions 和风险等级,你输入 yes 确认
  4. AI 执行操作
  5. 完成后运行 ./aws-grant.sh revoke 收回,或等待自动过期

可用的预设权限组:

权限组 说明 风险
s3-write S3 读写
s3-upload S3 仅上传 (不能删除)
ec2-create 创建 EC2/VPC/安全组
ec2-manage 启动/停止/重启实例
lambda-deploy 创建/更新 Lambda
dynamodb-write DynamoDB 读写
rds-create 创建 RDS 实例
ecs-deploy ECS 集群/服务/镜像
alb-create 创建 ALB/目标组
cfn-deploy CloudFormation 部署
messaging-create SQS/SNS/EventBridge
bedrock-resources Bedrock Agent/知识库
iam-limited 创建 IAM 角色/策略

消息渠道配置

OpenClaw 支持多种消息平台。在 config.env 中填入对应 token,部署脚本会自动配置。也可以部署后在 Web UI 中手动添加。

Telegram (推荐,最简单)

  1. 在 Telegram 中搜索 @BotFather 并发送 /newbot
  2. 按提示设置机器人名称和用户名 (用户名必须以 bot 结尾)
  3. 复制 BotFather 返回的 token
  4. config.env 中设置:
    TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
    
  5. 部署后,在 Telegram 中找到你的机器人,发送 /start
  6. 机器人会返回配对码,在 EC2 上运行:
    openclaw pairing approve telegram <配对码>

WhatsApp

WhatsApp 使用 QR 码扫描登录,不需要 token:

  1. 部署完成后运行:
    openclaw channels login
  2. 终端会显示 QR 码
  3. 打开手机 WhatsApp → 设置 → 已关联的设备 → 关联设备
  4. 扫描 QR 码

建议使用单独的手机号码。也可以在 Web UI 的 Channels 页面扫码。

Discord

  1. 访问 Discord Developer Portal
  2. 点击 "New Application" → 进入 "Bot" → "Add Bot"
  3. 启用 Message Content IntentServer Members Intent
  4. 复制 Bot Token
  5. config.env 中设置:
    DISCORD_BOT_TOKEN=MTQ...
    
  6. 生成邀请链接 (OAuth2 → URL Generator → 选择 bot scope + Administrator 权限)
  7. 用链接邀请 Bot 到你的服务器
  8. 部署后在 Discord 中 @你的Bot 即可对话

Slack

  1. 访问 Slack API → "Create New App" → "From scratch"
  2. 启用 Socket Mode → 生成 App Token (xapp-...)
  3. OAuth & Permissions → 添加 Bot Token Scopes:
    • chat:write, channels:history, groups:history, im:history, app_mentions:read
  4. 安装到工作区,复制 Bot Token (xoxb-...)
  5. Event Subscriptions → 订阅 message.*, app_mention
  6. config.env 中设置:
    SLACK_BOT_TOKEN=xoxb-...
    SLACK_APP_TOKEN=xapp-...
    
  7. 部署后在 Slack 频道中 /invite @你的Bot,然后 @它对话

部署后添加渠道

也可以先不配置任何渠道,部署完成后通过以下方式添加:

# 通过 CLI 添加
openclaw channels add --channel telegram --token <bot-token>
openclaw channels add --channel discord --token <bot-token>

# 或直接编辑配置文件
vim ~/.openclaw/openclaw.json

# 重启生效
systemctl --user restart openclaw-gateway

或者在 Web UI (http://localhost:18789) 的 Channels 页面中操作。

部署后管理

# 查看状态
openclaw status

# 查看日志
openclaw logs -f

# 重启服务
systemctl --user restart openclaw-gateway

# 查看 Gateway Token
cat ~/.openclaw/gateway_token.txt

# 切换模型
./switch-model.sh              # 快速切换
./switch-model.sh --multi      # 精细配置
./switch-model.sh --show       # 查看当前模型配置

# 聊天中切换 (在任何渠道发送)
# /model opus
# /thinking high

访问方式

默认部署后 Gateway 绑定到 loopback,不暴露任何公网端口。消息渠道 (Telegram/WhatsApp/Discord/Slack) 是出站连接,不需要入站端口,始终正常工作。

访问 Web UI 有以下安全方式:

方式一: SSM 端口转发 (最安全,推荐)

零公网端口,所有流量走 AWS 加密内网。

# 配置 (在 EC2 上运行)
./setup-secure-access.sh ssm

# 使用 (在本地电脑运行,保持终端打开)
aws ssm start-session \
  --target <INSTANCE_ID> \
  --region <REGION> \
  --document-name AWS-StartPortForwardingSession \
  --parameters '{"portNumber":["18789"],"localPortNumber":["18789"]}'

然后打开 http://localhost:18789/?token=<TOKEN>

前提: EC2 需要 IAM Role (AmazonSSMManagedInstanceCore),本地需要 SSM 插件。

方式二: ALB + Cognito 认证 (团队推荐)

HTTPS 访问 + 用户登录认证,支持多人使用。

./setup-secure-access.sh alb-cognito

自动创建 ALB、Cognito 用户池、安全组。访问时需要先登录。费用约 $16/月 (ALB)。

方式三: ALB + IP 白名单

仅允许指定 IP 地址访问。

./setup-secure-access.sh alb-ip

锁定安全组

移除所有公网入站规则,之后只能通过 SSM 或消息渠道访问:

./setup-secure-access.sh lockdown

项目结构

openclaw-deploy/
├── deploy.sh                # 一键部署脚本
├── config.env               # 部署配置 (模型/渠道/参数)
├── switch-model.sh          # 部署后切换模型
├── setup-secure-access.sh   # 安全访问配置 (SSM/ALB/锁定)
├── setup-iam-policy.sh      # IAM 安全权限 + exec-approvals + sandbox
├── aws-grant.sh             # 临时权限授予/收回 (按需开门)
├── uninstall.sh             # 卸载脚本
└── README.md                # 本文档

致谢

About

OpenClaw EC2 一键部署工具 — Bedrock 集成、IAM 安全策略、临时权限管理

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages