• 安全保障基于软件全生命周期-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的配置规则可查看官网信息

  • 相关阅读:
    SpringBoot整合EasyExcel,Excel导入导出就靠它了
    Wi-Fi 6还没用上,Wi-Fi 7就要来了?
    Taurus.MVC WebMVC 入门开发教程3:数据绑定Model
    源码解析SpringMVC处理请求的完整流程
    力扣记录:剑指offer(3)——JZ24-32
    LVS+keepalived高可用群集
    web前端期末大作业 html+css+javascript汽车介绍网页设计实例 企业网站制作(带报告3490字)
    力扣1901.寻找峰值II
    Matlab----程序流程控制
    Sa-Token 多账号认证:同时为系统的 Admin 账号和 User 账号提供鉴权操作
  • 原文地址:https://blog.csdn.net/qiaotl/article/details/126021697