Slide 1

Slide 1 text

Open Policy Agentで社内の コード統一する夢を見る CloudNative Days Spring 2021 ONLINE Taisei Ito

Slide 2

Slide 2 text

2 自己紹介 ● 伊藤 太斉(Taisei Ito) ○ @kaedemalu(Twitter, Github) ○ Future Corporation ■ Technology Innovation Group / DX Unit ○ コンサルタント&インフラエンジニア ○ #GCP # AWS #Terraform #Ansible ● Community ○ GCPUG Shonan Organizer ○ CloudNative Days Committee

Slide 3

Slide 3 text

今の社内のロール ● エンジニア ○ インフラ〜ミドルウェアのチューニング ○ 顧客のSRE(的な動き) ○ 社内のOSS活用推進(コミットなど) ○ インフラのIaC化 ● ブログ運営 3

Slide 4

Slide 4 text

今の社内のロール ● エンジニア ○ インフラ〜ミドルウェアのチューニング ○ 顧客のSRE(的な動き) ○ 社内のOSS活用推進(コミットなど) ○ インフラのIaC化 ● ブログ運営 4

Slide 5

Slide 5 text

IaCのメリット ● 再現性が保てる ● コードがパラメータシート ○ ドキュメントよりメンテナンスしやすい ● 可搬性がある ● 比較的読みやすい&入門しやすい 5

Slide 6

Slide 6 text

IaCのメリット(特に社内) 6 プロジェクトA Terraform

Slide 7

Slide 7 text

IaCのメリット(特に社内) 7 プロジェクトA Terraform プロジェクトB

Slide 8

Slide 8 text

IaCのメリット(特に社内) 8 プロジェクトA Terraform プロジェクトB Terraform

Slide 9

Slide 9 text

IaCのメリット(特に社内) 9 プロジェクトA Terraform プロジェクトB Terraform 展開可能!

Slide 10

Slide 10 text

生まれる流派 ● Terraform ○ Module vs. Workspaces ○ Monorepo vs. Multirepo ● Ansible ○ ini vs. YAML 10

Slide 11

Slide 11 text

起こりうること① 11 プロジェクトA Terraform プロジェクトB Terraform 規約A 規約B

Slide 12

Slide 12 text

起こりうること① 12 プロジェクトA プロジェクトB 規約A 規約B Terraform Terraform

Slide 13

Slide 13 text

起こりうること① 13 プロジェクトA プロジェクトB 規約A 規約B Terraform Terraform 流派が違う!

Slide 14

Slide 14 text

起こりうること② 14 プロジェクトA Terraform プロジェクトB Terraform 規約A 規約B

Slide 15

Slide 15 text

プロジェクトA Terraform プロジェクトB Terraform 起こりうること② 15 規約A 規約B

Slide 16

Slide 16 text

プロジェクトA Terraform プロジェクトB Terraform 起こりうること② 16 規約A 規約B 異なる可能性

Slide 17

Slide 17 text

社内標準化が必要 ● 将来的を見据えた取り組みが必要 ○ PJ間での展開 ○ メンバーのインプット負荷の軽減 ○ 人による癖をなくす 17

Slide 18

Slide 18 text

これまでフューチャーは 18 引用:Javaコーディング規約

Slide 19

Slide 19 text

Terraform版を作りたい 19

Slide 20

Slide 20 text

いや、 20

Slide 21

Slide 21 text

作らないといけない(と思った) (使命感) 21

Slide 22

Slide 22 text

今回のトピック ● Open Policy Agentについて ● 実際にTerraformのコード評価に使う ● 将来的に行いたいこと 22

Slide 23

Slide 23 text

Open Policy Agentについて 1

Slide 24

Slide 24 text

Open Policy Agent(OPA)について ● OSSで開発 ● CNCFのGraduated Project(になった🎉) ● Policy as Codeを実現するツール ○ Regoという独自のポリシー記述言語 ○ Kubernetes以外にも制約なく汎用的に利用できる 24

Slide 25

Slide 25 text

Open Policy Agent(OPA)について 25 引用:Policy as Codeを実現するOpen Policy Agentに憧れて。ポリシーコードで API仕様をLintする

Slide 26

Slide 26 text

Policy as Codeの技術選定 ● Sentinel ○ HashiCorp社が開発したPaCツール ○ Terraform Cloudで利用できる(有償) ● OPA ○ 先に上げた通り ○ OSSのツール 26

Slide 27

Slide 27 text

Policy as Codeの技術選定 ● Sentinel ○ HashiCorp社が開発したPaCツール ○ Terraform Cloudで利用できる(有償) ● OPA ○ 先に上げた通り ○ OSSのツール 27

Slide 28

Slide 28 text

Policy as Codeの技術選定 ● Sentinel ○ HashiCorp社が開発したPaCツール ○ Terraform Cloudで利用できる(有償) ● OPA ○ 先に上げた通り ○ OSSのツール 28 利用の幅が広い

Slide 29

Slide 29 text

実際に動かす 2

Slide 30

Slide 30 text

デモやります 30

Slide 31

Slide 31 text

Rego ● Terraformのリソース名を制御する 31

Slide 32

Slide 32 text

Terraform ● EC2を2台作成するコード 32 OKとしたい NGとしたい

Slide 33

Slide 33 text

ステップ① Plan結果をバイナリ化 ● terraform plan -out tfplan.binary で保存 33

Slide 34

Slide 34 text

ステップ② バイナリからJSON変換 ● tf show -json tfplan.binary | jq . > tfplan.json 34

Slide 35

Slide 35 text

ステップ③ Regoで評価する ● opa eval --format json --data test.rego \ --input tfplan.json "data.test.lint" 35 mail-instanceはNG web_instanceはOKになった ハイフン区切りは制御できる

Slide 36

Slide 36 text

所感とこれから 3

Slide 37

Slide 37 text

OPAができること ● リソースの制限という意味のポリシー ○ インスタンスタイプ ○ リージョン ○ タグ ○ etc... 37

Slide 38

Slide 38 text

OPAができないこと ● Terraform自体の構文チェック ○ Terraformで利用するリソース名はできる ○ ファイルごと規約としてコードにはできない 38

Slide 39

Slide 39 text

まずはドキュメンテーション ● こういったサイトも参考にしながら。。 39 引用:Terraform Best Practices

Slide 40

Slide 40 text

まとめ ● インフラの横展開を進めるにあたり、コードが大事 ○ インフラの構成→Terraform, Ansible ○ IaCのポリシー制御→OPA, Sentinel ● OSSで利用できる方が幅広く対応できる ● コードの平和を守るにはOPAだけでなく、複合的に制御 することが大事そう 40

Slide 41

Slide 41 text

宣伝 4

Slide 42

Slide 42 text

42 フューチャーについて ● 大崎にあるITコンサル会社 ● 経営戦略から実装、運用までを全てこなす ● ベンダーニュートラルの考え方 ● 「ないものは作る」

Slide 43

Slide 43 text

43 こんな人がいます ● Real World HTTPの著者 ● Vue.jsのコミッター ● Apache Software Foundationのボードメンバー ● OSS「Vuls」の作成者

Slide 44

Slide 44 text

44 ブログも出しています

Slide 45

Slide 45 text

- fin -