Istio安全性( 五 )

有一些例外 。 例如 , 以下字段仅支持完全匹配:

  • when 部分下的 key 字段
  • source 部分下 的 ipBlocks
  • to 部分下的 ports 字段
以下示例策略允许访问带有 /test/* 前缀或 */info 后缀的路径 。
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 字段
支持的条件可以在条?件页面中查阅 。 如果将任何仅HTTP字段用于TCP工作负载 , 则Istio将忽略授权策略中的仅HTTP字段 。
假设您在端口 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安全性】出处: