Cipher 过滤器插件
编辑Cipher 过滤器插件
编辑- 插件版本: v4.0.3
- 发布日期: 2022-06-21
- 变更日志
其他版本请参见 版本化插件文档。
获取帮助
编辑如有关于插件的问题,请在 Discuss 论坛中发起主题。如发现错误或有功能请求,请在 Github 中提交问题。如需查看 Elastic 支持的插件列表,请查阅 Elastic 支持矩阵。
Cipher 过滤器配置选项
编辑此插件支持以下配置选项以及稍后描述的 通用选项。
设置 | 输入类型 | 必填 |
---|---|---|
是 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
是 |
||
否 |
||
否 |
另请参见 通用选项,了解所有过滤器插件支持的选项列表。
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
编辑- 值类型为 字符串
- 此设置没有默认值。
用于加密和解密操作的密钥。
如果您看到类似以下内容的运行时错误,请阅读 UnlimitedStrengthCrypto 主题(位于 jruby github 存储库中):
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。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个 cipher 过滤器。在这种情况下,添加命名 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
(如果存在)。第二个示例还将删除一个令人不快的、不需要的标签。