元数据匹配器(proto)
MetadataMatcher 提供了一个通用接口来检查给定值是否在 Metadata 中匹配。它使用 filter 和 path 从 Metadata 中检索值,然后检查它是否与指定的值匹配。
例如,对于以下 Metadata
filter_metadata:
envoy.filters.http.rbac:
fields:
a:
struct_value:
fields:
b:
struct_value:
fields:
c:
string_value: pro
t:
list_value:
values:
- string_value: m
- string_value: n
以下 MetadataMatcher 匹配,因为路径 [a, b, c] 将从 Metadata 中检索字符串值“pro”,该值与指定的前缀匹配匹配。
filter: envoy.filters.http.rbac
path:
- key: a
- key: b
- key: c
value:
string_match:
prefix: pr
以下 MetadataMatcher 匹配,因为代码将匹配路径 [a, t] 中列表中的一个字符串值。
filter: envoy.filters.http.rbac
path:
- key: a
- key: t
value:
list_match:
one_of:
string_match:
exact: m
MetadataMatcher 的一个示例用法是在 envoy.filters.http.rbac 中指定附加元数据,以根据请求中的动态元数据执行访问控制。见 Permission 和 Principal.
type.matcher.v3.MetadataMatcher
[type.matcher.v3.MetadataMatcher proto]
{
"filter": ...,
"path": [],
"value": {...},
"invert": ...
}
- filter
(string, REQUIRED) 要从 Metadata 中检索 Struct 的过滤器名称。
- path
(repeated type.matcher.v3.MetadataMatcher.PathSegment, REQUIRED) 要从 Struct 中检索值的路径。
- value
(type.matcher.v3.ValueMatcher, REQUIRED) 如果通过路径检索的值与该值匹配,则 MetadataMatcher 匹配。
- invert
(bool) 如果为 true,则匹配结果将被反转。
type.matcher.v3.MetadataMatcher.PathSegment
[type.matcher.v3.MetadataMatcher.PathSegment proto]
指定路径中的段以从 Metadata 中检索值。注意:目前不支持从 Metadata 中的列表中检索值。这意味着如果段键引用一个列表,它必须是路径中的最后一个段。
{
"key": ...
}
- key
(string, REQUIRED) 如果指定,则使用该键在 Struct 中检索值。