首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用logstash logback编码器加密json日志中的字段

使用logstash logback编码器加密json日志中的字段
EN

Stack Overflow用户
提问于 2022-02-03 15:33:21
回答 1查看 508关注 0票数 1

在scala中,我们使用logstash-logback-encoder创建json日志。我们想加密一个特定的字段。掩蔽是不够的,因为如果需要从日志中解密值,则需要解密。实现这一目标的最佳途径是什么?一种方法可以是创建一个JsonGeneratorDecorator的实现,就像有一个用于掩蔽的实现一样。但是,考虑到我们知道要掩盖哪个领域,是否有更容易的方法来实现这一点?

更新:解决方案

我在回答中使用了菲尔·克莱提出的建议。然而,有一个小渔获物。ValueMasker背后的意图是根据价值来决定什么/什么时候隐藏。对于ex,使用RegEx与所有值(net.logstash.logback.mask.RegexValueMasker)进行匹配。由于其非常通用的用法,ValueMaskers效率较低/性能较差。但是,我的用例更具体,因为有一个特定的字段需要屏蔽。根据定义,应该使用FieldMasker,但它不提供允许加密的值句柄。最后,我创建了一个自定义ValueMasker,但是使用了来自net.logstash.logback.mask.FieldNameBasedFieldMasker的逻辑,如下所示:

代码语言:javascript
运行
复制
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中配置为:

代码语言:javascript
运行
复制
<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>
EN

Stack Overflow用户

回答已采纳

发布于 2022-02-03 19:38:45

您可以创建net.logstash.logback.mask.ValueMasker的自定义实现来加密特定字段,而不是返回标准的掩码值(如**** )。

然后将编码器配置为使用自定义掩蔽符,如下所示:

代码语言:javascript
运行
复制
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
    <jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
        <valueMasker class="your.custom.EncryptingMasker"/>
    </jsonGeneratorDecorator>
</encoder>
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70974050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档