外部授权
外部授权 架构概述
此过滤器应使用类型 URL
type.googleapis.com/envoy.extensions.filters.network.ext_authz.v3.ExtAuthz配置。
外部授权网络过滤器调用外部授权服务以检查传入请求是否被授权。如果网络过滤器认为请求未经授权,则连接将被关闭。
小贴士
建议在此过滤器链中首先配置此过滤器,以便在过滤器处理请求之前对请求进行授权。
传递到授权服务的请求内容由 CheckRequest 指定。
网络过滤器、gRPC 服务,可以按如下方式配置。您可以在 网络过滤器 中查看所有配置选项。
示例
一个示例过滤器配置可能是
filters:
- name: envoy.filters.network.ext_authz
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.ext_authz.v3.ExtAuthz
stat_prefix: ext_authz
grpc_service:
envoy_grpc:
cluster_name: ext-authz
include_peer_certificate: true
clusters:
- name: ext-authz
type: static
typed_extension_protocol_options:
envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
"@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
explicit_http_config:
http2_protocol_options: {}
load_assignment:
cluster_name: ext-authz
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 10003
发送到指定身份验证服务的示例请求主体如下所示
{
"source":{
"address":{
"socket_address":{
"address": "172.17.0.1",
"port_value": 56746
}
}
}
"destination":{
"service": "www.bing.com",
"address":{
"socket_address": {
"address": "127.0.0.1",
"port_value": 10003
}
}
}
}
统计信息
网络过滤器在 *config.ext_authz.* 命名空间中输出统计信息。
名称 |
类型 |
描述 |
|---|---|---|
total |
计数器 |
来自过滤器的总响应。 |
error |
计数器 |
联系外部服务的总错误。 |
denied |
计数器 |
来自授权服务的总响应,这些响应将拒绝流量。 |
disabled |
计数器 |
由于过滤器被禁用,因此无需调用外部服务即可允许的总请求。 |
failure_mode_allowed |
计数器 |
由于 failure_mode_allow 设置为 true,因此出现错误但允许的总请求。 |
ok |
计数器 |
来自授权服务的总响应,这些响应将允许流量。 |
cx_closed |
计数器 |
已关闭的总连接。 |
active |
仪表 |
正在传输到授权服务的总活动请求。 |
动态元数据
外部授权过滤器仅在 gRPC 授权服务器返回具有非空 CheckResponse 字段的 dynamic_metadata 时才作为不透明的 google.protobuf.Struct 发射动态元数据。