OPAのVisual Studio Code拡張機能
機能
できるようになることは次のとおり(2019/03/31時点)
- 保存時に構文チェック(現時点でエディタ上で表示はされません)
- OPAのpackageを評価
- 選択中の箇所を評価
- 選択中の箇所を部分評価(Partial Evaluation)
- 選択中の箇所を評価して、トレースを表示
- 選択中の箇所を評価してプロファイルを表示
- ワークスペース内のテストを実行
- ワークスペース内のカバレッジ表示の切り替え
- 選択中の箇所のカバレッジ表示切り替え
準備するもの
OPAのバイナリを忘れずに!
opa
コマンドが叩けることが前提になっているので、ちゃんとインストールしておきましょう。
opa
に PATH
を通しておくか、VSCodeの設定で Opa: Path
にバイナリへのパスを直接指定することもできます!
お試し
拡張機能ページでGIFの紹介アニメーションがあるんですけど、サラッとどんどん進んじゃうので、一個一個見ていきます!
まず下の内容で simple.rego
を書きます。
package http.authz default allow = false allow { input.method = "GET" input.path = ["salary", user] input.user = user }
文でこのポリシーを言い表すと
- デフォルトは許可しない
- 下が全て満たされていれば許可
- 入力
method
が"GET"
- 入力
path
が["salary", user]
である - 入力
user
がpath
のuser
と一致
- 入力
となります。
ワークスペースのルートに input.json
を置くと、その中身をOPAの入力としてお試し実行することができます。
まずは次の内容にしてみましょう!
{ "user": "bob", "method": "GET", "path": ["salary", "bob"] }
bob
は bob
自身の salary
を見ようとしてるので、これは許可されるはずです!
Regoの allow
の部分をvscodeで選択して Cmd + Shift + p
して、OPA: Evaluate Selection
すると、この部分だけ評価できます。
やってみましょう。
期待通り、この結果は true
となります!
では、 path
を bob
から alice
に変えてみるとどうなるでしょ。
{ "user": "bob", "method": "GET", "path": ["salary", "alice"] }
もう一度 allow
を選択して実行すると次の通り。
自分の salary
じゃなくなってるので false
になってますね!
次はルールのBodyを選択して評価します!
input.method
は GET
なので結果は true
ですね!もう一行増やして実行してみましょう。
この結果の output.json
は、複数行関わった場合に何を基準にしているかちょっとわかっていないです。
予想としては ["salary", "alice"] = ["salary", user]
になって、 user
に alice
が代入されているのかなと思っています。そしてその結果が output.json
に出ているのではないかと。(この評価方法が正しいかは別途確認したいです)
では最終行も含めて実行してみましょう!
これは最終的に "bob" = "alice"
しようとして、 true
にならないので、結果は空っぽになります。
input.json
の path
を alice
から bob
に戻しましょう!
{ "user": "bob", "method": "GET", "path": ["salary", "bob"] }
そして実行してみると次のとおり!
何かしら戻り値が返ってくるのがわかります。
上でも返ってきたのと同様 user
に関するJSONなのですが、なぜこの値になるのかは現段階でちょっとわからないです。
allow
を選択して実行すると直感的な true
が返ってくるのですが。。。
おわりに
本記事ではOPAのVSCode拡張機能を紹介しました! 個人的にかなりうれしいのは下の2項目です。
- シンタックスハイライト
input.json
用意すれば即時実行できる
まだまだ使いこなせていないのでこの記事もわかったことが増え次第更新していきたいです!