• 安全保障基于软件全生命周期-Istio的授权机制


    Istio 的授权功能为网格中的工作负载提供网格、命名空间和工作负载级别的访问控制。授权架构如下所示:

     每个 Envoy 代理都运行一个授权引擎,该引擎在运行时授权请求。当请求到达代理时,授权引擎根据当前授权策略评估请求上下文,并返回授权结果 ALLOW 或 DENY。 运维人员使用 .yaml 文件指定 Istio 授权策略。需要注意:拒绝策略优先于允许策略
    授权策略配置规则如下所示:
    要配置授权策略,请创建一个 AuthorizationPolicy 自定义资源。一个授权策略包括选择器(selector),动作(action) 和一个规则(rules)列表:
    selector 字段指定策略的目标
    action 字段指定允许还是拒绝请求
    rules 指定何时触发动作
    rules 下的 from 字段指定请求的来源
    rules 下的 to 字段指定请求的操作
    rules 下的 when 字段指定应用规则所需的条件

    下面通过实际例子来看看AuthorizationPolicy的规则。这里要沿用上一篇博客在foo和bar namespace下面创建的httpbin和sleep服务。

    案例一:允许所有请求的AuthorizationPolicy,spec中不配置任何规则,即允许所有请求。

    1. kubectl apply -f - <<EOF
    2. apiVersion: security.istio.io/v1beta1
    3. kind: AuthorizationPolicy
    4. metadata:
    5. name: allow-nothing
    6. namespace: foo
    7. spec:
    8. {}
    9. EOF

    创建该AuthorizationPolicy后,从bar.sleep访问foo.httpbin和foo.sleep访问foo.httpbin都能成功

    1. kubectl exec "$(kubectl get pod -l app=sleep -n bar -o jsonpath={.items..metadata.name})" -c sleep -n bar -- curl http://httpbin.foo:8000/headers
    2. 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

    案例二:创建另外一个AuthorizationPolicy, 只控制了rule/to即允许访问foo namespace下的httpbin的GET请求。故创建下面的Policy后,通过上面的命令访问仍然能访问成功。

    1. kubectl apply -f - <
    2. apiVersion: security.istio.io/v1beta1
    3. kind: AuthorizationPolicy
    4. metadata:
    5. name: "httpbin-viewer"
    6. namespace: foo
    7. spec:
    8. selector:
    9. matchLabels:
    10. app: httpbin
    11. action: ALLOW
    12. rules:
    13. - to:
    14. - operation:
    15. methods: ["GET"]
    16. EOF

    案例三:接着再创建一个定义了From的AuthorizationPolicy,允许bar namespace下的sa=sleep的来源访问foo下面的httpbin的GET请求。

    1. kubectl apply -f - <
    2. apiVersion: security.istio.io/v1beta1
    3. kind: AuthorizationPolicy
    4. metadata:
    5. name: "httpbin-viewer"
    6. namespace: foo
    7. spec:
    8. selector:
    9. matchLabels:
    10. app: httpbin
    11. action: ALLOW
    12. rules:
    13. - from:
    14. - source:
    15. principals: ["cluster.local/ns/bar/sa/sleep"]
    16. to:
    17. - operation:
    18. methods: ["GET"]
    19. EOF

    再次用上面的命令访问,可以看到如果用foo namespace下的sa访问提示access deny。

     上面通过实际例子演示了如何通过配置AuthorizationPolicy来控制应用于应用间访问授权。更多AuthorizationPolicy的配置规则可查看官网信息

  • 相关阅读:
    OpenCV中拟合线性方程(最小二乘法)
    【MySQL】MySQL中的逻辑运算符,位运算符和运算符的优先级
    Idea汉化
    DO280OpenShift访问控制--加密和ConfigMap
    asp.net学生在线论坛
    经纬信息IPO过会:年营收3.5亿 叶肖华控制46.3%股权
    mysql.mongoDb,neo4j数据库对比
    关于mac终端 无法显示中文 + echo cut 组合问题
    拦截器碰到的坑记录
    9成企业打算发年终奖,人均到手2.3万元
  • 原文地址:https://blog.csdn.net/qiaotl/article/details/126021697