Install
openclaw skills install @thcjp/aws-infraopenclaw skills install @thcjp/aws-infra核心功能: 本技能提供和故障排查场景等能力。
通过AWS CLI执行只读基础设施查询,覆盖五大运维场景.
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | AWS Infra Inspector处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
| 能力 | 免费版 | 付费版 |
|---|---|---|
| 基础功能 | 支持 | 支持 |
| AWS Infra Inspector执行只读基础设施查询 | 不支持 | 支持 |
| AWS Infra Inspector成本分析 | 不支持 | 支持 |
| 深度漏洞扫描与CVE关联 | 不支持 | 支持 |
| 安全基线合规审计 | 不支持 | 支持 |
| 批量资产风险评分 | 不支持 | 支持 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
需要配置对应API Key,详见上文环境配置章节
export API_KEY="${API_KEY:?请设置环境变量}"
配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.
aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name,InstanceType]' --output tableaws s3api list-buckets --query 'Buckets[].[Name,CreationDate]' --output tableaws rds describe-db-instances --query 'DBInstances[].[DBInstanceIdentifier,Engine,DBInstanceClass,DBInstanceStatus]' --output tableaws lambda list-functions --query 'Functions[].[FunctionName,Runtime,LastModified]' --output tableaws ec2 describe-instance-status --include-all-instances --query 'InstanceStatuses[].[InstanceId,InstanceStatus.Status,SystemStatus.Status]' --output tableaws rds describe-events --source-type db-instance --duration 60aws cloudwatch describe-alarms --state-value ALARM --query 'MetricAlarms[].[AlarmName,StateValue,MetricName]' --output tableaws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:REGION:ACCOUNT:targetgroup/TG_NAME/TG_IDaws iam list-users --query 'Users[].[UserName,CreateDate,PasswordLastUsed]' --output tableaws ec2 describe-security-groups --query 'SecurityGroups[].[GroupName,IpPermissions[].IpRanges[].CidrIp]' --output tableaws s3api get-bucket-policy-status --bucket BUCKET_NAMEaws iam list-access-keys --user-name USERNAME --query 'AccessKeyMetadata[].[AccessKeyId,CreateDate,Status]' --output tableaws ce get-cost-and-usage --time-period Start=2024-01-01,End=2024-02-01 --granularity MONTHLY --metrics BlendedCostaws ce get-cost-and-usage --time-period Start=2024-01-01,End=2024-02-01 --granularity MONTHLY --metrics BlendedCost --group-by Type=DIMENSION Key=SERVICEaws ce get-cost-and-usage --time-period Start=2024-01-01,End=2024-02-01 --granularity MONTHLY --metrics BlendedCost --group-by Type=DIMENSION Key=REGIONaws ce get-cost-forecast --time-period Start=2024-01-15,End=2024-02-15 --granularity MONTHLY --metric BLENDED_COSTaws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances --max-results 20aws configservice get-resource-config-history --resource-type AWS::EC2::Instance --resource-id i-1234567890abcdef0 --limit 10aws cloudformation describe-change-set --change-set-name CHANGESET_NAME --stack-name STACK_NAME详细的输入输出格式请参考下方章节说明。
| 场景 | 典型输入 | 输出内容 | 涉及能力 |
|---|---|---|---|
| 日常运维巡检 | "检查所有EC2实例状态" | 实例ID、状态、状态检查结果的表格 | 健康检查 |
| 资源盘点 | "列出我们账户下的所有S3存储桶" | 存储桶名称、创建时间、区域列表 | 资源清单 |
| 安全合规审计 | "检查是否有安全组开放了0.0.0.0/0" | 安全组名称、规则、风险等级报告 | 安全审计 |
| 月度成本复盘 | "查询上个月各服务的AWS成本" | 按服务分组的成本表格和占比图表 | 成本分析 |
| 故障排查 | "查找最近谁修改了RDS配置" | CloudTrail事件列表(时间、用户、操作) | 变更追踪 |
| 跨区域资源统计 | "统计所有区域的EC2实例数量" | 各区域实例数量汇总表 | 资源清单+跨区域 |
| 不适用于: 需要创建/修改/删除AWS资源的操作(本Skill默认只读),需要实时监控指标(应使用CloudWatch Dashboard) |
aws sts get-caller-identity
# 确认当前账户和用户,确保有足够的只读权限
# 查看当前默认区域
aws configure get region
# ...
# 查询所有可用区域
aws ec2 describe-regions --query 'Regions[].RegionName' --output text
# ...
# 如需切换区域
aws configure set region us-west-2
根据运维需求选择对应能力:
describe-instances)describe-instance-status)describe-security-groups)get-cost-and-usage)lookup-events)# 表格格式 (适合人类阅读)
--output table
# ...
# JSON格式 (适合程序处理)
--output json
# ...
# 文本格式 (适合脚本提取)
--output text
本Skill默认只读。如用户请求变更操作:
--dry-run 参数预检场景: 运维人员需要快速检查所有EC2实例的运行状态
# 查询所有实例的状态检查结果
aws ec2 describe-instance-status --include-all-instances \
--query 'InstanceStatuses[].Status,SystemStatus.Status,AvailabilityZone]' \
--output table
预期输出:
------------------------------------------------------------------------------------
| DescribeInstanceStatus |
+----------------------+-------------------+-----------------+--------------------+
| i-0abc123def456789 | ok | ok | us-east-1a |
| i-0def456ghi789123 | impaired | ok | us-east-1b |
| i-0ghi789jkl123456 | ok | insufficient | us-east-1c |
+----------------------+-------------------+-----------------+--------------------+
分析: i-0def456ghi789123的实例状态为impaired,需要进一步检查;i-0ghi789jkl123456的系统状态为insufficient,可能需要重启或联系AWS支持.
场景: 安全团队需要检查是否有安全组对互联网开放了敏感端口
# 查询所有安全组中开放0.0.0.0/0的规则
aws ec2 describe-security-groups \
--filters Name=ip-permission.cidr,Values=0.0.0.0/0 \
--query 'SecurityGroups[].[GroupName,GroupId,IpPermissions[].[FromPort,ToPort,IpProtocol,IpRanges[].CidrIp]]' \
--output table
预期输出:
------------------------------------------------------------------------------
| DescribeSecurityGroups |
+------------+-----------------+----------+--------+-------------+------------+
| web-sg | sg-0abc123 | 80 | 80 | tcp | 0.0.0.0/0 |
| web-sg | sg-0abc123 | 443 | 443 | tcp | 0.0.0.0/0 |
| db-sg | sg-0def456 | 3306 | 3306 | tcp | 0.0.0.0/0 |
+------------+-----------------+----------+--------+-------------+------------+
分析: db-sg安全组对0.0.0.0/0开放了3306端口(MySQL),这是高风险配置,数据库不应直接暴露在公网。建议立即修改安全组规则,仅允许应用服务器的内网IP访问.
场景: 财务团队需要了解上个月各AWS服务的成本分布
aws ce get-cost-and-usage \
--time-period Start=2024-06-01,End=2024-07-01 \
--granularity MONTHLY \
--metrics BlendedCost \
--group-by Type=DIMENSION Key=SERVICE \
--query 'ResultsByGroups[].[Keys[0],Metrics.BlendedCost.Amount]' \
--output table
预期输出:
------------------------------------------------------
| GetCostAndUsage |
+------------------------+----------------------------+
| Amazon Elastic Compute Cloud | 4523.67 |
| Amazon Simple Storage Service| 892.15 |
| Amazon RDS Service | 2156.43 |
| Amazon CloudFront | 234.89 |
| AWS Lambda | 67.22 |
+------------------------+----------------------------+
分析: EC2成本占比最高(57%),建议检查是否有闲置实例可优化;RDS成本较高(27%),可考虑预留实例或Savings Plans降低成本.
| 错误场景 | 错误信息 | 原因分析 | 处理方式 |
|---|---|---|---|
| 凭证未配置 | Unable to locate credentials | 未运行aws configure或环境变量未设置 | 运行aws configure配置Access Key和Secret Key |
| 凭证过期 | The security token included in the request is expired | 使用了临时凭证(STS)且已过期 | 运行aws sts get-session-token获取新凭证,或使用长期凭证 |
| 权限不足 | User: arn:aws:iam::未指定 is not authorized to perform: ec2:DescribeInstances | IAM用户缺少对应API的调用权限 | 在IAM控制台为用户附加对应服务的ReadOnlyAccess策略 |
| 区域错误 | Invalid Availability Zone 或查询结果为空 | 指定的区域不正确或该区域无资源 | 使用aws ec2 describe-regions确认区域名称,切换区域重新查询 |
| 限流(Throttling) | Rate exceeded | API调用频率超过限制(默认每秒20次) | 添加--cli-read-timeout 60 --cli-connect-timeout 60参数,或减少并发查询 |
| Cost Explorer未启用 | Policy doesn't allow Cost Explorer access | 账户未启用Cost Explorer或无权限 | 在AWS控制台Billing页面启用Cost Explorer,等待24小时后数据可用 |
| CloudTrail查询超时 | LookupEvents operation: Rate exceeded | CloudTrail API限流 | 缩小时间范围,使用--start-time和--end-time参数分段查询 |
| S3存储桶不存在 | NoSuchBucket | 存储桶名称拼写错误或属于其他账户 | 使用aws s3api list-buckets确认存储桶名称,检查是否跨账户访问 |
A: AWS CLI默认只查询当前配置的区域。跨区域查询有两种方式:
# 方式1: 逐个区域查询
for region in us-east-1 us-west-2 eu-west-1 ap-northeast-1; do
echo "=== $region ==="
aws ec2 describe-instances --region $region --query 'Reservations[].Instances[].InstanceId' --output text
done
# ...
# 方式2: 使用AWS Config聚合查询 (需要预先配置)
aws configservice select-aggregate-resource-config \
--expression "SELECT resourceId WHERE resourceType = 'AWS::EC2::Instance'" \
--configuration-aggregator-name my-aggregator
A: 通过--profile参数或AWS_PROFILE环境变量切换:
# 方式1: 命令行指定
aws ec2 describe-instances --profile production
# ...
# 方式2: 环境变量
export AWS_PROFILE=production
aws ec2 describe-instances
# ...
# 配置多个Profile (在~/.aws/credentials中)
# [production]
# aws_access_key_id = AKIAXXXXXXXX
# aws_secret_access_key = YOUR_API_KEY
# [staging]
# aws_access_key_id = AKIAYYYYYYYY
# aws_secret_access_key = yyyyyyyyyyyy
A: 需要先获取临时凭证:
# 获取MFA临时凭证 (有效期12小时)
aws sts get-session-token --serial-number arn:aws:iam::123456789012:mfa/user --token-code 123456
# ...
# 将返回的临时凭证配置到Profile
aws configure set aws_access_key_id ASIAXXXXXXXX --profile mfa
aws configure set aws_secret_access_key <参数> --profile mfa
aws configure set aws_session_token <参数> --profile mfa
# ...
# 使用MFA Profile执行查询
aws ec2 describe-instances --profile mfa
A: 使用JMESPath查询语言通过--query参数过滤:
# 只查询运行中的实例
aws ec2 describe-instances --filters Name=instance-state-name,Values=running \
--query 'Reservations[].Instances[].[InstanceId,InstanceType,LaunchTime]'
# ...
# 按标签过滤
aws ec2 describe-instances --filters "Name=tag:Environment,Values=production" \
Instances[].InstanceId'
# ...
# 使用JMESPath高级过滤
aws ec2 describe-instances \
Instances[?State.Name==`running` && InstanceType==`t3.medium`].[InstanceId,Tags[?Key==`Name`].Value | [0]]'
A: 使用--output参数配合重定向:
# 导出为JSON
aws ec2 describe-instances --output json > instances.json
# ...
# 导出为CSV (使用jq转换)
aws ec2 describe-instances --output json | jq -r '.Reservations[].Instances[] | [.InstanceId,.InstanceType,.State.Name] | @csv' > instances.csv
# ...
# 导出为表格文本
aws ec2 describe-instances --output table > instances.txt
lookup-events仅支持查询最近90天的事件,更早的事件需使用Athena查询S3日志--region参数| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 查询结果为空 | 指定区域无资源或查询条件错误 | 检查指定区域是否有资源,确认查询条件是否正确 | 确认区域和查询条件,尝试其他查询条件或区域 |
| 命令执行失败 | 权限不足或网络问题 | 检查AWS CLI配置的权限,确认网络连接 | 确保AWS CLI权限配置正确,检查网络连接并重试 |
| 成本数据延迟 | Cost Explorer数据更新延迟 | 确认Cost Explorer数据更新时间,等待数据更新 | 等待Cost Explorer数据更新后重试查询 |
| CloudTrail事件查询失败 | CloudTrail未启用或事件数据不足 | 检查CloudTrail是否启用,确认事件数据是否足够 | 启用CloudTrail并确保有足够的事件数据,尝试查询 |
| 资源清单查询超时 | 资源数量过多或网络延迟 | 检查资源数量,确认网络连接 | 减少查询的资源数量,优化网络连接或使用分页查询 |
| 场景 | 提升效率的指标 | 量化提升 |
|---|---|---|
| 日常运维巡检 | 检查时间缩短 | 50% |
| 安全合规审计 | 检查时间缩短 | 30% |
| 成本分析 | 成本分析时间缩短 | 40% |
| 变更追踪 | 变更追踪时间缩短 | 60% |
| 资源清单查询 | 资源查询时间缩短 | 70% |
| 指标 | 传统方法 | AWS基础设施检查工具 |
|---|---|---|
| 查询速度 | 手动查询,效率低 | 自动化查询,效率高 |
| 数据准确性 | 人工检查,易出错 | 自动化检查,数据准确 |
| 资源覆盖范围 | 难以全面覆盖 | 全面覆盖所有AWS资源 |
| 安全性 | 人工检查,安全风险高 | 自动化检查,安全风险低 |
| 成本效益 | 人工检查,成本高 | 自动化检查,成本低 |
| 风险类型 | 防范措施 |
|---|---|
| API密钥泄露 | 通过环境变量配置,禁止硬编码到代码或配置文件中 |
| 命令执行风险 | 仅执行白名单命令,避免拼接用户输入到命令行参数中 |
| 网络通信安全 | 使用HTTPS协议,验证SSL证书有效性 |
| 敏感数据暴露 | 输出结果中不包含密钥、令牌等敏感信息 |
| 使用前请确认已阅读依赖说明章节,确保运行环境满足安全要求。 |
| 操作场景 | 手动耗时 | 自动化耗时 | 效率提升 |
|---|---|---|---|
| 文件解析与提取 | 5-10分钟/个 | <5秒/个 | 60-120x |
| 批量文件处理(100个) | 8-16小时 | <5分钟 | 96-192x |
| API调用与响应解析 | 2-3分钟/次 | <1秒/次 | 120-180x |
| 多接口数据聚合 | 15-30分钟 | <10秒 | 90-180x |
| 命令执行与结果收集 | 3-5分钟/次 | <2秒/次 | 90-150x |
| 重复任务批量执行 | 因任务而异 | 线性缩减 | 5-50x |
| 错误排查与修复 | 10-30分钟 | <30秒 | 20-60x |
| 对比维度 | AWS基础设施检查工具 | 传统手动方式 | 通用脚本工具 |
|---|---|---|---|
| 自动化程度 | 全流程自动 | 完全手动 | 部分自动 |
| 错误处理 | 内置错误恢复 | 依赖人工经验 | 基本try-catch |
| 可复用性 | 参数化配置 | 一次性脚本 | 模板化 |
| 安全合规 | 内置安全检查 | 无安全保障 | 无安全保障 |
| 适用场景 | 通过AWS CLI执行只读基础设施查询,覆盖实例清单、健康检查、安全审计、成本分 | 通用场景 | 通用场景 |
A1: 通过AWS CLI执行只读基础设施查询,覆盖实例清单、健康检查、安全审计、成本分析、变更追踪五大场景。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。