某天上午,用户反馈网站资源加载异常,排查发现CDN域名的回源地址被改成了一个不存在的测试地址。此时最紧迫的问题不是立即回滚,而是先确认是谁在什么时间执行了修改。腾讯云提供了一套完整的审计能力,任何针对CDN的配置变更操作,无论是控制台页面点击还是API调用,都会被操作审计记录下来,并且关联到发起操作的账号。下面结合事件字段、查询方法和权限策略,说明如何快速定位变更账号并避免类似情况再次发生。

一、审计日志的数据来源和关键字段
腾讯云操作审计(CloudAudit)不需要用户额外购买或开启,它会自动记录账号在腾讯云上的所有API调用和控制台操作。CDN产品中常见的写操作接口包括 UpdateDomainConfig、ModifyDomainConfig、DeleteCdnDomain、CreateCdnDomain 等,这些接口调用一旦成功,就会生成一条关联到账号的事件记录。
每一条审计事件通常包含以下核心字段:userIdentity 表示发起操作的账号身份,内部又包含 uin 和 subAccountUin。主账号直接操作时,subAccountUin 可能为空;子账号操作时,uin 是主账号,subAccountUin 是具体子账号。此外还有 eventName 表示接口名称,sourceIPAddress 表示来源IP,eventTime 表示事件时间,actionType 用于区分只读或写入。理解这些字段后,检索时就能精确过滤出配置变更事件。
下面是一个简化后的CDN写操作审计事件结构示例,重点展示了账号相关字段和请求参数。
{
"eventId": "7f8e9c0b-4a2e-4b3d-9f1a-6c5d4e3f2a1b",
"eventName": "UpdateDomainConfig",
"eventSource": "cdn.tencentcloudapi.com",
"eventTime": "2026-05-07T10:23:45Z",
"sourceIPAddress": "203.0.113.45",
"userIdentity": {
"type": "SubAccount",
"uin": "100012345678",
"subAccountUin": "100012345699"
},
"requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"actionType": "Write",
"resourceType": "cdn",
"requestParameters": {
"domain": "www.ipipp.com",
"origin": "origin.ipipp.com"
}
}
注意这里 actionType 为 Write,说明它不是一次只读查询。只要看到 Write 类型且 eventName 属于CDN的变更接口,就可以确认这是一次配置修改。接下来要做的就是按条件把这些事件从海量日志中查出来。
二、通过控制台和CLI快速定位变更账号
控制台路径是操作审计中的事件历史。进入腾讯云控制台后搜索操作审计,在事件历史页面选择时间范围,事件源可以填 cdn.tencentcloudapi.com,事件名称填入修改接口,比如 UpdateDomainConfig。点击查询后,列表会展示匹配的事件,展开详情即可看到主账号、子账号、来源IP和请求参数。这里建议不要只看时间,要结合 subAccountUin 字段判断是哪个子账号发起。如果该字段为空,则说明是主账号或协作者直接在控制台操作,需要再核对 userIdentity.type。
对于习惯命令行的运维,可以使用腾讯云CLI工具查询。下面这条命令演示了按事件源和事件名称过滤审计事件,并限制返回前20条记录。
tccli cloudaudit LookUpEvents \
--region ap-guangzhou \
--condition '{"eventSource":"cdn.tencentcloudapi.com","eventName":"UpdateDomainConfig"}' \
--limit 20
返回结果中的 Events 数组会包含多条 AuditEvent,每一条都带有上面提到的 userIdentity 和 sourceIPAddress。如果账号体系较大,建议在输出时用 jq 进一步提取 uin 和 subAccountUin,这样可以快速汇总哪些账号在频繁修改CDN配置。
还有一种场景是只记得某个域名配置变了,但不清楚具体接口名称。此时可以只按事件源和 Write 类型过滤,或者直接使用资源名称作为检索条件。操作审计支持按资源类型和资源名称筛选,CDN资源名称就是域名本身。把时间范围缩小到故障发生前后几分钟,基本可以一步定位到操作者。
三、配合CAM策略限制写操作并形成审计闭环
审计日志适合事后追溯,但更理想的做法是把风险控制在变更发生之前。腾讯云访问管理支持针对CDN产品设置精细化的权限策略。例如只允许子账号查看CDN配置,不允许修改回源地址、缓存规则等,可以在策略中显式拒绝写操作。下面是一个典型的只读策略示例,允许所有CDN只读接口,拒绝变更接口。
{
"version": "2.0",
"statement": [
{
"effect": "allow",
"action": [
"cdn:Describe*",
"cdn:List*"
],
"resource": "*"
},
{
"effect": "deny",
"action": [
"cdn:UpdateDomainConfig",
"cdn:ModifyDomainConfig",
"cdn:DeleteCdnDomain"
],
"resource": "*"
}
]
}
这个策略的核心思路是读写分离。只读人员只能调用 Describe 和 List 前缀的接口,一旦尝试执行 UpdateDomainConfig,请求会被CAM立即拒绝,并且操作审计中会记录一条 actionType 为 Write 的失败事件。通过定期检查失败事件,也能发现潜在的越权尝试。
为了做到实时告警,可以把审计日志投递到日志服务或消息队列。腾讯云操作审计支持将事件投递到COS和CLS,通过CLS的告警策略或事件总线,当出现 eventName 属于变更接口且 actionType 为 Write 的事件时,自动发送通知到企业微信、邮件或短信。这样即使某个账号具备写权限,其操作也会在第一时间被团队感知,而不是等到业务异常后才发现。
四、常见疑问与排查建议
第一个常见疑问是为什么有的配置变更查不到操作账号。这通常是因为操作者使用了临时密钥或角色授权,userIdentity.type 会显示为 Role,此时需要结合 sessionContext 中的信息追溯来源。另一个原因是事件可能分布在多个地域,CDN属于全局服务,但操作审计的事件存储可能和登录地域有关,建议在全局事件历史中检索,而不是在某个特定区域下查找。
第二个问题是审计日志的保存期限。腾讯云操作审计默认保存最近180天的事件,超过期限后控制台将无法查询。如果企业有长期留存需求,建议将审计日志持续投递到COS存储桶,并设置生命周期规则。COS投递是异步的,一般实时性在几分钟内,对于事后追查完全足够。
第三个容易踩坑的地方是把只读操作误当成配置变更。CDN控制台打开域名列表、查看证书、拉取日志等操作属于读接口,actionType 为 Read,这些事件数量庞大,但和配置修改无关。检索时务必加上 actionType 为 Write 的条件,或者直接指定变更接口名称,避免在海量读事件中浪费排查时间。
最后需要提醒的是,审计日志只能记录已经发生的操作,不能替代权限管控。安全团队应定期导出CDN写操作事件,结合CAM中的子账号列表做一次核对,清理不再使用的子账号,并检查是否存在权限过大的策略。把审计日志和最小权限原则结合起来,才能真正做到配置变更可追溯、可管控。