元数据匹配器(proto)

MetadataMatcher 提供了一个通用接口来检查给定值是否在 Metadata 中匹配。它使用 filterpath 从 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 中指定附加元数据,以根据请求中的动态元数据执行访问控制。见 PermissionPrincipal.

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 中检索值。