★悩み★
・Open Policy AgentのRego(レゴ)で作ったポリシーをPythonで利用したい。
・Open Policy AgentとPythonを連携する手順を知りたい。
・PythonのFastAPIから、Open Policy Agentのポリシーを利用したいな。
こういった「悩み」に答えます。
★本記事の内容★
① Open Policy AgentのポリシーをPython(FastAPI)から利用する為の準備
② Open Policy AgentのポリシーをPythonのFastAPIから利用する手順を紹介
これからご紹介する「【コピペOK】Open Policy AgentとPythonを連携する手順」を実践したことで、30分以内で「PythonのFastAPIからOpen Policy Agentのポリシーを利用」できました。
記事の前半では「PythonのFastAPIからOpen Policy Agentのポリシーを利用するための準備」を解説しつつ、記事の後半では「PythonのFastAPIからOpen Policy Agentのポリシーを利用する手順」を紹介します。
この記事を読み終えることで、「PythonのFastAPIからOpen Policy Agentのポリシーを利用できる」状態になります。
ちなみに、「Open Policy Agentとは何か?」に関しては、以下の記事をご覧ください。
また、「Open Policy AgentのRego(レゴ)言語でポリシーを作成する手順は?」に関しては、以下の記事をご覧ください。
Open Policy AgentのポリシーをPython(FastAPI)から利用する為の準備
「Open Policy AgentのポリシーをPython(FastAPI)から利用する為の準備」に関してご紹介します。
★Open Policy AgentのポリシーをPython(FastAPI)から利用する為の準備★
手順1:Open Policy Agentをインストール
手順2:Pythonをインストール
手順3:Pythonのライブラリ「FastAPI」をインストール
上記の流れで、「Open Policy AgentのポリシーをPython(FastAPI)から利用する為の準備」ができます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年7月7日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「Open Policy AgentのポリシーをPython(FastAPI)から利用する為の準備」の各手順に関してご説明します。
手順1:Open Policy Agentをインストール
「手順1:Open Policy Agentをインストール」に関してご説明します。
Python(FastAPI)からOpen Policy Agentのポリシーを利用するためにも、Open Policy Agentをインストールしましょう。
「Open Policy Agentのインストール手順」に関しては、以下の記事「手順1と手順2」をご覧ください。
既にOpen Policy Agentをインストール済みである場合、本手順を省略してください。
以上で、「手順1:Open Policy Agentをインストール」は完了です。
手順2:Pythonをインストール
「手順2:Pythonをインストール」に関してご説明します。
FastAPIをインストールするためにもPythonをインストールしましょう。
以下の記事を参考にし、お使いのパソコンやサーバーにPythonをインストールしましょう。
>> 【ubuntu向け】pyenvでPythonをインストールする手順【簡単】
>> 【コピペOK】pyenvでPythonをインストールする手順【Linux用】
>> 【最短5分】PyAutoGUIをWindowsにインストールする手順の「手順1:Pythonのインストール」を参照
>> 【環境構築】インストーラーでMacOSにPythonをインストール
既にPythonをインストールされている方は、本手順を省略してください。
以上で、「手順2:Pythonをインストール」は完了です。
手順3:Pythonのライブラリ「FastAPI」をインストール
「手順3:Pythonのライブラリ「FastAPI」をインストール」に関してご説明します。
PythonからOpen Policy Agentのポリシーを利用するためにも、Pythonのライブラリ「FastAPI」をインストールしましょう。
「FastAPIのインストール手順」に関しては、以下の記事をご覧ください。
既にFastAPIをインストールされている方は、本手順を省略してください。
以上で、「手順3:Pythonのライブラリ「FastAPI」をインストール」は完了です。
上記の流れで、Open Policy AgentのポリシーをPython(FastAPI)から利用する為の準備ができました。
Open Policy AgentのポリシーをPythonのFastAPIから利用する手順
「Open Policy AgentのポリシーをPythonのFastAPIから利用する手順」に関してご紹介します。
★Open Policy AgentのポリシーをPythonのFastAPIから利用する流れ★
手順1:Open Policy AgentのRego(レゴ)言語でポリシーを作成
手順2:PythonでOpen Policy Agentのポリシーを利用するプログラムを作成
手順3:「Open Policy Agentのポリシーを利用するプログラム」の動作確認
上記の流れで、「Open Policy AgentのポリシーをPythonのFastAPIから利用」できます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年7月7日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「Open Policy AgentのポリシーをPythonのFastAPIから利用する流れ」の各手順に関してご説明します。
手順1:Open Policy AgentのRego(レゴ)言語でポリシーを作成
「手順1:Open Policy AgentのRego(レゴ)言語でポリシーを作成」に関してご説明します。
簡単なポリシーをOpen Policy AgentのRego(レゴ)言語で作成しましょう。
「Open Policy AgentのRego(レゴ)言語でポリシーを作成する手順」に関しては、以下の記事をご覧ください。
以降の手順では、「以下のポリシーを作成し、test.repoのファイル名で保存した」を想定として手順を解説します。
package system
main = allow
default allow = false
allow {
input.method = "GET"
input.path = ["test"]
input.user = "hero"
}
以上で、「手順1:Open Policy AgentのRego(レゴ)言語でポリシーを作成」は完了です。
手順2:PythonでOpen Policy Agentのポリシーを利用するプログラムを作成
「手順2:PythonでOpen Policy Agentのポリシーを利用するプログラムを作成」に関してご説明します。
PythonのFastAPIでOpen Policy Agentのポリシーを利用するプログラムを作成しましょう。
「PythonのFastAPIでOpen Policy Agentのポリシーを利用する」プログラムは、以下となります。プログラム中の「適宜変更」と書いてある部分は、自分用に書き換えてください。
from fastapi import FastAPI, Request
import json
import requests
app = FastAPI()
@app.get('/test')
async def hello(request: Request):
allowed = check_authorization(request)
if allowed == True:
return {"text": "hello world!"}
else:
return {}
'''
RequestからAuthorizationの値を取得する関数
'''
def get_authentication(request):
return request.headers.get("Authorization", "")
'''
Open Policy Agentのポリシーで、適切なRequestかを判定する関数
'''
def check_authorization(request):
user = get_authentication(request)
input = json.dumps({
"method": request.method,
"path": request.url.path.strip().split("/")[1:],
"user": user,
}, indent=2)
url = "http://localhost:8181" # Open Policy AgentのURL(適宜変更)
response = requests.post(url, data=input)
allowed = response.json()
print("-----")
print("user:" + user)
print("allowed:" + str(allowed))
print("-----")
return allowed
上記のプログラムを「python-fastapi-opa.py」というファイル名で保存しましょう。
以上で、「手順2:PythonでOpen Policy Agentのポリシーを利用するプログラムを作成」は完了です。
手順3:「Open Policy Agentのポリシーを利用するプログラム」の動作確認
「手順3:「Open Policy Agentのポリシーを利用するプログラム」の動作確認」に関してご説明します。
Pythonで作成した「FastAPIでOpen Policy Agentのポリシーを利用する」プログラムの動作を確認しましょう。
Pythonで作成した「FastAPIでOpen Policy Agentのポリシーを利用する」プログラムを起動するために、以下のコマンドを起動しましょう。
# ls
python-fastapi-opa.py
# uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [5272] using statreload
INFO: Started server process [5306]
INFO: Waiting for application startup.
INFO: Application startup complete.
コマンド実行後、「Application startup complete.」が表示された場合、「正常にPythonで作成したFastAPIでOpen Policy Agentのポリシーを利用するプログラムを起動できた」と判断できます。
続いて、Rego(レゴ)言語で作成したポリシーを使うために、Open Policy Agentを以下のコマンドで起動してください。
# ./opa run --server ./test.repo
{"addrs":[":8181"],"diagnostic-addrs":[],"level":"info","msg":"Initializing server.","time":"2021-07-07T20:47:57+09:00"}
コマンド実行後、「Initializing」が表示された場合、「正常にOpen Policy Agentを起動できた」と判断できます。
最後に、起動したプログラムの動作を確認するために、以下のcurlコマンドを順に実行してください。
# curl http://127.0.0.1:8000/test -H 'Authorization: admin'
{}
# curl http://127.0.0.1:8000/test -H 'Authorization: hero'
{"text":"hello world!"}
コマンド実行後、「’Authorization: hero’」の場合のみ、「{“text”:”hello world!”}」が表示された場合、「正常に起動したプログラムが動作した」と判断できます。
以上で、「手順3:「Open Policy Agentのポリシーを利用するプログラム」の動作確認」は完了です。
上記の流れで、Open Policy AgentのポリシーをPythonのFastAPIから利用できました。
【まとめ】Open Policy AgentとPythonを連携する手順
今回の記事を通して、「Open Policy AgentとPythonを連携する手順」をご紹介することで、以下の悩みを解消しました。
★悩み★
・Open Policy AgentのRego(レゴ)で作ったポリシーをPythonで利用したい。
・Open Policy AgentとPythonを連携する手順を知りたい。
・PythonのFastAPIから、Open Policy Agentのポリシーを利用したいな。
「Open Policy AgentのRego(レゴ)で作ったポリシーをPythonでどうやって利用するの?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント