核心功能: 本技能提供和故障排查场景等能力。
AWS Infra Inspector
通过AWS CLI执行只读基础设施查询,覆盖五大运维场景.
输入参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | AWS Infra Inspector处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
付费版扩展能力
| 能力 | 免费版 | 付费版 |
|---|---|---|
| 基础功能 | 支持 | 支持 |
| AWS Infra Inspector执行只读基础设施查询 | 不支持 | 支持 |
| AWS Infra Inspector成本分析 | 不支持 | 支持 |
| 深度漏洞扫描与CVE关联 | 不支持 | 支持 |
| 安全基线合规审计 | 不支持 | 支持 |
| 批量资产风险评分 | 不支持 | 支持 |
环境要求
运行环境
- Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
- 操作系统: Windows / macOS / Linux
依赖项
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
API Key 配置
需要配置对应API Key,详见上文环境配置章节
可用性分类
- 分类: MD+EXEC() API Key配置方式:
export API_KEY="${API_KEY:?请设置环境变量}"
配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.
功能能力
1. 资源清单查询 (Inventory)
- EC2实例清单: 查询所有区域的EC2实例ID、状态、类型
aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name,InstanceType]' --output table - S3存储桶列表: 列出账户下所有S3存储桶名称和创建时间
aws s3api list-buckets --query 'Buckets[].[Name,CreationDate]' --output table - RDS数据库实例: 查询RDS实例标识符、引擎类型、实例规格和运行状态
aws rds describe-db-instances --query 'DBInstances[].[DBInstanceIdentifier,Engine,DBInstanceClass,DBInstanceStatus]' --output table - Lambda函数列表: 列出所有Lambda函数名称、运行时和最后修改时间
aws lambda list-functions --query 'Functions[].[FunctionName,Runtime,LastModified]' --output table
2. 健康检查 (Health)
- EC2状态检查: 获取实例系统状态检查和实例状态检查结果
aws ec2 describe-instance-status --include-all-instances --query 'InstanceStatuses[].[InstanceId,InstanceStatus.Status,SystemStatus.Status]' --output table - RDS事件查询: 查询最近60分钟内的RDS事件
aws rds describe-events --source-type db-instance --duration 60 - CloudWatch告警: 列出所有处于ALARM状态的CloudWatch告警
aws cloudwatch describe-alarms --state-value ALARM --query 'MetricAlarms[].[AlarmName,StateValue,MetricName]' --output table - ELB目标健康: 检查负载均衡器目标组的健康状态
aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:REGION:ACCOUNT:targetgroup/TG_NAME/TG_ID
3. 安全审计 (Security)
- IAM用户列表: 查询所有IAM用户及其最后登录时间
aws iam list-users --query 'Users[].[UserName,CreateDate,PasswordLastUsed]' --output table - 安全组规则: 检查安全组的入站和出站规则
aws ec2 describe-security-groups --query 'SecurityGroups[].[GroupName,IpPermissions[].IpRanges[].CidrIp]' --output table - S3存储桶策略: 检查存储桶是否有公共访问权限
aws s3api get-bucket-policy-status --bucket BUCKET_NAME - IAM访问密钥年龄: 检查Access Key的创建时间,识别过期密钥
aws iam list-access-keys --user-name USERNAME --query 'AccessKeyMetadata[].[AccessKeyId,CreateDate,Status]' --output table
4. 成本分析 (Costs)
- 月度总成本: 查询指定月份的总成本
aws ce get-cost-and-usage --time-period Start=2024-01-01,End=2024-02-01 --granularity MONTHLY --metrics BlendedCost - 按服务分组成本: 查询各AWS服务的成本占比
aws ce get-cost-and-usage --time-period Start=2024-01-01,End=2024-02-01 --granularity MONTHLY --metrics BlendedCost --group-by Type=DIMENSION Key=SERVICE - 按区域分组成本: 查询各区域的成本分布
aws ce get-cost-and-usage --time-period Start=2024-01-01,End=2024-02-01 --granularity MONTHLY --metrics BlendedCost --group-by Type=DIMENSION Key=REGION - 成本预测: 获取本月剩余时间的成本预测
aws ce get-cost-forecast --time-period Start=2024-01-15,End=2024-02-15 --granularity MONTHLY --metric BLENDED_COST
5. 变更追踪 (Changes)
- CloudTrail事件查询: 查询特定的API调用事件(如谁启动了实例)
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances --max-results 20 - Config配置历史: 查询资源的配置变更历史
aws configservice get-resource-config-history --resource-type AWS::EC2::Instance --resource-id i-1234567890abcdef0 --limit 10 - CloudFormation变更集: 查看CloudFormation堆栈的待执行变更
aws cloudformation describe-change-set --change-set-name CHANGESET_NAME --stack-name STACK_NAME
初始配置
- 确认运行环境满足依赖说明中的要求
- 在AI Agent对话中调用本技能,提供必要的输入参数
- 检查输出结果,根据需要进行后续处理
详细的输入输出格式请参考下方章节说明。
应用场景
| 场景 | 典型输入 | 输出内容 | 涉及能力 |
|---|---|---|---|
| 日常运维巡检 | "检查所有EC2实例状态" | 实例ID、状态、状态检查结果的表格 | 健康检查 |
| 资源盘点 | "列出我们账户下的所有S3存储桶" | 存储桶名称、创建时间、区域列表 | 资源清单 |
| 安全合规审计 | "检查是否有安全组开放了0.0.0.0/0" | 安全组名称、规则、风险等级报告 | 安全审计 |
| 月度成本复盘 | "查询上个月各服务的AWS成本" | 按服务分组的成本表格和占比图表 | 成本分析 |
| 故障排查 | "查找最近谁修改了RDS配置" | CloudTrail事件列表(时间、用户、操作) | 变更追踪 |
| 跨区域资源统计 | "统计所有区域的EC2实例数量" | 各区域实例数量汇总表 | 资源清单+跨区域 |
| 不适用于: 需要创建/修改/删除AWS资源的操作(本Skill默认只读),需要实时监控指标(应使用CloudWatch Dashboard) |
使用方法
1. 验证身份与权限
aws sts get-caller-identity
# 确认当前账户和用户,确保有足够的只读权限
2. 确定目标区域
# 查看当前默认区域
aws configure get region
# ...
# 查询所有可用区域
aws ec2 describe-regions --query 'Regions[].RegionName' --output text
# ...
# 如需切换区域
aws configure set region us-west-2
3. 执行资源查询
根据运维需求选择对应能力:
- 盘点资源 → 执行Inventory类命令(如
describe-instances) - 检查健康 → 执行Health类命令(如
describe-instance-status) - 审计安全 → 执行Security类命令(如
describe-security-groups) - 分析成本 → 执行Costs类命令(如
get-cost-and-usage) - 追踪变更 → 执行Changes类命令(如
lookup-events)
4. 格式化输出
# 表格格式 (适合人类阅读)
--output table
# ...
# JSON格式 (适合程序处理)
--output json
# ...
# 文本格式 (适合脚本提取)
--output text
5. 安全确认 (仅变更操作)
本Skill默认只读。如用户请求变更操作:
- 明确显示将要执行的完整命令
- 列出可能影响的资源
- 建议使用
--dry-run参数预检 - 等待用户显式确认后才执行
案例展示
案例1: 日常运维巡检 (EC2健康检查)
场景: 运维人员需要快速检查所有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支持.
案例2: 安全合规审计 (检查开放的安全组)
场景: 安全团队需要检查是否有安全组对互联网开放了敏感端口
# 查询所有安全组中开放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访问.
案例3: 月度成本分析 (按服务分组)
场景: 财务团队需要了解上个月各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确认存储桶名称,检查是否跨账户访问 |
疑问解答
Q1: 如何查询多个区域的资源?
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
Q2: 如何使用不同的AWS账户(Profile)?
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
Q3: 如何处理MFA(多因素认证)保护的账户?
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
Q4: 查询结果太多如何过滤?
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]]'
Q5: 如何导出查询结果到文件?
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
功能边界
- 只读模式: 默认不执行任何创建/修改/删除操作,变更操作需用户显式确认
- 成本数据延迟: Cost Explorer的数据通常有12-24小时延迟,当天数据可能不可用
- CloudTrail事件限制:
lookup-events仅支持查询最近90天的事件,更早的事件需使用Athena查询S3日志 - 跨账户查询: 无法直接查询其他AWS账户的资源,需通过AWS Config聚合器或RAM共享
- 区域限制: 某些服务(如CloudFront、IAM)是全球服务,不支持
--region参数 - API限流: AWS API有调用频率限制,大量查询时需要添加重试和退避逻辑
诊断与修复
| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 查询结果为空 | 指定区域无资源或查询条件错误 | 检查指定区域是否有资源,确认查询条件是否正确 | 确认区域和查询条件,尝试其他查询条件或区域 |
| 命令执行失败 | 权限不足或网络问题 | 检查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执行只读基础设施查询,覆盖实例清单、健康检查、安全审计、成本分 | 通用场景 | 通用场景 |
主要功能
- 自动化执行: 通过AWS CLI执行只读基础设施查询,覆盖实例清单、健康检查、安全审计、成本分析、变更追踪五大场景
- 文件处理: 支持多种文件格式的读取、解析和写入操作
- API集成: 通过标准化接口调用外部服务并处理响应
- 命令执行: 在安全沙箱中执行系统命令并收集结果
- 信息检索: 快速搜索和过滤目标数据
FAQ
Q1: AWS基础设施检查工具支持哪些输入格式?
A1: 通过AWS CLI执行只读基础设施查询,覆盖实例清单、健康检查、安全审计、成本分析、变更追踪五大场景。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
Q2: 需要配置API Key吗?
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
Q3: 命令行执行失败怎么办?
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。
AWS基础设施检查工具通用排查步骤
- 检查输入参数: 确认所有必填参数已提供且格式正确
- 查看日志输出: 定位具体错误行和异常类型
- 验证环境配置: 确认依赖库版本和运行环境满足要求
- 逐步调试: 缩小问题范围,隔离故障模块
AWS基础设施检查工具通用排查步骤
- 检查输入参数: 确认所有必填参数已提供且格式正确
- 查看日志输出: 定位具体错误行和异常类型
- 验证环境配置: 确认依赖库版本和运行环境满足要求
- 逐步调试: 缩小问题范围,隔离故障模块
AWS基础设施检查工具通用排查步骤
- 检查输入参数: 确认所有必填参数已提供且格式正确
- 查看日志输出: 定位具体错误行和异常类型
- 验证环境配置: 确认依赖库版本和运行环境满足要求
- 逐步调试: 缩小问题范围,隔离故障模块
AWS基础设施检查工具通用排查步骤
- 检查输入参数: 确认所有必填参数已提供且格式正确
- 查看日志输出: 定位具体错误行和异常类型
- 验证环境配置: 确认依赖库版本和运行环境满足要求
- 逐步调试: 缩小问题范围,隔离故障模块
