属性上下文(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]

此消息定义处理网络请求的节点的属性。节点可以是发送、转发或接收请求的服务或应用程序。服务对等体应根据需要填写 serviceprincipallabels

{
  "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 NamesDNS Subject Alternate NamesSubject(按此顺序)。主要身份应该是主体。主体格式是发行者特定的。

示例

  • 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 请求方法,例如 GETPOST

标题

(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 的单个重复字段。

在这里,只有 keyraw_value 字段将在每个 HeaderValue 中填充,并且只有在 encode_raw_headers 设置为 true 时才会填充。

此外,与 headers 字段不同,具有相同键的标头不会组合成一个单独的逗号分隔标头。

路径

(string) 请求目标,如 HTTP 请求的第一行中所示。这包括 URL 路径和查询字符串。不执行解码。

主机

(string) HTTP 请求 Host:authority 标头值。

方案

(string) HTTP URL 方案,例如 httphttps

查询

(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。