CloudNative Days Spring 2021 ONLINE へ登壇した時の資料 https://event.cloudnativedays.jp/cndo2021/talks/811
Open Policy Agentで社内のコード統一する夢を見るCloudNative Days Spring 2021 ONLINETaisei Ito
View Slide
2自己紹介● 伊藤 太斉(Taisei Ito)○ @kaedemalu(Twitter, Github)○ Future Corporation■ Technology Innovation Group / DX Unit○ コンサルタント&インフラエンジニア○ #GCP # AWS #Terraform #Ansible● Community○ GCPUG Shonan Organizer○ CloudNative Days Committee
今の社内のロール● エンジニア○ インフラ〜ミドルウェアのチューニング○ 顧客のSRE(的な動き)○ 社内のOSS活用推進(コミットなど)○ インフラのIaC化● ブログ運営3
今の社内のロール● エンジニア○ インフラ〜ミドルウェアのチューニング○ 顧客のSRE(的な動き)○ 社内のOSS活用推進(コミットなど)○ インフラのIaC化● ブログ運営4
IaCのメリット● 再現性が保てる● コードがパラメータシート○ ドキュメントよりメンテナンスしやすい● 可搬性がある● 比較的読みやすい&入門しやすい5
IaCのメリット(特に社内)6プロジェクトATerraform
IaCのメリット(特に社内)7プロジェクトATerraformプロジェクトB
IaCのメリット(特に社内)8プロジェクトATerraformプロジェクトBTerraform
IaCのメリット(特に社内)9プロジェクトATerraformプロジェクトBTerraform展開可能!
生まれる流派● Terraform○ Module vs. Workspaces○ Monorepo vs. Multirepo● Ansible○ ini vs. YAML10
起こりうること①11プロジェクトATerraformプロジェクトBTerraform規約A 規約B
起こりうること①12プロジェクトA プロジェクトB規約A 規約BTerraform Terraform
起こりうること①13プロジェクトA プロジェクトB規約A 規約BTerraform Terraform流派が違う!
起こりうること②14プロジェクトATerraformプロジェクトBTerraform規約A 規約B
プロジェクトATerraformプロジェクトBTerraform起こりうること②15規約A 規約B
プロジェクトATerraformプロジェクトBTerraform起こりうること②16規約A 規約B異なる可能性
社内標準化が必要● 将来的を見据えた取り組みが必要○ PJ間での展開○ メンバーのインプット負荷の軽減○ 人による癖をなくす17
これまでフューチャーは18引用:Javaコーディング規約
Terraform版を作りたい19
いや、20
作らないといけない(と思った)(使命感)21
今回のトピック● Open Policy Agentについて● 実際にTerraformのコード評価に使う● 将来的に行いたいこと22
Open Policy Agentについて1
Open Policy Agent(OPA)について● OSSで開発● CNCFのGraduated Project(になった🎉)● Policy as Codeを実現するツール○ Regoという独自のポリシー記述言語○ Kubernetes以外にも制約なく汎用的に利用できる24
Open Policy Agent(OPA)について25引用:Policy as Codeを実現するOpen Policy Agentに憧れて。ポリシーコードでAPI仕様をLintする
Policy as Codeの技術選定● Sentinel○ HashiCorp社が開発したPaCツール○ Terraform Cloudで利用できる(有償)● OPA○ 先に上げた通り○ OSSのツール26
Policy as Codeの技術選定● Sentinel○ HashiCorp社が開発したPaCツール○ Terraform Cloudで利用できる(有償)● OPA○ 先に上げた通り○ OSSのツール27
Policy as Codeの技術選定● Sentinel○ HashiCorp社が開発したPaCツール○ Terraform Cloudで利用できる(有償)● OPA○ 先に上げた通り○ OSSのツール28利用の幅が広い
実際に動かす2
デモやります30
Rego● Terraformのリソース名を制御する31
Terraform● EC2を2台作成するコード32OKとしたいNGとしたい
ステップ① Plan結果をバイナリ化● terraform plan -out tfplan.binary で保存33
ステップ② バイナリからJSON変換● tf show -json tfplan.binary | jq . > tfplan.json34
ステップ③ Regoで評価する● opa eval --format json --data test.rego \--input tfplan.json "data.test.lint"35mail-instanceはNGweb_instanceはOKになったハイフン区切りは制御できる
所感とこれから3
OPAができること● リソースの制限という意味のポリシー○ インスタンスタイプ○ リージョン○ タグ○ etc...37
OPAができないこと● Terraform自体の構文チェック○ Terraformで利用するリソース名はできる○ ファイルごと規約としてコードにはできない38
まずはドキュメンテーション● こういったサイトも参考にしながら。。39引用:Terraform Best Practices
まとめ● インフラの横展開を進めるにあたり、コードが大事○ インフラの構成→Terraform, Ansible○ IaCのポリシー制御→OPA, Sentinel● OSSで利用できる方が幅広く対応できる● コードの平和を守るにはOPAだけでなく、複合的に制御することが大事そう40
宣伝4
42フューチャーについて● 大崎にあるITコンサル会社● 経営戦略から実装、運用までを全てこなす● ベンダーニュートラルの考え方● 「ないものは作る」
43こんな人がいます● Real World HTTPの著者● Vue.jsのコミッター● Apache Software Foundationのボードメンバー● OSS「Vuls」の作成者
44ブログも出しています
- fin -