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