Open Policy Agent とは
Open Policy Agent とは
- ThinkIT: 注目のOpen Policy Agent、その概要とKubernetesでの活用事例 に詳しく説明されている
- ルールをコード化(宣言的モデル)することができる
- アプリケーションやシステム構造定義からルールのチェックを切り出せる
- CI/CD に組み込むことで、ルール違反の配備を防止できる
Open Policy Agent は、Kubernetes専用ツールではないが、以降はKubernetesで利用することを前提に説明を行う。
- この資料は、Kube Fest 2020 Tokyo で説明があった以下のセッションを多く参考にして作成している
Policy as Code
その組織でのルールをコードで管理できるようにすること。Policy 定義からKubernetesマニフェストの定義チェックを行う。
IaC では、形式知をコード化してきた。 Policy as Code では「暗黙知」をコード化する、と言うイメージ
クラウドネイティブなチームを目指すには、必要不可欠。
なお、Policy as Code
で検索を行うと、HashiCorp のSentinel が多く表示される。
Policy as Code with Terraform and Sentinel説明
- (YouTube)
- ポリシーとは
- やってはいけないことや、定義しておかなければいけないことなどをチェックする構文
- 本番環境は、こう言うインスタンスでなければいけない
- 組織のルール(稼働時間とか)
- ワークフローをIaC(Terraform)化
- 人手でのワークフローから宣言的モデルに移ってきている
- コードはレビューが必要になる → その解決策としてPolicy as Code
- インシデント発生後の振り返りで新しいルールが発生する → これをCode化する必要がある
- DevSecOps
- Terraform向けPolicy
Open Policy Agent でKubernetesの何をチェックするのか
- マニフェストをCI/CDプロセス内でチェックする
- 社内ルール違反の有無をチェックする
- Production Ready なリソース状態とする
- セキュリティに配慮したリソース状態とする
- マニフェストの構文チェック・ケアレスミスチェックをするツールは別にあるので、そのレベルのチェックは実施しない
- Kubeval
使い方
conftest
Gatekeeper
- Kubernetes 専用ツール / CD で使用
- Open Policy Agent / Gatekeeper 勉強会
The Rego Playground
- 注目のOpen Policy Agent、その概要とKubernetesでの活用事例
- ここに記載されているチュートリアルを以下のPlaygroundで試してみる
- https://play.openpolicyagent.org
Rule
package httpapi.authz # 社員情報をインポート import data.subordinates as subord default allow = false # 社員は自身の給与を参照できる allow { some username input.method == "GET" input.path = ["finance", "salary", username] input.user == username } # マネージャーは部下の給与も参照できる allow { some username input.method == "GET" input.path = ["finance", "salary", username] subord[input.user][_] == username }
DATA
{ "alice": ["bob"], "bob": [], "charlie": ["david"], "david": [] }
INPUT例1
{ "method": "GET", "path": ["finance", "salary", "alice"], "user": "alice" }
INPUT例2
{ "method": "GET", "path": ["finance", "salary", "bob"], "user": "alice" }
True にならない。。