关于Google内部身份触发VPCSC违规日志的排查与抑制问询
VPCSC违规日志分析与解决方案
1. 识别触发违规的具体原因
从提供的日志中可明确核心违规原因:
- 核心触发点:日志
metadata.violationReason字段标记为NO_MATCHING_ACCESS_LEVEL,说明发起请求的google-internal(谷歌内部身份)未匹配到当前服务边界的任何访问级别规则。 - 请求细节:违规请求由谷歌内部身份发起,调用了Cloud Asset服务的
google.cloud.asset.v1.AssetService.CollectAggregatedValues方法,目标为指定项目资源。 - 策略拦截逻辑:目标服务边界(
accessPolicies/**masked**/servicePerimeters/**masked**)的组织策略判定该请求不符合准入条件,返回SECURITY_POLICY_VIOLATED错误,且ingressViolations显示目标资源无可用VPCSC权限。 - 补充说明:虽然Cloud Asset属于VPCSC支持服务,但谷歌内部身份的请求仍需符合服务边界的访问控制规则,并非默认允许。
谷歌官方文档说明:若使用VPC Service Controls不支持的Google Cloud服务,google.com域的邮箱地址会被脱敏替换为google-internal,google-internal指谷歌内部自有身份。本次违规服务为VPCSC支持服务,因此该标识仅代表请求来自谷歌内部身份。
2. 抑制此类违规事件的方法
针对该场景,可通过以下方式避免后续违规:
- 调整服务边界访问级别配置:为
google-internal身份或其对应的私有IP范围创建/更新访问级别规则,确保内部合法请求能匹配到对应访问条件。 - 验证服务边界服务列表:确认Cloud Asset服务(
cloudasset.googleapis.com)已正确添加到目标服务边界的允许服务列表,避免因配置遗漏导致拦截。 - 更新组织访问策略:若该内部请求属于合法业务流程,可在服务边界准入规则中明确允许谷歌内部身份访问,或关联对应的内部访问通道。
- 排查内部发起源:定位发起请求的谷歌内部工具、服务或流程,确认其是否使用合规访问路径(如VPCSC授权的内部网络或身份)。
- 利用Dry Run模式验证配置:日志
dryRun字段为true,说明当前为模拟拦截状态,可先调整配置后通过Dry Run验证效果,确认无误后再正式生效规则。
附脱敏后原始日志
{ "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 7, "message": "Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: **masked**", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "VPC_SERVICE_CONTROLS", "description": "**masked**" } ] }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "SECURITY_POLICY_VIOLATED", "domain": "googleapis.com", "metadata": { "uid": "**masked**", "service": "cloudasset.googleapis.com" } } ] }, "authenticationInfo": { "principalEmail": "google-internal" }, "requestMetadata": { "callerIp": "private", "requestAttributes": {}, "destinationAttributes": {} }, "serviceName": "cloudasset.googleapis.com", "methodName": "google.cloud.asset.v1.AssetService.CollectAggregatedValues", "resourceName": "projects/**masked**", "metadata": { "vpcServiceControlsUniqueId": "**masked**", "vpcServiceControlsTroubleshootToken": "**masked**", "securityPolicyInfo": { "servicePerimeterName": "accessPolicies/**masked**/servicePerimeters/**masked**", "organizationId": "**masked**" }, "resourceNames": [ "projects/**masked**" ], "violationReason": "NO_MATCHING_ACCESS_LEVEL", "deviceState": "Unknown", "ingressViolations": [ { "servicePerimeter": "accessPolicies/**masked**/servicePerimeters/**masked**", "targetResourcePermissions": [ "vpcsc.permissions.unavailable" ], "targetResource": "projects/**masked**" } ], "@type": "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata", "dryRun": true } }, "insertId": "**masked**", "resource": { "type": "audited_resource", "labels": { "method": "google.cloud.asset.v1.AssetService.CollectAggregatedValues", "service": "cloudasset.googleapis.com", "project_id": "**masked**" } }, "severity": "ERROR", "logName": "projects/**masked**/logs/cloudaudit.googleapis.com%2Fpolicy", }
内容的提问来源于stack exchange,提问作者Ankit Srivastava
相关产品推荐
相关产品推荐

