Istio授权策略以排除同一命名空间中的某些应用
我需要在名称空间“default”中设置一个授权策略。这应该检查头DENY access中是否不存在JWT令牌。因此,我设置了一个策略“不允许任何内容”,如下所示。这将拒绝标头中没有有效令牌的所有请求。我想从此规则中排除同一命名空间中的某些应用。允许访问的应用程序需要位于同一命名空间中。我可以创建这样的规则吗。任何关于这方面的建议都会有所帮助。尝试了几件事,但都没有成功Istio授权策略以排除同一命名空间中的某些应用,istio,istio-gateway,Istio,Istio Gateway,我需要在名称空间“default”中设置一个授权策略。这应该检查头DENY access中是否不存在JWT令牌。因此,我设置了一个策略“不允许任何内容”,如下所示。这将拒绝标头中没有有效令牌的所有请求。我想从此规则中排除同一命名空间中的某些应用。允许访问的应用程序需要位于同一命名空间中。我可以创建这样的规则吗。任何关于这方面的建议都会有所帮助。尝试了几件事,但都没有成功 kind: “AuthorizationPolicy” metadata: name: “allow-nothing” nam
kind: “AuthorizationPolicy”
metadata:
name: “allow-nothing”
namespace: default
spec:
selector:
matchLabels:
istio: ingressgateway
action: DENY
rules:
from:
source:
notRequestPrincipals: ["*"]
编辑
这是我应用的更改:notHosts
、notMethods
和notpath
到操作中
kind: "AuthorizationPolicy"
metadata:
name: "deny-all"
namespace: istio-system
spec:
selector:
matchLabels:
istio: ingressgateway
action: DENY
rules:
- from:
- source:
notRequestPrincipals: ["*"]
- to:
- operation:
notHosts: ["localhost"]
notPaths: ["/ns/mypath"]
notMethods: ["GET"]
当我应用此策略时,仍会触发DENY
操作。请注意,在请求中,我没有请求主体。这些是入口网关日志
[2021-05-22T06:42:34.106Z] "GET /ns/mypath HTTP/1.1" 403 - rbac_access_denied_matched_policy[ns[istio-system]-policy[deny-all]-rule[0]] - "-" 0 19 0 - "w.x.y.z" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" "7b4eb6d0-bdc0-943f-ad81-292b65809639" "localhost" "-" - - a.b.c.d:8080 w.x.y.z:34974 - -
您可以尝试使用
规则.to.operation
中的notosts
、notMethods
和notpath
来实现这一点
比如说
apiVersion: security.istio.io/v1beta1
kind: “AuthorizationPolicy”
metadata:
name: “allow-nothing”
namespace: default
spec:
selector:
matchLabels:
istio: ingressgateway
action: DENY
rules:
- from:
- source:
notRequestPrincipals: ["*"]
- to:
- operation:
notHosts: ["*.example.com"]
not_paths: ["/admin"]
应拒绝对除主机以外的所有主机的通信,后缀为
.example.com
和/admin
路径。部分rbac\u访问被拒绝\u匹配\u策略[ns[istio system]-策略[deny all]-规则[0]
表示您的通信与拒绝所有
策略相匹配
现在,为了调查原因,您需要更多关于正在发生的事情的信息。第一步是启用调试日志,至少对于rbac
:istioctl pc日志--level“rbac:debug”$POD\u NAME.$NAMESPACE
。如果您想获得更多日志,可以省略rbac:debug
部分,但您将获得大量的额外日志(并非所有日志都有用,但其中一些日志很有用,例如jwt:debug、http:debug、http2:debug
可能有用)
启用此类日志后,我要检查的内容很少:
- 目标pod从源pod获取什么信息?源吊舱真的能够识别自己吗?您可能会看到一行代码,如
。您必须注意细节:例如,这里的元数据信息是空的,没有使用ssl。因此,实际上不可能确定正在使用哪个源主体,您可能会实际遇到故障。(这可能是原因:如果你想得到真正的答案,允许这样的日志:))。要解决此类问题,需要启用MTL2021-05-14T13:35:24.759773Z调试特使rbac检查连接:requestedServerName:…,sourceIP:a.a.a.a:33142,directRemoteIP:a.a.a:33142,remoteIP:a.a.a.a:33142,localAddress:b.b.b:8443,ssl:none,dynamicMetadata:
- 这有点笼统,可能与您的用例不太相关,但我认为这仍然值得一提(因为这是一个非常基本且经常被忽略的东西):一般来说,检查您正在执行的策略以及istio sidecar如何处理流量。如果您使用的是基于HTTP的策略,请确保流量被视为基于HTTP的策略。通常,HTTP策略应用于被视为普通TCP的流量上,它们将不匹配。检查