是否可以“链接”Istio 授权策略?

问题描述 投票:0回答:1

我有一个关于使用 AuthorizationPolicy 来完成特定场景的问题。特别是,我使用 CUSTOM 操作和 OAuth2-Proxy 进行了设置,以便到达我的 Ingress Gateway(目标为主机 httpbin.example.com)的流量通过 OAuth2-Proxy 和 Dex 发送以进行登录。登录后,我就可以按预期访问 httpbin pod。

但是……我想做的是在登录后进行进一步处理,例如,我可以允许某些白名单用户组访问特定工作负载,但不是“每个可以登录的人”,然后反过来限制对特定工作负载的访问不同的用户组有不同的工作负载。

我天真的想法是,将基于初始自定义操作的 AuthorizationPolicy 范围限定为 Ingress Gateway 以触发 OAuth 登录,然后将后续的 AuthorizationPolicies 范围限定为特定工作负载,并从 OAuth 流提供的标头中检查用户主体.

这样的理解合理吗?如果没有的话,有没有其他方法可以达到同样的整体效果?

authentication oauth-2.0 oauth authorization istio
1个回答
0
投票

是的,这是正确的理解。首先评估 CUSTOM AuthorizationPolicy,然后您可以使用另一个 ALLOW/DENY 策略。 https://istio.io/latest/docs/concepts/security/#implicit-enablement

我看到如何实现您的场景有两种选择:

  1. 在 OAuth2 代理中配置
    --set-authorization-header
    标志,将授权标头中的 JWT 令牌转发到上游服务。然后设置 Istio RequestAuthentication 来验证和解析该令牌并检查常规 AuthorizationPolicy 中的角色。
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: jwt-authentication
spec:
  jwtRules:
  - issuer: https://<your-issuer-uri>
    jwksUri: https://<your-jwks-uri>
  selector:
    matchLabels:
      # match your workload
      app: my-workload
---
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: roles-policy
spec:
  action: ALLOW
  rules:
  - when:
    - key: request.auth.claims[groups]
      values:
      - admin
  selector:
    matchLabels:
      # match your workload
      app: my-workload
  1. 另一个选项是在 OAuth2 代理中启用
    --set-xauthrequest
    标志,然后检查例如Istio AuthorizationPolicy 中
    X-Auth-Request-Groups
    标头的值。但您必须确保没有人可以绕过 OAuth2 代理并伪造此标头。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: roles-policy
spec:
  action: ALLOW
  rules:
  - when:
    - key: request.headers[X-Auth-Request-Groups]
      values:
      - admin
  selector:
    matchLabels:
      # match your workload
      app: my-workload

另外,不要忘记将

Authorization
X-Auth-Request-Groups
标头添加到 Istio
authz 提供程序配置中的 
headersToUpstreamOnAllow

© www.soinside.com 2019 - 2024. All rights reserved.