使用OPA作为客户的烧瓶扩展
Flask-OPA的Python项目详细描述
烧瓶OPA
简单易用的Flask扩展允许您使用 Open Policy Agent。它允许
- http api授权
- 策略强制点(aop在方法上使用decorators)
快速启动
建议您尝试包examples
中的应用程序。感谢Makefile
,您可以运行演示项目
使用以下命令
make demo
它是怎么工作的?
为了更好地理解make demo
的作用以及如何在项目中设置flask_opa
,请按照
下一步:
在服务器模式下运行opa
- 检查latest OPA release并下载它。
- 将二进制文件放在系统的路径中
- 允许使用类似
chmod 755 ./opa
的命令执行它
- 使用示例策略在服务器模式下运行opa
opa run -s -w examples
-s
是在服务器模式下运行它,而不是打开repl-w
用于监视数据/策略文件的更改
指定配置变量
OPA_URL
在运行的opa服务器中可访问的url,用于评估输入。它包括 政策,例如http://localhost:8181/v1/data/examples/allow
。OPA_SECURED
布尔值指定是否将对应用程序启用opa。
有关详细信息,请参见rest api reference
将opa类绑定到烧瓶应用程序
很容易将烧瓶opa库绑定到应用程序。只需执行以下步骤:
创建opa实例
app=Flask(__name__)app.config.from_pyfile('app.cfg')opa=OPA(app,parse_input)
让我们看看传递给opa类的参数:
parse_input
(必需)包含返回要由策略计算的输入数据json的方法,例如:
{"input":{"method":"GET","path":["data","jon"],"user":"paul"}}
url
(可选)使用特定的url,而不是应用程序配置中指定的OPA_URL
。allow_function
(可选)谓词,用于确定来自opa的响应是否允许(true)或拒绝(false)请求
如果要在应用程序中强制实施opa安全性,可以创建如下opa实例:
opa=OPA.secure(app,parse_input,url="http://localhost:8181/v1/data/package_name/allow")
或
opa=OPA(app,parse_input,url="http://localhost:8181/v1/data/package_name/allow").secured()
否则,只有当
OPA_SECURED
是True
时,opa才会强制您的安全性。如果要使用
app.logger.setLevel(logging.DEBUG)
运行烧瓶应用程序。
政策执行点
这个模块提供的特性之一是Policy Enforcement Point,它基本上允许您确保策略 在你申请的任何方法。 出于实际目的,让我们设想一个示例方法,它负责记录与 用户。在这种情况下,我们必须创建不同的输入函数,为某些策略提供有用的信息 将决定是否应将日志发送到远程服务器。假设这样的日志记录方法如下:
deflog_remotely(content):# Imagine a code to log this remotelyapp.logger.info("Logged remotely: %s",content)
为了修饰它,我们将使用OPA
实例作为函数(可调用模式)创建一个PEP装饰器。
这些参数与用于保护应用程序的参数几乎相同。结果实例将修饰
我们感兴趣的功能:
defvalidate_logging_input_function(*arg,**kwargs):return{"input":{"user":request.headers.get("Authorization",""),"content":arg[0]}}secure_logging=app.opa("Logging PEP",app.config["OPA_URL_LOGGING"],validate_logging_input_function)@secure_loggingdeflog_remotely(content):# Imagine a code to log content remotelyapp.logger.info("Logged remotely: %s",content)
正如您可能已经注意到的,添加PEP真正需要的新功能是一个新的输入函数。这个
函数可以提供比为整个应用程序创建的OPA
实例使用的输入更通用的输入:
示例它提供与用户请求相关的数据,以及由修饰函数的参数提供的数据
好。
阅读examples README了解有关如何运行演示的详细信息。
生成文件
makefile包含您可能需要的多个有用操作。用
make help
状态
预发行版或beta版:该项目已经经历了多轮的积极开发,目标是 稳定的租赁版本,但还没有。
发展道路:积极(2018年10月31日)
作者
埃利埃·埃尔南德斯·加贝
链接
- 主要网站:EliuX Overflow
- 推特:@eliux_black
- LinkedIn:eliecer-hernández-garbey-16172686
许可证
这个项目是在麻省理工学院的许可下授权的-请参阅LICENSE.md文件了解详细信息。