属性上下文(proto)
请参阅 网络过滤器配置概述 和 HTTP 过滤器配置概述.
service.auth.v3.AttributeContext
[service.auth.v3.AttributeContext proto]
属性是描述网络活动的一段元数据。例如,HTTP 请求的大小或 HTTP 响应的状态代码。
每个属性都具有类型和名称,在逻辑上定义为 AttributeContext
的 proto 消息字段。 AttributeContext
是 Envoy 授权系统支持的单个属性的集合。
{
"source": {...},
"destination": {...},
"request": {...},
"context_extensions": {...},
"metadata_context": {...},
"route_metadata_context": {...},
"tls_session": {...}
}
- 源
(service.auth.v3.AttributeContext.Peer) 网络活动的来源,例如启动 TCP 连接。在多跳网络活动中,源代表最后一跳的发送方。
- 目的地
(service.auth.v3.AttributeContext.Peer) 网络活动的目的地,例如接受 TCP 连接。在多跳网络活动中,目的地代表最后一跳的接收方。
- 请求
(service.auth.v3.AttributeContext.Request) 代表网络请求,例如 HTTP 请求。
- context_extensions
(repeated map<string, string>) 这类似于 http_request.headers,但这些内容不会发送到上游服务器。Context_extensions 提供了一种扩展机制,用于在不修改 proto 定义的情况下将额外信息发送到身份验证服务器。它映射到过滤器链中的内部不透明上下文。
- metadata_context
(config.core.v3.Metadata) 与请求关联的动态元数据。
- route_metadata_context
(config.core.v3.Metadata) 与所选路由关联的元数据。
- tls_session
(service.auth.v3.AttributeContext.TLSSession) 底层连接的 TLS 会话详细信息。默认情况下不会填充此内容,只有在 ext_authz 过滤器已专门配置为包含此信息时才会填充。对于 HTTP ext_authz,这需要将 include_tls_session 设置为 true。对于网络 ext_authz,这需要将 include_tls_session 设置为 true。
service.auth.v3.AttributeContext.Peer
[service.auth.v3.AttributeContext.Peer proto]
此消息定义处理网络请求的节点的属性。节点可以是发送、转发或接收请求的服务或应用程序。服务对等体应根据需要填写 service
、principal
和 labels
。
{
"address": {...},
"service": ...,
"labels": {...},
"principal": ...,
"certificate": ...
}
- 地址
(config.core.v3.Address) 对等体的地址,这通常是 IP 地址。它也可以是 UDS 路径或其他内容。
- 服务
(string) 对等体的规范服务名称。它应设置为 HTTP x-envoy-downstream-service-cluster 如果通过 mTLS/安全命名提供更可信的服务名称来源,则应使用它。
- 标签
(repeated map<string, string>) 与对等体关联的标签。这些可能是 Kubernetes 的 pod 标签或 VM 的标签。标签的来源可能是 X.509 证书或其他配置。
- 主体
(string) 此对等体的已验证身份。例如,与工作负载关联的身份,例如服务帐户。如果使用 X.509 证书来断言身份,则此字段应来自
URI Subject Alternative Names
、DNS Subject Alternate Names
或Subject
(按此顺序)。主要身份应该是主体。主体格式是发行者特定的。示例
SPIFFE 格式为
spiffe://trust-domain/path
。Google 帐户格式为
https://accounts.google.com/{userid}
。
- 证书
(string) 用于验证此对等体身份的 X.509 证书。如果存在,证书内容将以 URL 和 PEM 格式编码。
service.auth.v3.AttributeContext.Request
[service.auth.v3.AttributeContext.Request proto]
代表网络请求,例如 HTTP 请求。
{
"time": {...},
"http": {...}
}
- 时间
(Timestamp) 代理接收请求第一个字节的时间戳。
- http
(service.auth.v3.AttributeContext.HttpRequest) 代表 HTTP 请求或类似 HTTP 的请求。
service.auth.v3.AttributeContext.HttpRequest
[service.auth.v3.AttributeContext.HttpRequest proto]
此消息定义 HTTP 请求的属性。HTTP/1.x、HTTP/2、gRPC 都被视为 HTTP 请求。
{
"id": ...,
"method": ...,
"headers": {...},
"header_map": {...},
"path": ...,
"host": ...,
"scheme": ...,
"query": ...,
"fragment": ...,
"size": ...,
"protocol": ...,
"body": ...,
"raw_body": ...
}
- id
(string) 请求的唯一 ID,可以传播到下游系统。对于特定服务,该 ID 在一天内应具有较低的碰撞概率。对于 HTTP 请求,它应该是 X-Request-ID 或等效项。
- 方法
(string) HTTP 请求方法,例如
GET
、POST
。
- 标题
(repeated map<string, string>) HTTP 请求头。如果多个头具有相同的键,则必须根据 HTTP 规范合并它们。所有头键必须小写,因为 HTTP 头键不区分大小写。头值编码为 UTF-8 字符串。非 UTF-8 字符将被替换为“!”。如果 encode_raw_headers 设置为 true,则不会设置此字段。
- header_map
(config.core.v3.HeaderMap) 原始 HTTP 请求头的列表。当 encode_raw_headers 设置为 true 时,将使用此内容而不是 headers。
请注意,这实际上不是映射类型。
header_map
包含一个名为headers
的单个重复字段。在这里,只有
key
和raw_value
字段将在每个 HeaderValue 中填充,并且只有在 encode_raw_headers 设置为 true 时才会填充。此外,与 headers 字段不同,具有相同键的标头不会组合成一个单独的逗号分隔标头。
- 路径
(string) 请求目标,如 HTTP 请求的第一行中所示。这包括 URL 路径和查询字符串。不执行解码。
- 主机
(string) HTTP 请求
Host
或:authority
标头值。
- 方案
(string) HTTP URL 方案,例如
http
和https
。
- 查询
(string) 此字段始终为空,并且出于兼容性原因而存在。HTTP URL 查询包含在
path
字段中。
- 片段
(string) 此字段始终为空,并且出于兼容性原因而存在。URL 片段不会作为 HTTP 请求的一部分提交;它不可知。
- 大小
(int64) HTTP 请求大小(以字节为单位)。如果未知,则必须为 -1。
- 协议
(字符串) 请求使用的网络协议,例如“HTTP/1.0”、“HTTP/1.1”或“HTTP/2”。
有关所有可能值的列表,请参见 headers.h:ProtocolStrings。
- body
(字符串) HTTP 请求主体。
- raw_body
(字节) 以字节形式表示的 HTTP 请求主体。当 pack_as_bytes 设置为 true 时,将使用它而不是 body。
service.auth.v3.AttributeContext.TLSSession
[service.auth.v3.AttributeContext.TLSSession proto]
此消息定义了基础 TLS 会话的属性。
{
"sni": ...
}
- sni
(字符串) 用于 TLS 会话的 SNI。