阿里云服务网格ASM之扩展能力(3):在ASM中使用开放策略代理OPA

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 作为由CNCF托管的一个孵化项目,开放策略代理(OPA)是一个策略引擎,可用于为您的应用程序实现细粒度的访问控制。服务网格ASM集成了开放策略代理OPA,可用于为您的应用程序实现细粒度的访问控制。

本系列文章讲讲述阿里云服务网格ASM的一些扩展能力:

欢迎扫码入群进一步交流:
image

前面的系列文档中介绍了如何创建服务网格ASM实例,并介绍了如何将一个应用示例部署到 ASM 实例中,本文在此基础上介绍如何在ASM中使用开放策略代理OPA定义细粒度访问控制。

前提条件

  • 已创建至少一个 ASM 实例,并已添加至少一个 ACK 集群到该实例中。
  • 已通过 Kubernetes 命令行客户端 kubectl 连接到 ASM 实例中新添加的 ACK 集群,详情参见通过 kubectl 连接 Kubernetes 集群
  • 已通过 Kubernetes 命令行客户端 kubectl 连接到 ASM 实例,详情参见通过 kubectl 连接 ASM 实例

开放策略代理OPA

作为由CNCF托管的一个孵化项目,开放策略代理(OPA)是一个策略引擎,可用于为您的应用程序实现细粒度的访问控制。例如,可以使用OPA 跨微服务实现授权等。如图所示,OPA作为通用策略引擎,可以与微服务一起部署为独立服务。为了保护应用程序,必须先授权对微服务的每个请求,然后才能对其进行处理。为了检查授权,微服务对OPA进行API调用,以确定请求是否被授权。

image.png

在ASM中启用OPA

服务网格ASM集成了开放策略代理OPA,可用于为您的应用程序实现细粒度的访问控制。例如,可以使用OPA 跨微服务实现授权等。启用后,如同Istio Envoy代理容器一样,OPA代理容器也会随之被注入到业务Pod中。然后,在ASM中就可以使用OPA定义访问控制策略,为分布式应用的开发者提供了开箱可用的能力,可以帮助开发者快速定义使用策略,提升开发效率。
image.png

其中,如图所示在创建服务网格实例时,可以通过设置是否启用OPA插件。

功能设置

如果在创建服务网格ASM实例时没有勾选启用OPA插件,可以通过如下方式重启开启。

  • 登录服务网格控制台,在ASM实例详情页的右上角,点击功能设置按钮。

image.png

  • 在弹出的窗口中,可以重新勾选启用OPA插件。

注意:部署业务Pod之前,必须确保已经部署了OPA配置文件和策略的配置项Configmap,具体如下。

部署OPA配置

部署OPA配置文件。通过 kubectl 连接到 ASM 实例中新添加的 ACK 集群,执行如下命令:

kubectl apply -n {替换成实际的namespace} -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: opa-istio-config
data:
  config.yaml: |
    plugins:
      envoy_ext_authz_grpc:
        addr: :9191
        path: istio/authz/allow
EOF        

部署OPA策略

当前在ASM中已经支持使用Rego定义的OPA策略,后续会支持基于WebAssembly的OPA扩展能力。

通过 kubectl 连接到 ASM 实例中新添加的 ACK 集群,替换成实际的策略定义,执行如下命令:

kubectl apply -n {替换成实际的namespace} -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: opa-policy
data:
  policy.rego: |  ###以下为示例策略定义,需要替换成实际的策略定义
    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 = {
        "guest1": ["guest"],
        "admin1": ["admin"]
    }
    role_perms = {
        "guest": [
            {"method": "GET",  "path": "/productpage"},
        ],
        "admin": [
            {"method": "GET",  "path": "/productpage"},
            {"method": "GET",  "path": "/api/v1/products"},
        ],
    }
EOF        

注入OPA代理容器

按照部署应用到 ASM 实例重新部署示例应用到 ASM 实例,并定义相应的Istio虚拟服务和入口网关,详情参见管理 Istio 资源定义

  • 登录容器服务管理控制台,单击左侧导航栏中的应用->容器组
  • 在右侧打开的页面中,选择对应的集群及命名空间(如default),此时Bookinfo应用Pod应为运行中,并且每一个Pod内都被注入了Sidecar代理(istio-proxy)和OPA代理(opa-istio),类似如下图所示:

image.png

执行结果

上述策略限制对BookInfo的访问,定义如下:

  • guest1被授予guest角色,并且可以访问/productpage但不能访问/v1/api/products
  • admin1被授予admin角色,并且可以访问/productpage/v1/api/products
curl -i  --user guest1:password http://{入口网关服务的IP地址}/productpage
HTTP/1.1 200 OK
......
curl -i  --user guest1:password http://{入口网关服务的IP地址}/api/v1/products
HTTP/1.1 403 Forbidden
......
curl -i  --user admin1:password http://{入口网关服务的IP地址}/productpage
HTTP/1.1 200 OK
......
curl -i  --user admin1:password http://{入口网关服务的IP地址}/api/v1/products
HTTP/1.1 200 OK
......
相关文章
|
2天前
|
监控 网络协议 API
阿里云BssOpenAPI是一个基于阿里云开放API的服务
【2月更文挑战第24天】阿里云BssOpenAPI是一个基于阿里云开放API的服务
164 6
|
2天前
|
存储 人工智能 Cloud Native
阿里云瑶池数据库训练营权益:《玩转Lindorm》学习资料开放下载!
阿里云瑶池数据库训练营权益:《玩转Lindorm》学习资料开放下载!
|
2天前
|
关系型数据库 分布式数据库 数据库
阿里云瑶池数据库训练营权益:PolarDB开发者大会主题资料开放下载!
阿里云瑶池数据库训练营权益:PolarDB开发者大会主题资料开放下载!
|
6月前
|
人工智能 并行计算 开发工具
阿里云Q2财报:开放、开源、开发者
阿里云Q2财报:开放、开源、开发者
921 0
阿里云Q2财报:开放、开源、开发者
|
6月前
|
人工智能 机器人 数据安全/隐私保护
【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!
阿里云最近发布了两款大型开源模型QWen-7B和QWen-7b-Chat,这两款模型的参数规模达到了70亿,用户可以在Hugging Face和ModelScope上免费使用。尽管大型模型的热度近期有所下降,但阿里云选择开源模型来赢得用户的支持,并保持自身在竞争中的优势。这一举措也引起了人们的关注,因为不开源可能会导致信息泄露的风险。通过开源模型,阿里云既能满足用户需求,又能保持技术竞争力。
540 0
 【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!
|
2天前
|
人工智能 Cloud Native 关系型数据库
阿里云瑶池数据库训练营权益:2022-2023云栖大会主题资料开放下载!
阿里云瑶池数据库训练营权益:2022-2023云栖大会主题资料开放下载!
|
6月前
|
域名解析 监控 安全
接口开放太麻烦?试试阿里云API网关吧
我在[多方合作时,系统间的交互是怎么做的?](https://www.cnblogs.com/wlovet/p/17466812.html)这篇文章中写过一些多方合作时接口的调用规则和例子,然而,接口开放所涉及的安全、权限、监控、流量控制等问题,可不是简简单单就可以解决的,这一般需要专业的开放平台来支撑。但为了开放几个接口就要做一个开放平台,实在是不合算。为此阿里云为了解决这类需求推出了一款强大的工具——API网关。本文将介绍阿里云API网关的特点和优势,以及如何使用API网关来简化接口开放的过程。
205 0
接口开放太麻烦?试试阿里云API网关吧
|
2天前
服务网格中授权策略对性能的影响大吗?
在使用服务网格时,面对一些大规模集群,大家可能会担心:网格中授权策略内容过于庞大时,对网格代理的性能影响大吗?本文中我们就会给大家简单测试一下:不同情况下,授权策略中配置上万条IP时,对请求影响有多大? 结论:大多数情况下,对请求影响十分微小。
193 1
|
2天前
|
Web App开发 人工智能 算法
阿里云AI新品“通义听悟”,开放公测!
阿里云在会上宣布了通义大模型新进展,聚焦音视频的AI新品“通义听悟”上线,成为国内首个开放公测的大模型应用产品。
343 0
|
7月前
|
人工智能 自动驾驶 云栖大会
2023云栖大会 阿里云CTO周靖人,打造一朵AI时代最开放的云
2023云栖大会上,阿里云宣布了一项重磅计划:阿里云高校计划,助力高校科研与教育加速,让每位中国在校大学生真实受益于普惠算力。目前,清华大学、北京大学、浙江大学、上海交通大学、中国科学技术大学、华南理工大学等高校已首批达成合作。
89126 307