Metadata 比對器 (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 中指定額外的 metadata,以根據請求中的動態 metadata 強制執行存取控制。請參閱 PermissionPrincipal

type.matcher.v3.MetadataMatcher

[type.matcher.v3.MetadataMatcher proto]

{
  "filter": ...,
  "path": [],
  "value": {...},
  "invert": ...
}
filter

(字串必要) 從 Metadata 中檢索 Struct 的篩選器名稱。

path

(重複 type.matcher.v3.MetadataMatcher.PathSegment必要) 從 Struct 中檢索值的路徑。

value

(type.matcher.v3.ValueMatcher必要) 如果路徑檢索到的值與此值匹配,則 MetadataMatcher 會被匹配。

invert

(布林值) 如果為 true,則會反轉匹配結果。

type.matcher.v3.MetadataMatcher.PathSegment

[type.matcher.v3.MetadataMatcher.PathSegment proto]

指定路徑中的片段,以從 Metadata 中檢索值。注意:目前不支援從 Metadata 中的列表檢索值。這表示如果片段鍵指的是列表,則它必須是路徑中的最後一個片段。

{
  "key": ...
}
key

(字串必要) 如果指定,請使用鍵來檢索 Struct 中的值。