在当前 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 中启用所需模型
- 部署脚本会自动检查模型是否可用,不可用时会给出控制台链接
支持三种认证方式,在 config.env 中配置:
EC2 实例绑定 IAM Role 后无需任何凭证配置,脚本自动检测。
# 部署后创建安全 IAM Role
./setup-iam-policy.sh --create适用于本地机器、非 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。
已配置 aws sso login 的环境可以直接使用 Profile。
# 在 config.env 中设置
AWS_PROFILE=my-sso-profileOpenClaw 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允许的操作 (安全):
- 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: 所有操作
配置后 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) 会被拒绝或需要人工确认。
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工作流程:
- AI 提出需要创建某个 AWS 资源 (如 "我需要创建一个 S3 桶")
- 你审查请求,运行
./aws-grant.sh allow s3-write - 脚本显示将授予的具体 IAM Actions 和风险等级,你输入
yes确认 - AI 执行操作
- 完成后运行
./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 中搜索 @BotFather 并发送
/newbot - 按提示设置机器人名称和用户名 (用户名必须以
bot结尾) - 复制 BotFather 返回的 token
- 在
config.env中设置:TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 - 部署后,在 Telegram 中找到你的机器人,发送
/start - 机器人会返回配对码,在 EC2 上运行:
openclaw pairing approve telegram <配对码>
WhatsApp 使用 QR 码扫描登录,不需要 token:
- 部署完成后运行:
openclaw channels login
- 终端会显示 QR 码
- 打开手机 WhatsApp → 设置 → 已关联的设备 → 关联设备
- 扫描 QR 码
建议使用单独的手机号码。也可以在 Web UI 的 Channels 页面扫码。
- 访问 Discord Developer Portal
- 点击 "New Application" → 进入 "Bot" → "Add Bot"
- 启用 Message Content Intent 和 Server Members Intent
- 复制 Bot Token
- 在
config.env中设置:DISCORD_BOT_TOKEN=MTQ... - 生成邀请链接 (OAuth2 → URL Generator → 选择
botscope +Administrator权限) - 用链接邀请 Bot 到你的服务器
- 部署后在 Discord 中 @你的Bot 即可对话
- 访问 Slack API → "Create New App" → "From scratch"
- 启用 Socket Mode → 生成 App Token (
xapp-...) - OAuth & Permissions → 添加 Bot Token Scopes:
chat:write,channels:history,groups:history,im:history,app_mentions:read
- 安装到工作区,复制 Bot Token (
xoxb-...) - Event Subscriptions → 订阅
message.*,app_mention - 在
config.env中设置:SLACK_BOT_TOKEN=xoxb-... SLACK_APP_TOKEN=xapp-... - 部署后在 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 有以下安全方式:
零公网端口,所有流量走 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 插件。
HTTPS 访问 + 用户登录认证,支持多人使用。
./setup-secure-access.sh alb-cognito自动创建 ALB、Cognito 用户池、安全组。访问时需要先登录。费用约 $16/月 (ALB)。
仅允许指定 IP 地址访问。
./setup-secure-access.sh alb-ip移除所有公网入站规则,之后只能通过 SSM 或消息渠道访问:
./setup-secure-access.sh lockdownopenclaw-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 # 本文档
- OpenClaw - 开源个人 AI 助手
- sample-OpenClaw-on-AWS-with-Bedrock - AWS 部署参考