Config 配置审计服务助手
使用scripts中的脚本,通过Config服务,查询云上资源情况、资源配置、资源schema、云服务的预置合规规则。具体有如下能力:
- 查询资源概览;
- 查询资源Schema;
- 按条件通过SQL查询资源;
- 资源合规性分析:包含但不限于从以下维度分析资源配置,'为事件响应做好准备', '优化成本', '身份管理', '保护数据完整性', '保护配置', '加密传输中的数据', '加密静态数据', '建立日志记录和监控', '强制执行最低权限', '提高可用性', '提高韧性', '管理机密', '管理漏洞', '管理规格', '限制网络访问', '资源管理';
前置条件
环境变量配置
在使用此技能前,需要确保以下环境变量已正确配置。这些是访问华为云Config服务的必要凭证。
必需的环境变量:
HUAWEICLOUD_AK - 访问密钥(Access Key)
HUAWEICLOUD_SK - 秘密密钥(Secret Access Key)
重要提示:
- 这些环境变量包含敏感信息,检查配置时严禁在控制台打印
- 用户配置的AK仅需要
Config ReadOnlyAccess的权限,用户无需过度授权
配置步骤:
Windows PowerShell 配置:
$env:HUAWEICLOUD_AK="your_access_key"
$env:HUAWEICLOUD_SK="your_secret_key"
或通过系统环境变量配置:
- Windows: 在"系统属性" > "环境变量"中设置
- Linux/Mac: 在
~/.bashrc 或 ~/.zshrc 中添加 export 命令
验证配置:
# 验证但不打印敏感信息
if (-not $env:HUAWEICLOUD_AK) { Write-Error "HUAWEICLOUD_AK 未配置" }
依赖安装
确保已安装以下Python依赖:
pip install huaweicloudsdkconfig huaweicloudsdkcore
工作流程
资源查询
1. 查询资源概览
获取华为云上所有资源的汇总统计信息。
命令:
python scripts/query_Config_resource_summary.py
参数说明:
--provider: 可选,表示只查询某个云服务的资源概览, 示例:
--region_id: 可选,表示只查询某个区域的资源概览, 示例:
cn-north-4: 北京四
cn-east-3: 上海一
global: 全局
输出格式:
- JSON格式,包含各区域、各服务类型的资源数量统计
- 示例:
[
{
"provider": "vpc",
"type": "vpcs",
"region_id": "cn-north-1",
"cnt": 5
},
{
"provider": "kms",
"type": "keys",
"region_id": "cn-north-4",
"cnt": 2
},
{
"provider": "iam",
"type": "users",
"region_id": "global",
"cnt": 5
}
]
使用场景:
- 快速了解云上资源分布
- 识别资源密集的区域和服务
- 为资源审计、成本优化、安全配置等场景提供基础数据
2. 查询资源Schema
获取指定资源类型的详细结构定义,包括所有可用字段及其类型。
命令:
python scripts/query_Config_resource_schema.py --resource_type=obs.buckets
参数说明:
--resource_type: 资源类型标识符,格式为 provider.type, 示例:
obs.buckets: 对象存储桶、OBS桶;
ecs.cloudservers: 云服务器、虚机、ECS;
iam.users: IAM用户;
vpc.securityGroups : VPC安全组;
fgs.functions: 函数工作流、函数、FunctionGraph;
输出格式:
- JSON格式,包含资源的完整Schema定义
- 包含字段名称、类型、描述等信息
使用场景:
- 了解资源结构和可用字段
- 编写SQL查询前确定查询字段
- 理解资源的配置属性
3. 按条件查询资源(高级SQL查询)
通过SQL语句进行复杂的资源查询,支持多条件筛选、聚合分析等。
支持的查询字段:
- 基础字段:
id, name, provider, type, region_id, project_id, created, updated, tag
- 扩展字段:
properties (JSON对象,包含具体资源配置,每种资源类型的结构与资源schema保持一致)
SQL语法特点:
- 只能查询
resources 表
- 支持标准SQL语法: SELECT, WHERE, GROUP BY, ORDER BY
- 支持数组操作:
transform, filter, any_match, contains
- 支持日期函数:
date_diff, date_parse
重要提示:
- 使用前请先查询资源Schema了解可用字段
- 参考
scripts/sql-example.json 查看丰富的查询示例
- SQL语句需要用双引号包裹,内部字符串使用单引号
- 如果没有查询到资源,查询资源概览已确认云上资源分布
示例1: 查询特定区域的所有资源
首先确定查询需求,生成SQL语句:
select id, name, provider, type, region_id, properties
from resources
where region_id = 'cn-north-4'
执行查询:
python scripts/query_Config_resource_by_sql.py --sql="select id, name, provider, type, properties from resources where region_id = 'cn-north-4'"
示例2: 查询IAM用户的密码强度
步骤1: 查询iam.users的Schema了解可用字段
python scripts/query_Config_resource_schema.py --resource_type=iam.users
步骤2: 基于Schema发现密码相关字段为 pwd_status 和 pwd_strength
步骤3: 编写SQL查询
select id, name, provider, type, properties.pwd_status, properties.pwd_strength
from resources
where provider = 'iam'
and type = 'users'
步骤4: 执行查询
python scripts/query_Config_resource_by_sql.py --sql="select id, name, provider, type, properties.pwd_status, properties.pwd_strength from resources where provider = 'iam' and type = 'users'"
更多SQL示例:
- 查询运行中的ECS:
SELECT * FROM resources WHERE provider='ecs' AND type='cloudservers' AND properties.status='ACTIVE'
- 查询未加密的EVS:
SELECT * FROM resources WHERE provider='evs' AND type='volumes' AND NOT properties.encrypted
- 按区域统计资源数:
SELECT region_id, count(*) FROM resources GROUP BY region_id
- 更多案例: 请学习
scripts/sql-example.json 中的案例
输出格式:
- JSON数组,每条记录代表一个匹配的资源
- 包含查询中指定的所有字段
合规规则查询
查询云服务的预置合规规则
获取华为云Config服务的预置合规规则列表,用于资源合规性检查。
命令:
查询特定云服务的合规规则:
python scripts/query_Config_builtin_rule.py --keyword=obs
查询所有合规规则(限制返回数量):
python scripts/query_Config_builtin_rule.py --limit=10
参数说明:
--keyword: 过滤关键字,匹配规则名称或描述中包含该关键字的规则
--limit: 限制返回结果数量,默认为10
输出格式:
使用场景:
- 了解可用的合规规则
- 选择合适的规则进行合规性检查
- 制定资源合规策略
华为云场景知识
以下为华为云云服务的场景化知识,在分析资源的安全配置时,需要考虑以下信息:
VPC默认安全组
VPC默认安全组(名称为default)为系统内置资源,不可删除。为提升安全性,将所有出方向、入方向的安全组规则停用或改为Deny的操作权限。
AK/SK安全配置:
华为云的Access Key(AK)为20位随机字符串(例如HPUAAJJAC9GJZDIQCTHN),Secret Key(SK)为40位随机字符串。在资源配置中,仅允许在iam.users字段中包含AK信息,严禁在任何资源配置中明文存储或传递SK。若检测到SK存在于配置中,则判定为敏感信息泄露风险,需立即整改。
云服务中英文对接关系
| provider |
type |
中文名 |
服务功能 |
| cts |
trackers |
云审计服务追踪器 |
提供对各种云资源操作记录的收集、存储和查询功能 |
| config |
trackers |
配置审计服务资源记录器 |
提供资源配置的持续的审计能力 |
最佳实践
SQL查询优化
使用WHERE条件限制查询范围
- 总是添加
region_id 或其他过滤条件,避免全表扫描
- 示例:
WHERE region_id = 'cn-north-4'
只查询需要的字段
- 避免使用
SELECT *,明确指定需要的字段
- 减少数据传输量,提高查询效率
合理使用聚合函数
- 对于统计需求,使用
count(), sum() 等聚合函数
- 示例:
SELECT region_id, count(*) FROM resources GROUP BY region_id
安全注意事项
保护敏感信息
- 严禁在日志、控制台输出AK/SK等敏感信息
- 使用环境变量存储凭证,不要硬编码在脚本中
- 定期轮换AK/SK
- 仅需
Config ReadOnlyAccess的权限,用户无需过度授权
最小权限原则
- 为Config服务配置最小必要权限
- 定期审查API访问权限
网络安全
- 确保代理配置正确,通过安全通道访问华为云
- 在生产环境中使用HTTPS
性能优化建议
1批量查询优于单个查询
- 对于多个资源,使用SQL批量查询而非多次API调用
- 利用SQL的JOIN和子查询功能
2合理安排查询时间
- 避免在业务高峰期执行大规模资源查询
- 考虑在非工作时间执行资源审计
数据处理建议
结果验证
数据格式化
- 将JSON结果转换为易读格式(如表格)
- 对于大量数据,考虑导出到文件
异常处理
常见问题(FAQ)
Q1: 提示"认证失败"怎么办?
A: 检查以下几点:
- 确认
HUAWEICLOUD_AK 和 HUAWEICLOUD_SK 环境变量已正确配置
- 验证AK/SK是否有效且未过期
- 确认账号有访问Config服务的权限
- 检查网络连接和代理配置
Q2: SQL查询返回空结果?
A: 可能的原因:
- 查询条件过于严格,尝试放宽条件
- 检查资源类型名称是否正确(区分大小写)
- 确认指定区域确实有资源
- 先查询资源概览,了解资源分布
Q3: 如何查询特定时间范围内创建的资源?
A: 使用日期函数:
SELECT *
FROM resources
WHERE created >= '2024-01-01T00:00:00Z'
AND created <= '2024-12-31T23:59:59Z'
Q4: 如何查询没有标签的资源?
A: 使用 cardinality 函数:
SELECT *
FROM resources
WHERE cardinality(tag) = 0
Q5: 如何处理JSON数组字段的查询?
A: 使用数组操作函数:
any_match: 检查数组中是否存在满足条件的元素
transform: 转换数组元素
filter: 过滤数组元素
示例:
SELECT *
FROM resources
WHERE any_match(properties.securityGroup, x - > x.id = 'xxx')
Q6: 如何获取资源关系的完整信息?
A: 建议步骤:
- 先查询主资源(如ECS)的Schema
- 识别关联字段(如
ExtVolumesAttached)
- 查询关联资源(如EVS)的Schema
- 编写JOIN查询获取完整信息
错误处理
常见错误及解决方案
| 错误信息 |
可能原因 |
解决方案 |
Authentication failed |
AK/SK配置错误或无效 |
检查环境变量配置,验证AK/SK有效性 |
Resource not found |
资源类型不存在 |
检查资源类型名称,先查询可用资源类型 |
SQL syntax error |
SQL语句语法错误 |
检查SQL语法,参考示例文件 |
1---2name: huaweicloud-config-helper-53description: 华为云Config配置审计服务的专业助手,提供全局资源查询、资源配置查询、资源Schema查询、SQL条件查询以及合规规则查询能力。当用户需要查询华为云资源、进行资源审计、检查配置合规性、盘点云上资产、分析资源关系、查询特定资源状态、验证资源配置、或需要通过SQL进行复杂资源查询时,必须使用此技能。即使未明确提及"Config"或"配置审计",只要涉及华为云资源查询、资源管理、合规检查等场景,都应触发此技能。4---56# Config 配置审计服务助手78使用scripts中的脚本,通过Config服务,查询云上资源情况、资源配置、资源schema、云服务的预置合规规则。具体有如下能力:910- 查询资源概览;11- 查询资源Schema;12- 按条件通过SQL查询资源;13- 资源合规性分析:包含但不限于从以下维度分析资源配置,'为事件响应做好准备', '优化成本', '身份管理', '保护数据完整性', '保护配置', '加密传输中的数据', '加密静态数据', '建立日志记录和监控', '强制执行最低权限', '提高可用性', '提高韧性', '管理机密', '管理漏洞', '管理规格', '限制网络访问', '资源管理';1415## 前置条件1617### 环境变量配置1819在使用此技能前,需要确保以下环境变量已正确配置。这些是访问华为云Config服务的必要凭证。2021**必需的环境变量:**2223- `HUAWEICLOUD_AK` - 访问密钥(Access Key)24- `HUAWEICLOUD_SK` - 秘密密钥(Secret Access Key)2526**重要提示:**2728- 这些环境变量包含敏感信息,检查配置时严禁在控制台打印29- 用户配置的AK仅需要`Config ReadOnlyAccess`的权限,用户无需过度授权3031**配置步骤:**32331. **Windows PowerShell 配置:**34 ```powershell35 $env:HUAWEICLOUD_AK="your_access_key"36 $env:HUAWEICLOUD_SK="your_secret_key"37 ```38392. **或通过系统环境变量配置:**40 - Windows: 在"系统属性" > "环境变量"中设置41 - Linux/Mac: 在 `~/.bashrc` 或 `~/.zshrc` 中添加 `export` 命令42433. **验证配置:**44 ```powershell45 # 验证但不打印敏感信息46 if (-not $env:HUAWEICLOUD_AK) { Write-Error "HUAWEICLOUD_AK 未配置" }47 ```4849### 依赖安装5051确保已安装以下Python依赖:5253```bash54pip install huaweicloudsdkconfig huaweicloudsdkcore55```5657## 工作流程5859### 资源查询6061#### 1. 查询资源概览6263获取华为云上所有资源的汇总统计信息。6465**命令:**6667```shell68python scripts/query_Config_resource_summary.py69```7071**参数说明:**7273- `--provider`: 可选,表示只查询某个云服务的资源概览, 示例:74 - `obs`75 - `vpc`76 77- `--region_id`: 可选,表示只查询某个区域的资源概览, 示例:78 - `cn-north-4`: 北京四79 - `cn-east-3`: 上海一80 - `global`: 全局81 8283**输出格式:**8485- JSON格式,包含各区域、各服务类型的资源数量统计86- 示例:87```json88[89 {90 "provider": "vpc",91 "type": "vpcs",92 "region_id": "cn-north-1",93 "cnt": 594 },95 {96 "provider": "kms",97 "type": "keys",98 "region_id": "cn-north-4",99 "cnt": 2100 },101 {102 "provider": "iam",103 "type": "users",104 "region_id": "global",105 "cnt": 5106 }107]108```109110**使用场景:**111112- 快速了解云上资源分布113- 识别资源密集的区域和服务114- 为资源审计、成本优化、安全配置等场景提供基础数据115116#### 2. 查询资源Schema117118获取指定资源类型的详细结构定义,包括所有可用字段及其类型。119120**命令:**121122```shell123python scripts/query_Config_resource_schema.py --resource_type=obs.buckets124```125126**参数说明:**127128- `--resource_type`: 资源类型标识符,格式为 `provider.type`, 示例:129 - `obs.buckets`: 对象存储桶、OBS桶;130 - `ecs.cloudservers`: 云服务器、虚机、ECS;131 - `iam.users`: IAM用户;132 - `vpc.securityGroups `: VPC安全组;133 - `fgs.functions`: 函数工作流、函数、FunctionGraph;134135**输出格式:**136137- JSON格式,包含资源的完整Schema定义138- 包含字段名称、类型、描述等信息139140**使用场景:**141142- 了解资源结构和可用字段143- 编写SQL查询前确定查询字段144- 理解资源的配置属性145146#### 3. 按条件查询资源(高级SQL查询)147148通过SQL语句进行复杂的资源查询,支持多条件筛选、聚合分析等。149150**支持的查询字段:**151152- 基础字段: `id`, `name`, `provider`, `type`, `region_id`, `project_id`, `created`, `updated`, `tag`153- 扩展字段: `properties` (JSON对象,包含具体资源配置,每种资源类型的结构与资源schema保持一致)154155**SQL语法特点:**156157- 只能查询 `resources` 表158- 支持标准SQL语法: SELECT, WHERE, GROUP BY, ORDER BY159- 支持数组操作: `transform`, `filter`, `any_match`, `contains`160- 支持日期函数: `date_diff`, `date_parse`161-162163**重要提示:**164165- 使用前请先查询资源Schema了解可用字段166- 参考 `scripts/sql-example.json` 查看丰富的查询示例167- SQL语句需要用双引号包裹,内部字符串使用单引号168- 如果没有查询到资源,查询资源概览已确认云上资源分布169170**示例1: 查询特定区域的所有资源**171172首先确定查询需求,生成SQL语句:173174```sql175select id, name, provider, type, region_id, properties176from resources177where region_id = 'cn-north-4'178```179180执行查询:181182```shell183python scripts/query_Config_resource_by_sql.py --sql="select id, name, provider, type, properties from resources where region_id = 'cn-north-4'"184```185186**示例2: 查询IAM用户的密码强度**187188步骤1: 查询iam.users的Schema了解可用字段189190```shell191python scripts/query_Config_resource_schema.py --resource_type=iam.users192```193194步骤2: 基于Schema发现密码相关字段为 `pwd_status` 和 `pwd_strength`195196步骤3: 编写SQL查询197198```sql199select id, name, provider, type, properties.pwd_status, properties.pwd_strength200from resources201where provider = 'iam'202 and type = 'users'203```204205步骤4: 执行查询206207```shell208python scripts/query_Config_resource_by_sql.py --sql="select id, name, provider, type, properties.pwd_status, properties.pwd_strength from resources where provider = 'iam' and type = 'users'"209```210211**更多SQL示例:**212213- 查询运行中的ECS: `SELECT * FROM resources WHERE provider='ecs' AND type='cloudservers' AND properties.status='ACTIVE'`214- 查询未加密的EVS: `SELECT * FROM resources WHERE provider='evs' AND type='volumes' AND NOT properties.encrypted`215- 按区域统计资源数: `SELECT region_id, count(*) FROM resources GROUP BY region_id`216- 更多案例: 请学习 `scripts/sql-example.json` 中的案例217218**输出格式:**219220- JSON数组,每条记录代表一个匹配的资源221- 包含查询中指定的所有字段222223### 合规规则查询224225#### 查询云服务的预置合规规则226227获取华为云Config服务的预置合规规则列表,用于资源合规性检查。228229**命令:**230231查询特定云服务的合规规则:232233```shell234python scripts/query_Config_builtin_rule.py --keyword=obs235```236237查询所有合规规则(限制返回数量):238239```shell240python scripts/query_Config_builtin_rule.py --limit=10241```242243**参数说明:**244245- `--keyword`: 过滤关键字,匹配规则名称或描述中包含该关键字的规则246- `--limit`: 限制返回结果数量,默认为10247248**输出格式:**249250- JSON数组,每个元素包含规则ID、名称、描述等信息251- 示例:252 ```json253 {254 "name": "obs-bucket-https-only",255 "display_name": "OBS桶必须使用HTTPS",256 "description": "检查OBS桶是否强制使用HTTPS协议访问"257 }258 ```259260**使用场景:**261262- 了解可用的合规规则263- 选择合适的规则进行合规性检查264- 制定资源合规策略265266## 华为云场景知识267268以下为华为云云服务的场景化知识,在分析资源的安全配置时,需要考虑以下信息:269270**VPC默认安全组**271272VPC默认安全组(名称为default)为系统内置资源,不可删除。为提升安全性,将所有出方向、入方向的安全组规则停用或改为Deny的操作权限。273274**AK/SK安全配置**:275276华为云的Access Key(AK)为20位随机字符串(例如HPUAAJJAC9GJZDIQCTHN),Secret Key(SK)为40位随机字符串。在资源配置中,仅允许在iam.users字段中包含AK信息,严禁在任何资源配置中明文存储或传递SK。若检测到SK存在于配置中,则判定为敏感信息泄露风险,需立即整改。277278**云服务中英文对接关系**279280| provider | type | 中文名 | 服务功能 |281|:---------|:---------|:------------|:------------------------|282| cts | trackers | 云审计服务追踪器 | 提供对各种云资源操作记录的收集、存储和查询功能 |283| config | trackers | 配置审计服务资源记录器 | 提供资源配置的持续的审计能力 |284285## 最佳实践286287### SQL查询优化2882891. **使用WHERE条件限制查询范围**290 - 总是添加 `region_id` 或其他过滤条件,避免全表扫描291 - 示例: `WHERE region_id = 'cn-north-4'`2922932. **只查询需要的字段**294 - 避免使用 `SELECT *`,明确指定需要的字段295 - 减少数据传输量,提高查询效率2962973. **合理使用聚合函数**298 - 对于统计需求,使用 `count()`, `sum()` 等聚合函数299 - 示例: `SELECT region_id, count(*) FROM resources GROUP BY region_id`300301### 安全注意事项3023031. **保护敏感信息**304 - 严禁在日志、控制台输出AK/SK等敏感信息305 - 使用环境变量存储凭证,不要硬编码在脚本中306 - 定期轮换AK/SK307 - 仅需`Config ReadOnlyAccess`的权限,用户无需过度授权3083092. **最小权限原则**310 - 为Config服务配置最小必要权限311 - 定期审查API访问权限3123133. **网络安全**314 - 确保代理配置正确,通过安全通道访问华为云315 - 在生产环境中使用HTTPS316317### 性能优化建议3183191**批量查询优于单个查询**320321- 对于多个资源,使用SQL批量查询而非多次API调用322- 利用SQL的JOIN和子查询功能3233242**合理安排查询时间**325326- 避免在业务高峰期执行大规模资源查询327- 考虑在非工作时间执行资源审计328329### 数据处理建议3303311. **结果验证**332 - 检查查询结果的完整性333 - 验证关键字段的合理性3343352. **数据格式化**336 - 将JSON结果转换为易读格式(如表格)337 - 对于大量数据,考虑导出到文件3383393. **异常处理**340 - 注意处理查询失败的情况341 - 检查API返回的错误信息342343## 常见问题(FAQ)344345### Q1: 提示"认证失败"怎么办?346347**A:** 检查以下几点:348349- 确认 `HUAWEICLOUD_AK` 和 `HUAWEICLOUD_SK` 环境变量已正确配置350- 验证AK/SK是否有效且未过期351- 确认账号有访问Config服务的权限352- 检查网络连接和代理配置353354### Q2: SQL查询返回空结果?355356**A:** 可能的原因:357358- 查询条件过于严格,尝试放宽条件359- 检查资源类型名称是否正确(区分大小写)360- 确认指定区域确实有资源361- 先查询资源概览,了解资源分布362363### Q3: 如何查询特定时间范围内创建的资源?364365**A:** 使用日期函数:366367```sql368SELECT *369FROM resources370WHERE created >= '2024-01-01T00:00:00Z'371 AND created <= '2024-12-31T23:59:59Z'372```373374### Q4: 如何查询没有标签的资源?375376**A:** 使用 `cardinality` 函数:377378```sql379SELECT *380FROM resources381WHERE cardinality(tag) = 0382```383384### Q5: 如何处理JSON数组字段的查询?385386**A:** 使用数组操作函数:387388- `any_match`: 检查数组中是否存在满足条件的元素389- `transform`: 转换数组元素390- `filter`: 过滤数组元素391392示例:393394```sql395SELECT *396FROM resources397WHERE any_match(properties.securityGroup, x - > x.id = 'xxx')398```399400### Q6: 如何获取资源关系的完整信息?401402**A:** 建议步骤:4034041. 先查询主资源(如ECS)的Schema4052. 识别关联字段(如 `ExtVolumesAttached`)4063. 查询关联资源(如EVS)的Schema4074. 编写JOIN查询获取完整信息408409## 错误处理410411### 常见错误及解决方案412413| 错误信息 | 可能原因 | 解决方案 |414|-------------------------------|--------------|------------------------------------|415| `Authentication failed` | AK/SK配置错误或无效 | 检查环境变量配置,验证AK/SK有效性 |416| `Resource not found` | 资源类型不存在 | 检查资源类型名称,先查询可用资源类型 |417| `SQL syntax error` | SQL语句语法错误 | 检查SQL语法,参考示例文件 |