microwind/ai-skills/cloud-config-analyzer
Claude Code and agent skill by microwind/ai-skills
Trust tier 3
- community
- By microwind
- AI/ML
- microwind/ai-skills
- cloud-native/cloud-config-analyzer/SKILL.md
- Updated 22 Sep 2026
- Version 1.0.01 version recorded
Source check pending
Checking that the SKILL.md file is still in the repository.
当分析云配置、审查基础设施、优化成本或审计安全时,在部署前验证云资源配置。
Install
npx vskill@latest install microwind/ai-skills/cloud-config-analyzerSKILL.md
云配置分析器技能
概述
云配置是云原生应用的基础。错误的配置会导致数据泄露、成本浪费和安全漏洞。
核心原则: 错误的云资源配置会泄露数据、浪费资金并暴露安全漏洞。
何时使用
始终:
- 部署到云环境之前
- 审查云基础设施
- 优化云成本
- 云资源安全审计
- 配置合规性检查
- 多云环境管理
触发短语:
- "分析云配置"
- "检查云安全"
- "优化云成本"
- "云配置审计"
- "多云配置管理"
- "云合规检查"
云配置分析功能
配置验证
- 云资源配置检查
- 安全策略验证
- 网络配置分析
- 存储配置审查
- 访问权限检查
成本优化
- 资源使用分析
- 成本趋势监控
- 优化建议生成
- 预算超支预警
- 资源规模调整
安全审计
- 安全配置检查
- 权限审计
- 网络安全分析
- 数据加密验证
- 合规性检查
常见云配置问题
安全配置错误
问题:云资源安全配置不当错误示例:- 存储桶公开访问- 安全组规则过于宽松- 密钥硬编码在配置中- 未启用加密解决方案:1. 实施最小权限原则2. 启用默认加密3. 使用密钥管理服务4. 定期安全审计
成本浪费
问题:云资源配置过度导致成本浪费错误示例:- 开发环境使用生产级实例- 未使用自动缩放- 闲置资源未清理- 存储数据冗余解决方案:1. 使用合适的实例类型2. 配置自动缩放3. 定期清理闲置资源4. 实施生命周期管理
网络配置错误
问题:网络配置导致性能或安全问题错误示例:- 跨区域流量未优化- 防火墙规则冲突- DNS配置错误- 负载均衡配置不当解决方案:1. 优化网络拓扑2. 使用CDN加速3. 配置健康检查4. 实施网络分段
代码实现示例
云配置分析器
python
import jsonimport yamlimport boto3from typing import Dict, List, Any, Optional, Tuplefrom dataclasses import dataclassfrom enum import Enumimport refrom datetime import datetime, timedeltaclass CloudProvider(Enum):AWS = "aws"AZURE = "azure"GCP = "gcp"ALIBABA = "alibaba"class ResourceType(Enum):EC2 = "ec2"S3 = "s3"RDS = "rds"LAMBDA = "lambda"VPC = "vpc"SECURITY_GROUP = "security_group"IAM = "iam"class RiskLevel(Enum):LOW = "low"MEDIUM = "medium"HIGH = "high"CRITICAL = "critical"@dataclassclass CloudResource:"""云资源"""id: strtype: ResourceTypeprovider: CloudProviderregion: strconfig: Dict[str, Any]tags: Dict[str, str]created_at: datetime@dataclassclass SecurityIssue:"""安全问题"""resource_id: strissue_type: strdescription: strrisk_level: RiskLevelrecommendation: str@dataclassclass CostIssue:"""成本问题"""resource_id: strissue_type: strdescription: strpotential_savings: floatrecommendation: str@dataclassclass ComplianceIssue:"""合规问题"""resource_id: strstandard: strrequirement: strstatus: strremediation: strclass CloudConfigAnalyzer:"""云配置分析器"""def __init__(self, provider: CloudProvider = CloudProvider.AWS):self.provider = providerself.client = self._initialize_client()self.security_rules = self._load_security_rules()self.cost_rules = self._load_cost_rules()self.compliance_rules = self._load_compliance_rules()def _initialize_client(self):"""初始化云客户端"""if self.provider == CloudProvider.AWS:return boto3.client('ec2')elif self.provider == CloudProvider.AZURE:# Azure client initializationpasselif self.provider == CloudProvider.GCP:# GCP client initializationpassreturn Nonedef analyze_security(self, resources: List[CloudResource]) -> List[SecurityIssue]:"""分析安全配置"""issues = []for resource in resources:# 检查特定资源类型的安全问题if resource.type == ResourceType.S3:issues.extend(self._analyze_s3_security(resource))elif resource.type == ResourceType.EC2:issues.extend(self._analyze_ec2_security(resource))elif resource.type == ResourceType.SECURITY_GROUP:issues.extend(self._analyze_security_group(resource))elif resource.type == ResourceType.IAM:issues.extend(self._analyze_iam_security(resource))return issuesdef _analyze_s3_security(self, resource: CloudResource) -> List[SecurityIssue]:"""分析S3安全配置"""issues = []config = resource.config# 检查公开访问if config.get('public_read', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="public_access",description="S3存储桶配置了公开读取访问",risk_level=RiskLevel.HIGH,recommendation="禁用公开访问,使用IAM策略控制访问"))# 检查加密if not config.get('encryption_enabled', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="encryption_disabled",description="S3存储桶未启用加密",risk_level=RiskLevel.MEDIUM,recommendation="启用S3默认加密"))# 检查版本控制if not config.get('versioning_enabled', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="versioning_disabled",description="S3存储桶未启用版本控制",risk_level=RiskLevel.MEDIUM,recommendation="启用S3版本控制以防止意外删除"))# 检查访问日志if not config.get('access_logging_enabled', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="logging_disabled",description="S3存储桶未启用访问日志",risk_level=RiskLevel.LOW,recommendation="启用S3访问日志以监控访问模式"))return issuesdef _analyze_ec2_security(self, resource: CloudResource) -> List[SecurityIssue]:"""分析EC2安全配置"""issues = []config = resource.config# 检查公开端口public_ports = config.get('public_ports', [])dangerous_ports = [22, 3389, 3306, 5432, 1433]for port in public_ports:if port in dangerous_ports:issues.append(SecurityIssue(resource_id=resource.id,issue_type="dangerous_public_port",description=f"EC2实例公开了危险端口: {port}",risk_level=RiskLevel.HIGH,recommendation=f"限制端口{port}的访问,仅允许特定IP访问"))# 检查IAM角色if not config.get('iam_role_attached', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="no_iam_role",description="EC2实例未附加IAM角色",risk_level=RiskLevel.MEDIUM,recommendation="为EC2实例附加适当的IAM角色"))# 检查监控if not config.get('detailed_monitoring', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="no_detailed_monitoring",description="EC2实例未启用详细监控",risk_level=RiskLevel.LOW,recommendation="启用详细监控以获得更好的性能洞察"))return issuesdef _analyze_security_group(self, resource: CloudResource) -> List[SecurityIssue]:"""分析安全组配置"""issues = []config = resource.config# 检查0.0.0.0/0规则rules = config.get('rules', [])for rule in rules:if rule.get('cidr') == '0.0.0.0/0' and rule.get('port') in [22, 3389]:issues.append(SecurityIssue(resource_id=resource.id,issue_type="wide_open_admin_port",description=f"管理端口{rule.get('port')}对所有IP开放",risk_level=RiskLevel.CRITICAL,recommendation=f"限制端口{rule.get('port')}仅访问特定IP"))return issuesdef _analyze_iam_security(self, resource: CloudResource) -> List[SecurityIssue]:"""分析IAM安全配置"""issues = []config = resource.config# 检查管理员权限if config.get('has_admin_privileges', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="excessive_privileges",description="IAM用户/角色拥有管理员权限",risk_level=RiskLevel.HIGH,recommendation="遵循最小权限原则,仅授予必要权限"))# 检查MFAif not config.get('mfa_enabled', False):issues.append(SecurityIssue(resource_id=resource.id,issue_type="no_mfa",description="IAM用户未启用多因素认证",risk_level=RiskLevel.HIGH,recommendation="为所有IAM用户启用MFA"))# 检查访问密钥if config.get('has_access_keys', False) and config.get('key_age_days', 0) > 90:issues.append(SecurityIssue(resource_id=resource.id,issue_type="old_access_keys",description="访问密钥使用时间超过90天",risk_level=RiskLevel.MEDIUM,recommendation="定期轮换访问密钥"))return issuesdef analyze_costs(self, resources: List[CloudResource]) -> List[CostIssue]:"""分析成本配置"""issues = []for resource in resources:if resource.type == ResourceType.EC2:issues.extend(self._analyze_ec2_costs(resource))elif resource.type == ResourceType.S3:issues.extend(self._analyze_s3_costs(resource))elif resource.type == ResourceType.RDS:issues.extend(self._analyze_rds_costs(resource))return issuesdef _analyze_ec2_costs(self, resource: CloudResource) -> List[CostIssue]:"""分析EC2成本"""issues = []config = resource.config# 检查实例类型instance_type = config.get('instance_type', '')if instance_type.startswith('t2') and config.get('environment') == 'production':issues.append(CostIssue(resource_id=resource.id,issue_type="burstable_instance_in_prod",description="生产环境使用突发性能实例",potential_savings=50.0,recommendation="在生产环境使用固定性能实例"))# 检查利用率cpu_utilization = config.get('cpu_utilization', 0)if cpu_utilization < 10:issues.append(CostIssue(resource_id=resource.id,issue_type="low_utilization",description=f"EC2实例CPU利用率过低: {cpu_utilization}%",potential_savings=80.0,recommendation="考虑缩小实例规模或使用自动缩放"))# 检查未使用实例if config.get('status') == 'stopped' and config.get('stopped_days', 0) > 7:issues.append(CostIssue(resource_id=resource.id,issue_type="unused_instance",description=f"EC2实例已停止{config.get('stopped_days')}天",potential_savings=100.0,recommendation="终止未使用的实例或使用实例计划"))return issuesdef _analyze_s3_costs(self, resource: CloudResource) -> List[CostIssue]:"""分析S3成本"""issues = []config = resource.config# 检查存储类别storage_class = config.get('storage_class', 'STANDARD')last_access_days = config.get('last_access_days', 0)if storage_class == 'STANDARD' and last_access_days > 30:issues.append(CostIssue(resource_id=resource.id,issue_type="infrequent_access",description="数据超过30天未访问但仍使用标准存储",potential_savings=40.0,recommendation="将不常访问的数据迁移到低频访问存储"))# 检查生命周期策略if not config.get('lifecycle_policy_enabled', False):issues.append(CostIssue(resource_id=resource.id,issue_type="no_lifecycle_policy",description="S3存储桶未配置生命周期策略",potential_savings=60.0,recommendation="配置生命周期策略自动转换存储类别"))return issuesdef _analyze_rds_costs(self, resource: CloudResource) -> List[CostIssue]:"""分析RDS成本"""issues = []config = resource.config# 检查实例大小insta
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingcloud-native/cloud-config-analyzer/SKILL.md
Popularity
- Repository stars
- 51
- Repository forks
- 13
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/microwind/ai-skills/cloud-config-analyzer)Something wrong with this skill or its page? Tell us.