应用服务网格

OPA策略

2025-08-14 02:38:21

OPAOpen Policy Agent)是一个通用的策略引擎,通过声明式的Rego语言实现丰富的授权策略。ASM服务网格提供一键集成OPA引擎功能,整体架构如下:

其中OPA控制面包括OPA webhook服务,用于实现OPA sidecar的注入;OPA policy controller监听OPA策略CRD,用于实现OPA策略分发;业务pod内除了业务容器和istio-proxy之外还会注入OPA sidecar,外部请求pod时流量被istio-proxy拦截,根据定义的授权策略请求OPA sidecar,实现对请求的授权。

注意:OPA sidecar当前使用18181端口管理OPA策略,使用19191端口提供外部鉴权服务,业务pod注意避开这两个端口

 

开启OPA功能

使用OPA功能时首先要在打开开关,进入服务网格控制台,网格实例 -> 网格配置 -> 自定义配置,勾选 启用OPA  即可


关闭OPA功能

进入服务网格控制台,选择网格实例 -> 网格配置 -> 自定义配置,取消勾选 启用OPA  即可

 

OPA策略管理

ASM服务网格采用自定义CRD(OpaPolicy)方式管理OPA策略,主要包括OPA策略生效的工作负载选择以及OPA策略(Rego)。

 

以下面的配置为例:

default命名空间下标签包含version: v1的工作负载生效,如果用guest组登录,只能访问/productpage,admin组登录,既可以访问/productpage,也可以访问/api/v1/products,其中alice属于guest组,bob属于admin组。

 

策略执行时会从请求中解析出用户,结合用户的权限和请求信息对访问进行鉴权。

apiVersion: istio.ctyun.cn/v1beta1
kind: OpaPolicy
metadata:
  name: object-policy
  namespace: default
spec:
  policy: |-
    package istio.authz
    import input.attributes.request.http as http_request
    default allow := false
    allow {
        roles_for_user[r]
        required_roles[r]
    }
    roles_for_user[r] {
        r := user_roles[user_name][_]
    }
    required_roles[r] {
        perm := role_perms[r][_]
        perm.method = http_request.method
        perm.path = http_request.path
    }
    user_name = parsed {
        [_, encoded] := split(http_request.headers.authorization, " ")
        [parsed, _] := split(base64url.decode(encoded), ":")
    }
    user_roles = {
        "alice": ["guest"],
        "bob": ["admin"]
    }
    role_perms = {
        "guest": [
            {"method": "GET",  "path": "/productpage"},
        ],
        "admin": [
            {"method": "GET",  "path": "/productpage"},
            {"method": "GET",  "path": "/api/v1/products"},
        ],
    }
  workloadSelector:
    labels:
      version: v1

OpaPolicy配置说明

字段

类型

必选

说明

workloadSelector

WorkloadSelector

No

选择策略生效的工作负载

policy

string

No

Rego策略

 

创建OPA策略

1. 进入服务网格控制台,选择 网格安全中心 -> OPA策略 菜单,选择要配置的命名空间

2. 选择使用YAML创建

 

修改OPA策略

1. 进入服务网格控制台,选择 网格安全中心 -> OPA策略 菜单,选择要配置的命名空间

2. 列表页会展示当前命名空间下的OPA策略,找到要修改的策略,选择右侧操作栏的修改,编辑提交即可

 

删除OPA策略

1. 进入服务网格控制台,选择 网格安全中心 -> OPA策略 菜单,选择要配置的命名空间

2. 列表页会展示当前命名空间下的OPA策略,找到要修改的策略,选择右侧操作栏的删除即可


IhyOPh5z30H_