如何为我的服务定义Istio策略来拒绝任何带有过期JWT访问令牌的请求?
的背景,我有一个弹簧引导KNative服务RequestAuthentication配置检查令牌发行人。
Istio默认这样做。默认情况下,任何已过期或无效的JWT令牌都将被拒绝。
但是,要使JWT令牌授权工作,必须配置授权策略。
以下示例的源代码
- 创建
AuthorizationPolicy
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]
- 获取有效的JWT令牌
TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.11/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
- 验证使用有效令牌的请求是否被允许
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}n"
根据您的需要调整以上示例
如果出于某种原因,Istio允许过期或无效的令牌,您应该检查先前应用的策略,以确保没有任何内容覆盖默认行为。