Istio安全性( 五 )
有一些例外 。 例如 , 以下字段仅支持完全匹配:
- when 部分下的 key 字段
- source 部分下 的 ipBlocks
- to 部分下的 ports 字段
apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata:name: testernamespace: defaultspec:selector:matchLabels:app: productsaction: ALLOWrules:- to:- operation:paths: ["/test/*", "*/info"]
排除匹配为了匹配诸如 when 字段中的 notValues,source 字段中的 notIpBlocks,to 字段中的 notPorts 之类的否定条件 , Istio 支持排除匹配 。
以下示例:如果请求路径不是 /healthz, 则要求从请求的 JWT 认证中导出的主体是有效的 。因此 , 该策略从 JWT 身份验证中排除对 /healthz 路径的请求:
apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata:name: disable-jwt-for-healthznamespace: defaultspec:selector:matchLabels:app: productsaction: ALLOWrules:- to:- operation:notPaths: ["/healthz"]from:- source:requestPrincipals: ["*"]
下面的示例拒绝到 /admin 路径且不带请求主体的请求:apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata:name: enable-jwt-for-adminnamespace: defaultspec:selector:matchLabels:app: productsaction: DENYrules:- to:- operation:paths: ["/admin"]from:- source:notRequestPrincipals: ["*"]
全部允许和默认全部拒绝授权策略以下示例显示了一个简单的 allow-all 授权策略 , 该策略允许完全访问 default 命名空间中的所有工作负载 。
apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata:name: allow-allnamespace: defaultspec:action: ALLOWrules:- {}
以下示例显示了一个策略 , 该策略不允许任何对 admin 命名空间工作负载的访问 。apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata:name: deny-allnamespace: adminspec:{}
自定义条件您还可以使用 when 部分指定其他条件 。例如 , 下面的 AuthorizationPolicy 定义包括以下条件: request.headers [version] 是 v1 或 v2。在这种情况下 , key 是 request.headers [version], 它是 Istio 属性 request.headers (是个字典)中的一项 。
apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata: name: httpbin namespace: foospec: selector:matchLabels:app: httpbinversion: v1 action: ALLOW rules: - from:- source:principals: ["cluster.local/ns/default/sa/sleep"]to:- operation:methods: ["GET"]when:- key: request.headers[version]values: ["v1", "v2"]
条件页面中列出了支持的条件 key 值 。认证与未认证身份
如果要使工作负载可公开访问 , 则需要将 source 部分留空 。 这允许来自所有(经过认证和未经认证)的用户和工作负载的源 , 例如:
apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata: name: httpbin namespace: foospec: selector:matchLabels:app: httpbinversion: v1 action: ALLOW rules: - to:- operation:methods: ["GET", "POST"]
要仅允许经过认证的用户 , 请将 principal 设置为 "*", 例如:apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata: name: httpbin namespace: foospec: selector:matchLabels:app: httpbinversion: v1 action: ALLOW rules: - from:- source:principals: ["*"]to:- operation:methods: ["GET", "POST"]
在纯TCP协议上使用Istio授权Istio授权使用任何简单的TCP协议(例如MongoDB)支持工作负载 。 在这种情况下 , 您可以按照与HTTP工作负载相同的方式配置授权策略 。 区别在于某些字段和条件仅适用于HTTP工作负载 。 这些字段包括:- 授权策略对象源部分的 request_principals 字段
- 授权策略对象操作部分的 hosts , methods 和 paths 字段
假设您在端口 27017 上具有MongoDB服务 , 以下示例将授权策略配置为仅允许Istio网格中的 bookinfo-ratings-v2 服务访问MongoDB工作负载 。
apiVersion: "security.istio.io/v1beta1"kind: AuthorizationPolicymetadata:name: mongodb-policynamespace: defaultspec: selector:matchLabels:app: mongodb action: ALLOW rules: - from:- source:principals: ["cluster.local/ns/default/sa/bookinfo-ratings-v2"]to:- operation:ports: ["27017"]
作者:iyacontrol【Istio安全性】出处:
- 先别|用了周冬雨的照片,我会成为下一个被告?自媒体创作者先别自乱阵脚
- V2X|V2X:确保未来道路交通数据交换的安全性
- OPPO在影像|出色影像带来亮眼成绩,OPPO手机用户成了抖音最活跃创作者?
- 欣赏:萌新作业-7号机
- Java安全之Javassist动态编程
- 为什么微信推荐这么快?
- 谁能“干掉”特斯拉?
- 你还在为账号安全性低而担忧吗,不妨试试这样设置密码
- 设计模式系列—单例设计模式
- 从底层理解this是什么