Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
汎用ポリシー言語Rego + OPAと認可・検証事例の紹介 / Introduction Re...
Search
Masayoshi Mizutani
May 17, 2024
Technology
1.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
汎用ポリシー言語Rego + OPAと認可・検証事例の紹介 / Introduction Rego & OPA for authorization and validation
Masayoshi Mizutani
May 17, 2024
More Decks by Masayoshi Mizutani
See All by Masayoshi Mizutani
セキュリティ・キャンプ2026B2 セキュリティ分析LLMエージェントの実装 /seccamp2026-b2
mizutani
8
8.1k
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
2.6k
システム・サービス運用におけるセキュリティ監視の近代的アプローチ /advnet2025-modern-secmon
mizutani
0
180
Deep Security Conference 2025:生成AI時代のセキュリティ監視 /dsc2025-genai-secmon
mizutani
9
6.4k
MCPの基礎とUbieにおける活用事例 /ubie-mcp
mizutani
4
3.3k
クラウドセキュリティのベストプラクティスと実装例 /cloudsec-bestpractice-example
mizutani
9
3.5k
Ubieにおけるセキュリティ課題管理の自動化 / ubie-sec-issue-automation
mizutani
0
1.1k
Trivy + Regoを用いたパッケージ脆弱性管理 /trivy-rego
mizutani
7
5.1k
リモートワークを支える 社内セキュリティ基盤の構築と運用 /secueiry-for-wfh
mizutani
0
860
Other Decks in Technology
See All in Technology
freeeにおけるSoftware Factory
freee
PRO
0
380
Codex を使った障害対応机上演習の実際
orgachem
PRO
0
330
価値について
gree_tech
PRO
0
160
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
2
220
AWS DevOps Agentはどこまで任せられるか 〜機能の現在地と、機能拡張の実践〜
nyankotaro
0
170
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
4
680
Let's Change Our World—Again
snoozer05
PRO
6
520
AWS Continuum for Penetration Testing に Deep Dive してみる
asanoharuki
1
800
VLA-JEPA: Enhancing Vision-Language-Action Models with Latent World Models
takmin
0
240
ポケモン対戦を自動で記録して振り返ろう
fufufukakaka
0
300
野良MCPサーバーを排除せよ!MCPサーバーのガバナンス
yukiogawa
1
200
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
280
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
HDC tutorial
michielstock
2
970
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
640
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
310
A better future with KSS
kneath
240
18k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Transcript
汎用ポリシー言語Rego + OPAと認可・検証事例の紹介 2024 / 05 / 17 Ubie株式会社 水谷正慶
Cloud Native Security Japan Kickoff meetup
2 本日の発表 • 発表内容 ◦ 汎用ポリシー言語Rego + OPAとは何か ◦ Regoの利用事例の紹介
▪ 既存プロダクトでの利用(Gatekeeper for Kubernetes, Envoy) ▪ Go SDKを使ったRego・OPAの活用 • 本日は触れない内容 ◦ Regoの詳細な文法 ◦ Rego利用プロダクトの設定方法
3 自己紹介 • 水谷正慶(Ph.D) • 職域:セキュリティエンジニア & バックエンドエンジニア • 経歴:Ubie
(2021~), Cookpad(2017~), IBM(2011~) • OPA/Regoとの関わり ◦ 2021年末にOPA/Regoについての一人アドベントカレンダーを執 筆 https://adventar.org/calendars/6601 ◦ そのきっかけでOPA Championを拝命 ◦ セキュリティ・キャンプなどでPolicy as Codeに関する講義を担当 (2022~)
4 汎用ポリシー言語 Rego+OPAとは何か
5 Rego&OPAについて • Rego https://www.openpolicyagent.org/docs/latest/ ◦ 宣言型の汎用ポリシー記述言語 ◦ Prolog・Datalogから着想を得て、改良された言語 ◦
認可・検証機能と相性が良いが、それ以外にも幅広く応用可能 • OPA(Open Policy Agent)https://github.com/open-policy-agent/opa ◦ Regoを動かすためのエンジン ◦ コマンドラインツール & Go SDKとして提供されている
6 Regoの特徴 • 宣言型言語である ◦ 一般的なプログラミングに用いられる手続き型言語ではない ◦ 繰り返しや変数の取り回しのパラダイムが手続き型と異なる • (原則として)外部入出力は使わない
◦ 判定に必要な引数(入力)と、判定結果となる返り値(出力)のみ ◦ コアとなる判定のロジックのみに集中して記述する • 入力と出力のスキーマは任意 ◦ 構造データを自由に利用できるため、柔軟性が高く特定のプロダクト に依存しない
7 Regoの記述例 package my_policy allow { input.user == “alice” }
allow { allowed_roles := [ “admin”, “developer”, ] input.role == allowed_roles[_] } 1つのブロックを「ルール」と呼 ぶ。これは “allow” という名 前のルール 同じ名前のルールは複数あっ てもよい。ただし異なる評価 結果が重複してはいけない (undefined はOK) ブロック内の評価式 がすべて成立すれば “allow” に true が格 納される。成立しな ければ不定 (undefined) になる 必要に応じて変数の 定義が可能 [_] はリスト内のすべ ての要素を表す。1つで もこの式を満たす要素 があれば成立する
8 OPAによるRegoの評価例 { “user”: “bob”, “role”: “admin” } { “allow”:
true } package my_policy allow { input.user == “alice” } allow { allowed_roles := [ “admin”, “developer”, ] input.role == allowed_roles[_] } ❌ 非成立 ✅成立 Regoルール Input Output undefined true
9 つまりOPAとは何か? • 入力された構造データ(JSONなど)をRegoで評価し、結果の構造データを出力す るだけのエンジン ◦ 入出力に使われる構造データのスキーマは自由であり、多様なデータをあつかえる ◦ そのため特定のツールやプロダクトに依存せず利用可能 ◦
文法やエンジンがオープンかつ柔軟なので、独自のDSLを実装したりYAMLやJsonで条件 を記述させるより、低コスト・高信頼で実装可能 入力 (構造データ) ポリシー (Rego) 出力 (構造データ)
10 Policy as Code • ポリシーをコードで表現・管理するアプローチ ◦ 履歴・承認管理、テスト可能性、再現性、継続的デプロイなどの利点 ◦ Rego
& OPAと同じ文脈で語られることが多い • 「Policy as Code == Rego」ではない ◦ Policy as Code を実現する手段の一つがRego ◦ Regoの利用目的の一つがPolicy as Codeの実現
11 Policy as Code実現方法の比較(Rego v.s. SQL) データ処理の特性 Rego & OPA
SQL (BigQueryなど) 大量データ ☔ 1件あたりの評価は100〜200μ秒(※1) 程度 だが、集計のためには大量のメモリが必要 ☀ 本来の用途なので有効に活用できる ルールの記述性・ テスト可能性 ☀ ルールをモジュラブルに記述できる。さらに 統合テスト・ユニットテストが記述可能 ☁ 一つのクエリに検証のための要素が密結合しがち。 テストもデータの用意などが大変 リアルタイム性 ☀ 遅延が小さいので都度認可判定するという ユースケースに向いている ☔ 本来の用途と異なり、数ms以下の遅延を期待する場 合は困難 複数データの結合 ☔ 大規模なデータの結合はパフォーマンスに影 響する ☀ 本来の用途なので有効に活用できる ※1:SDKを利用してApple M1 Max 2021年モデルで計測
12 Regoの利用事例の紹介
13 Gatekeeper for Kubernetes:リソース作成・変更の検証 • Admission Controllers と連携してリソースを検証 ◦ リソースの作成や変更をRegoによて検証できる
◦ Dynamic Admission Controllersでより動的な検証が可能になる ◦ ConstraintTemplateを使うことで検証の自由度が向上 https://kubernetes.io/blog/2019/08/06/opa-gatekeeper-policy-and-governance-for-kubernetes/ より
14 Gatekeeper のポリシー例 package kubernetes.admission import rego.v1 deny contains reason
if { some container input_containers[container] not startswith(container.image, "hooli.com/") reason := "container image refers to illegal registry (must be hooli.com)" } input_containers contains container if { container := input.request.object.spec.containers[_] } input_containers contains container if { container := input.request.object.spec.template.spec.containers[_] } request.object.spec.containers と request.object.spec.template.spec.containres の両方からコンテナ情報を取得 コンテナイメージ名のPrefixが hooli.com/ になっているかを検証 検証に失敗した場合はメッ セージを残す Validating Webhook の検証
15 Envoy:L7 proxyにおけるトラフィックの認可制御 • EnvoyのExternal Authorization APIを利用したOPAとの連携 ◦ サイドカーとして各マイクロサービスへのAPI認可を制御 ◦
リクエストに含まれるパスやメソッド、ヘッダの情報を自由に組み合わせ たルールが記述できる https://www.openpolicyagent.org/docs/latest/envoy-introduction/ より
16 Envoyのポリシー例 allow if { is_token_valid action_allowed } is_token_valid if
{ token.valid now := time.now_ns() / 1000000000 token.payload.nbf <= now now < token.payload.exp } action_allowed if { http.method == "GET" token.payload.role == "guest" glob.match("/people/*", ["/"], http.path) } action_allowed if { http.method == "POST" token.payload.role == "admin" glob.match("/people", ["/"], http.path) lower(input.parsed_body.firstname) != base64url.decode(token.payload.sub) } token := {"valid": valid, "payload": payload} if { [_, encoded] := split(http.headers.authorization, " ") [valid, _, payload] := io.jwt.decode_verify(encoded, {"secret": "secret"}) } (1) is_token_valid と action_allowed の両方が成立した場合通信を許可 (2) JWTのnbf & expを検証 (3) 「メソッドがGET」 「JWTのroleが “guest”」 「パスが “/people/*”」 の全てに合致したらOK (4) 「メソッドがPOST」 「JWTのroleが “admin”」 「パスが “/people”」 の全てに合致したらOK (5) JWTのデコードと検証
17 Go SDKを使ったRego・OPAの活用 • ユーザー設定値の検査 ◦ Conftest[1] : Kubernetesの設定ファイルを検査 ◦
tfsec[2] : terraformの .tf ファイルの内容を検査 • ワークフロー制御での利活用 ◦ AlertChain[3] : SOAR (Security Orchestration, Automation and Response) におけるワークフローの記述 ◦ Swarm[4] : セキュリティログのスキーマの検出や、データの変換・整形に利用 • 通知の制御 ◦ Octovy[5] : 脆弱性スキャンの結果の通知判断に利用 [1] https://www.conftest.dev/ [2] https://github.com/aquasecurity/tfsec [3] https://github.com/m-mizutani/alertchain [4] https://github.com/m-mizutani/swarm [5] https://github.com/m-mizutani/octovy
18 まとめ • ポリシーの柔軟な記述が可能なRegoとそのエンジンであるOPA ◦ KubernetesやEnvoyでリソース制御や通信の可否の制御など ◦ 設定値の検証ツールで独自ルールを記述しやすくなる ◦ ワークフローの制御にも活用可能
• 利用するうえでの課題 ◦ まだ普及しているとは言い難い状況で、世の中に参考事例が少ない ◦ 手続き型プログラミングに慣れた人だと敷居が高い ◦ SDKとして利用する場合、公式からはGoしかサポートされていない