Install
openclaw skills install @thcjp/aws-cloud-architectAWS云架构师是一个基于AWS CLI的智能云基础设施管理助手。针对传统AWS管理"安全误配置风险、成本失控、读写权限混淆、区域配置复杂、IAM排障困难、密钥泄露风险"六大痛点,构建了安全审计剧本、成本优化工作流、分层权限模型、智能上下文检测和零暴露密钥规则五大核心能力。 核心能力包括:默认只读查询保障安全;写操作与破坏性操作需双重确认;支持--dry-run预演;身份识别先行(sts get-caller-identity);资源清单/健康检查/安全审计/成本分析全场景覆盖;区域与配置文件智能检测。 适用场景:AWS资源盘点与查询、CloudWatch健康监控与错误排查、IAM与S3安全审计、Cost Explorer成本分析、基础设施变更规划、多区域多账号管理、安全合规检查。 差异化亮点:相比原始版本,新增安全审计剧本(IAM/S3/SG/KMS检查清单)、成本优化工作流(空闲资源识别+建议生成)、分层权限模型(只读→dry-run→确认写→破坏性)、智能上下文检测(环境变量→配置文件→默认值)、零暴露密钥硬约束、批量查询缓存策略、FAQ与故障排查决策树。 触发关键词:AWS云架构师、基础设施管理、安全审计、成本优化、AWS CLI、aws-cloud-architect、资源盘点
openclaw skills install @thcjp/aws-cloud-architect使用本地AWS CLI回答关于AWS资源的问题。默认只读查询,仅在用户明确要求变更并确认后执行写/破坏性操作。
aws sts get-caller-identity
--dry-run 预演并展示计划用户明确指定 → 使用用户指定
│未指定
AWS_PROFILE / AWS_REGION 环境变量 → 使用环境变量
│未设置
~/.aws/config 默认配置 → 使用默认
│无配置
询问用户
# 1. 检查环境变量
echo "Profile: ${AWS_PROFILE:-未设置}, Region: ${AWS_REGION:-未设置}"
# 2. 检查配置文件
aws configure list
# 3. 确认身份
aws sts get-caller-identity
结果为区域范围时,明确说明使用的区域。
| 层级 | 操作类型 | 策略 | 示例命令 |
|---|---|---|---|
| L0 只读 | list/describe/get | 直接执行 | aws s3 ls |
| L1 预演 | 写操作(有dry-run) | 展示计划,确认后执行 | aws ec2 run-instances --dry-run |
| L2 确认写 | 写操作(无dry-run) | 列出影响范围,等待确认 | aws s3 cp file.txt s3://bucket/ |
| L3 破坏性 | delete/terminate/destroy | 详细影响分析+确认 | aws ec2 terminate-instances |
| L4 敏感 | IAM凭据/计费 | 双重确认+影响警告 | aws iam create-access-key |
使用 list/describe/get 命令:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType]'
aws s3api list-buckets --query 'Buckets[*].Name'
aws rds describe-db-instances
使用CloudWatch指标/日志查询:
# EC2 CPU利用率
aws cloudwatch get-metric-statistics --namespace AWS/EC2 \
--metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-xxx \
--start-time 2025-01-01T00:00:00Z --end-time 2025-01-02T00:00:00Z \
--period 3600 --statistics Average
# 查询日志
aws logs filter-log-events --log-group-name /aws/lambda/my-function \
--filter-pattern "ERROR" --limit 20
# 列出所有用户
aws iam list-users --query 'Users[*].[UserName,CreateDate]'
# 检查Root账户MFA
aws iam get-account-summary --query 'SummaryMap.AccountMFAEnabled'
# 列出Access Key(不显示密钥值)
aws iam list-access-keys --user-name username
# 检查策略附着
aws iam list-attached-user-policies --user-name username
# 检查公共访问阻止设置
aws s3api get-public-access-block --bucket bucket-name
# 检查Bucket策略
aws s3api get-bucket-policy --bucket bucket-name
# 列出无加密的Bucket
aws s3api get-bucket-encryption --bucket bucket-name # 无返回=未加密
# 检查开放到0.0.0.0/0的规则
aws ec2 describe-security-groups \
--filters Name=ip-permission.cidr,Values=0.0.0.0/0 \
--query 'SecurityGroups[*].[GroupName,IpPermissions]'
# 列出KMS密钥
aws kms list-keys
# 检查密钥轮换
aws kms get-key-rotation-status --key-id key-id
# 月度成本
aws ce get-cost-and-usage --time-period Start=2025-01-01,End=2025-02-01 \
--granularity MONTHLY --metrics BlendedCost \
--group-by Type=SERVICE
# 按服务分组成本
aws ce get-cost-and-usage --time-period Start=2025-01-01,End=2025-02-01 \
--granularity DAILY --metrics BlendedCost \
--group-by Type=SERVICE
# 停止的EC2实例
aws ec2 describe-instances --filters Name=instance-state-name,Values=stopped \
--query 'Reservations[*].Instances[*].[InstanceId,InstanceType]'
# 未挂载的EBS卷
aws ec2 describe-volumes --filters Name=status,Values=available \
--query 'Volumes[*].[VolumeId,Size,VolumeType]'
# 未使用的Elastic IP
aws ec2 describe-addresses --query 'Addresses[?InstanceId==null].[PublicIp,AllocationId]'
对频繁查询的结果进行缓存,减少API调用:
# 缓存资源列表到本地
aws ec2 describe-instances > /tmp/ec2-instances.json
aws s3api list-buckets > /tmp/s3-buckets.json
# 后续查询从缓存读取
cat /tmp/ec2-instances.json | jq '.Reservations[*].Instances[*].InstanceId'
缓存策略:
Q: 如何切换区域?
A: 使用 --region 参数指定,如 aws ec2 describe-instances --region us-west-2。或在环境变量设置 AWS_REGION=us-west-2。结果为区域范围时明确说明使用的区域。
Q: 多账号如何管理?
A: 使用 --profile 参数指定配置文件,如 aws ec2 describe-instances --profile production。配置文件在 ~/.aws/config 中定义。
Q: 命令执行失败提示权限不足?
A: 检查当前身份 aws sts get-caller-identity,确认关联的IAM角色/策略是否包含所需权限。只读操作至少需要ReadOnlyAccess策略。
Q: 如何安全地执行破坏性操作?
A: 1)先用 --dry-run 预演;2)列出精确影响范围;3)等待用户显式确认;4)执行后验证结果。绝不在未确认时执行破坏性操作。
Q: 成本查询返回空?
A: 确认Cost Explorer已在AWS Console中启用。时间格式为 YYYY-MM-DD,结束日期是排他的(不包含当天)。
| 问题 | 原因 | 解决方案 |
|---|---|---|
Unable to locate credentials | 未配置凭据 | 运行 aws configure 或设置环境变量 |
Access Denied | IAM权限不足 | 检查身份 sts get-caller-identity,确认策略 |
| 区域错误 | 不支持的区域 | 确认区域支持目标服务,用 --region 指定 |
| 命令未找到 | AWS CLI版本过旧 | 运行 aws --version,升级到最新版 |
| 超时 | 网络或服务问题 | 重试,检查网络连接,确认服务状态 |
| 输出格式混乱 | 默认输出格式 | 使用 --output table 或 --output json |
| 密钥泄露风险 | 输出含密钥 | 立即停止,绝不在聊天/日志中输出密钥值 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| AWS CLI | 工具 | 必需 | 从aws.amazon.com/cli安装 |
| AWS账户 | 账户 | 必需 | 注册AWS账户 |
| jq | 工具 | 可选(JSON处理) | 从stedolan.github.io/jq安装 |
aws configure 配置,或设置环境变量