在scala中,我们使用logstash-logback-encoder
创建json日志。我们想加密一个特定的字段。掩蔽是不够的,因为如果需要从日志中解密值,则需要解密。实现这一目标的最佳途径是什么?一种方法可以是创建一个JsonGeneratorDecorator
的实现,就像有一个用于掩蔽的实现一样。但是,考虑到我们知道要掩盖哪个领域,是否有更容易的方法来实现这一点?
更新:解决方案
我在回答中使用了菲尔·克莱提出的建议。然而,有一个小渔获物。ValueMasker
背后的意图是根据价值来决定什么/什么时候隐藏。对于ex,使用RegEx与所有值(net.logstash.logback.mask.RegexValueMasker)
进行匹配。由于其非常通用的用法,ValueMaskers
效率较低/性能较差。但是,我的用例更具体,因为有一个特定的字段需要屏蔽。根据定义,应该使用FieldMasker
,但它不提供允许加密的值句柄。最后,我创建了一个自定义ValueMasker
,但是使用了来自net.logstash.logback.mask.FieldNameBasedFieldMasker
的逻辑,如下所示:
class FieldNameBasedEncryptionMasker extends ValueMasker {
private var salt: String = ""
private var fieldNames: Set[String] = Set.empty
def addFieldName(fieldName: String): Unit =
fieldNames = fieldNames + fieldName
def setSalt(saltValue: String): Unit =
salt = saltValue
override def mask(context: JsonStreamContext, value: Any): AnyRef = {
if (context.hasCurrentName && fieldNames.contains(context.getCurrentName) && value
.isInstanceOf[CharSequence]) {
// encrypt value
} else null
}
}
这可以在`logback.xml中配置为:
<appender name="stash" class="net.logstash.logback.appender.LogstashSocketAppender">
<host>$host</host>
<port>$port</port>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"app_name":"${LOG_APP_NAME:-undefined}", "app_env":"${LOG_ENV:-local}"}</customFields>
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<valueMasker class="FieldNameBasedEncryptionMasker">
<salt>$logging-encryption-salt</salt>
<fieldName>fieldNameToEncrypt1</fieldName>
<fieldName>fieldNameToEncrypt2</fieldName>
</valueMasker>
</jsonGeneratorDecorator>
</encoder>
</appender>
发布于 2022-02-03 19:38:45
您可以创建net.logstash.logback.mask.ValueMasker
的自定义实现来加密特定字段,而不是返回标准的掩码值(如****
)。
然后将编码器配置为使用自定义掩蔽符,如下所示:
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<valueMasker class="your.custom.EncryptingMasker"/>
</jsonGeneratorDecorator>
</encoder>
https://stackoverflow.com/questions/70974050
复制相似问题