AWS日志组自定义数据脱敏问题:仅屏蔽属性值而非整行
Lambda日志数据保护策略:仅脱敏属性值而非整行
问题描述
配置Lambda日志组的数据保护策略后,自定义标识符将to-redact-field的整个键值对替换为星号,导致日志JSON格式损坏:
- 实际生成日志:
{"a": "bar..",**********"c":{"d": "foo"}} - 预期效果:
{ "a": "bar..", "to-redact-field":"**********", "c":{ "d": "foo" } }
你的CDK代码片段:
{ functionName: 'myCustomDataProtIdentLambda', entry: 'lambdas/sqs/customSub.ts', // ...其他配置 logGroup: new logGroup(this, 'MyCustomDataProtLogGrp', { logGroupName: 'aws/lambdas/myCustomSubTest', removalPolicy: RemovalPolicy.Destroy, dataProtectionPolicy: new DataProtectionPolicy({ name:'credentials', identifiers: [ DataIdentifier.AWSSECRETKEY, new CustomDataIdentifier('to-redact-field','"to-redact-field"\s*:\s*"([^"]+)"') ] }) }) }
问题原因
默认情况下,自定义数据标识符会脱敏整个正则匹配的内容。你的正则"to-redact-field"\s*:\s*"([^"]+)"匹配的是完整的键值对(包含键名、冒号和值),因此整个匹配段被替换为星号,破坏了JSON结构。
修复方案
给CustomDataIdentifier添加captureGroup: 1配置,指定只脱敏正则中第一个捕获组(即属性值部分):
{ functionName: 'myCustomDataProtIdentLambda', entry: 'lambdas/sqs/customSub.ts', // ...其他配置 logGroup: new logGroup(this, 'MyCustomDataProtLogGrp', { logGroupName: 'aws/lambdas/myCustomSubTest', removalPolicy: RemovalPolicy.Destroy, dataProtectionPolicy: new DataProtectionPolicy({ name:'credentials', identifiers: [ DataIdentifier.AWSSECRETKEY, new CustomDataIdentifier( 'to-redact-field', '"to-redact-field"\s*:\s*"([^"]+)"', { captureGroup: 1 } // 仅脱敏第一个捕获组对应的属性值 ) ] }) }) }
关键说明
captureGroup: 1指示数据保护策略只处理正则中([^"]+)捕获到的内容(也就是属性值),保留键名和冒号,确保日志JSON格式有效。- 你的正则已经正确捕获了属性值,只需添加该配置即可实现预期脱敏效果。
内容的提问来源于stack exchange,提问作者fuwa07
相关产品推荐
相关产品推荐

