密码过滤器插件
编辑密码过滤器插件
编辑- 插件版本: v4.0.3
- 发布日期: 2022-06-21
- 更新日志
有关其他版本,请参阅版本化插件文档。
获取帮助
编辑有关插件的问题,请在Discuss论坛中开设一个主题。对于错误或功能请求,请在Github中开设一个问题。有关 Elastic 支持的插件列表,请查阅Elastic 支持矩阵。
密码过滤器配置选项
编辑此插件支持以下配置选项以及稍后描述的通用选项。
设置 | 输入类型 | 必需 |
---|---|---|
是 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
是 |
||
否 |
||
否 |
另请参阅通用选项,其中列出了所有过滤器插件支持的选项。
algorithm
编辑- 这是一个必需的设置。
- 值类型为字符串
- 此设置没有默认值。
用于加密和解密操作的密码算法。
支持的算法列表取决于 Logstash、JRuby 和 Java 的版本,可以通过运行来获取
cd $LOGSTASH_HOME # <-- your Logstash distribution root bin/ruby -ropenssl -e 'puts OpenSSL::Cipher.ciphers'
base64
编辑- 值类型为布尔值
- 默认值为
true
-
除非禁用此选项
- 当
mode => encrypt
时,源密文将在解密之前进行base64
解码。 - 当
mode => decrypt
时,结果密文将在存储之前进行base64
编码。
- 当
cipher_padding
编辑-
值类型为字符串
-
0
: 表示false
-
1
: 表示true
-
- 此设置没有默认值。
在加密操作中启用或禁用填充。
在使用块密码的加密操作中,除非启用了填充,否则输入明文必须是密码块大小的精确倍数。
通过将此值设置为 0
来禁用填充会导致此插件无法加密任何不严格遵守algorithm
的块大小要求的输入明文。
filter { cipher { cipher_padding => 0 }}
iv_random_length
编辑- 值类型为数字
- 此设置没有默认值。
在加密操作中,此插件为每次加密操作生成一个随机初始化向量 (IV)。这是一个标准最佳实践,以确保无法比较生成的密文来推断源明文的等效性。然后,此唯一 IV 会在存储之前前置到生成的密文中,确保任何需要解密的进程都可以使用它。
在解密操作中,假定 IV 已前置到密文中,因此此插件需要知道 IV 的长度才能正确拆分输入。
IV 的大小通常取决于所使用的algorithm
。AES 算法通常使用 16 字节的 IV
filter { cipher { iv_random_length => 16 }}
key
编辑- 值类型为字符串
- 此设置没有默认值。
用于加密和解密操作的密钥。
如果您看到类似以下的运行时错误,请阅读jruby github 存储库中的 UnlimitedStrengthCrypto 主题:
java.security.InvalidKeyException: Illegal key size: possibly you need to install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for your JRE
key_size
编辑- 值类型为数字
- 默认值为
16
密码所需的密钥大小,这取决于您使用的algorithm
。如果使用较短的值指定key
,则会使用key_pad
进行填充。
例如,对于 AES-128,我们必须有 16 个字符长的密钥。AES-256 = 32 个字符
filter { cipher { key_size => 16 }
max_cipher_reuse
编辑- 值类型为数字
- 默认值为
1
如果设置了此值,则内部 Cipher 实例将被重用最多 max_cipher_reuse
次,然后从头开始重新创建。当使用此过滤器加密和解密大量数据时,这是一个提高效率的选项。这使过滤器可以避免为每个加密/解密操作反复创建新的 Cipher 实例。
这是可选的,默认是不重用 Cipher 实例,默认情况下 max_cipher_reuse = 1
filter { cipher { max_cipher_reuse => 1000 }}
source
编辑- 值类型为字符串
- 默认值为
"message"
源字段的名称。
- 当
mode => encrypt
时,source
应该是一个包含明文的字段 - 当
mode => decrypt
时,source
应该是一个包含 IV + 密文的字段
例如,使用 message
字段(默认)
filter { cipher { source => "message" } }
target
编辑- 值类型为字符串
- 默认值为
"message"
用于放置结果的目标字段的名称
- 当
mode => encrypt
时,IV + 密文结果将存储在target
字段中 - 当
mode => decrypt
时,明文结果将存储在target
字段中
例如,将结果放置到 crypt 中
filter { cipher { target => "crypt" } }
通用选项
编辑所有过滤器插件都支持以下配置选项
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
add_field
编辑- 值类型为 哈希
- 默认值为
{}
如果此过滤器成功,则向此事件添加任何任意字段。字段名称可以是动态的,并且可以使用 %{field}
包含事件的部分。
示例
filter { cipher { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" } } }
# You can also add multiple fields at once: filter { cipher { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" "new_field" => "new_static_value" } } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时会添加字段 foo_hello
(如果存在),其中包含上面的值,并且 %{host}
部分替换为事件中的值。第二个示例还会添加一个硬编码的字段。
add_tag
编辑- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则向事件添加任意标签。标签可以是动态的,并且可以使用 %{field}
语法包含事件的部分。
示例
filter { cipher { add_tag => [ "foo_%{somefield}" ] } }
# You can also add multiple tags at once: filter { cipher { add_tag => [ "foo_%{somefield}", "taggedy_tag"] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时会添加标签 foo_hello
(第二个示例当然会添加一个 taggedy_tag
标签)。
id
编辑- 值类型为 字符串
- 此设置没有默认值。
向插件配置添加唯一的 ID
。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个密码过滤器。在这种情况下添加一个命名 ID 将有助于在使用监控 API 时监控 Logstash。
filter { cipher { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用来自秘密存储的值。
remove_field
编辑- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并且可以使用 %{field} 包含事件的部分。示例
filter { cipher { remove_field => [ "foo_%{somefield}" ] } }
# You can also remove multiple fields at once: filter { cipher { remove_field => [ "foo_%{somefield}", "my_extraneous_field" ] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时会删除名称为 foo_hello
的字段(如果存在)。第二个示例会删除其他非动态字段。
remove_tag
编辑- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并且可以使用 %{field}
语法包含事件的部分内容。
示例
filter { cipher { remove_tag => [ "foo_%{somefield}" ] } }
# You can also remove multiple tags at once: filter { cipher { remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时,如果存在标签 foo_hello
,则会将其删除。第二个示例也会删除一个令人不快、不需要的标签。