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
编辑
- 值类型为字符串
- 此设置没有默认值。
用于加密和解密操作的密钥。
如果您看到类似于以下内容的运行时错误,请阅读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。当您有两个或多个相同类型的插件时,例如,如果您有两个 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
(如果存在)。第二个示例还将删除一个不需要的标签。