aws は形式手法の夢を見るか? - モデル検査器 alloy によるインフラ設計

28
AWS は形式手法の夢を見るか? モデル検査器 Alloy によるインフラ設計 チェシャ猫 (@y_taka_23) NGK2015B 昼の部 (2015/12/05)

Upload: ytaka23

Post on 16-Apr-2017

3.074 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

AWS は形式手法の夢を見るか?

モデル検査器 Alloy によるインフラ設計

チェシャ猫 (@y_taka_23)

NGK2015B 昼の部 (2015/12/05)

Page 2: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

自己紹介

● 名前 : チェシャ猫

○ Twitter: @y_taka_23

○ GitHub: y-taka-23

● 仕事 : インフラ担当

○ 主に AWS 周り

○ もうちょいアプリ側やりたい

Page 3: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

Amazon Web Service

Page 4: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

AWS のネットワーク周り

● セキュリティ系

○ Security Group

○ Network ACL

● ルーティング系

○ Route Table

○ VPC Peering

○ Route 53

Page 5: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

しかし現実は……

Page 6: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

複雑化、破綻しがちな運用

● セキュリティ系()

○ 場当たり的に開けられるポート

○ 誰も把握できない許可・禁止ルールの重複

● ルーティング系()

○ あちらが通じればこちらが通じない Route Table

○ なぜか解決できないドメイン名

○ どんどん増える VPC Peering

Page 7: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

インフラをきちんと設計したい?

Page 8: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

形式手法を使ってみよう!

Page 9: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

Alloy Analyzer って?

● 形式手法の一種、モデル検査のツール

● 低い検証コスト + 強力な可視化

○ 関係によってモデルを定義

○ 検査したい制約を記述

○ 制約を満たす / 満たさない例を全数探索

○ 発見した例をいい感じに可視化

Page 10: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

例えば Security Group

https://gist.github.com/y-taka-23/89a98fdb2ba48710a39c

Page 11: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

関係でモデルを定義する

sig Instance { priIPs : some IP, secGrps : set SecurityGroup,}

sig SecurityGroup { inRules : set Rule, outRules : set Rule,}

Page 12: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

関係でモデルを定義する

sig Instance { priIPs : some IP, secGrps : set SecurityGroup,}

sig SecurityGroup { inRules : set Rule, outRules : set Rule,}

インスタンス 1 個に対してIP アドレスが 1 個以上複数個対応

Page 13: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

関係でモデルを定義する

sig Instance { priIPs : some IP, secGrps : set SecurityGroup,}

sig SecurityGroup { inRules : set Rule, outRules : set Rule,}

インスタンス 1 個に対してセキュリティグループが 0 個以上複数個対応

Page 14: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

検査したい制約を記述する

pred inboundOK(src, dest : Instance, proto : Protocol, port Port) { some r : dest.secGrps.inRules | proto = r.protocol && port in r.ports && some (src.priIPs in r.source.ips + src.secGrps in r.souce)}

Page 15: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

検査したい制約を記述する

pred inboundOK(src, dest : Instance, proto : Protocol, port Port) { some r : dest.secGrps.inRules | proto = r.protocol && port in r.ports && some (src.priIPs in r.source.ips + src.secGrps in r.souce)}

通信先インスタンスのセキュリティグループのあるインバウンドルール r について

Page 16: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

検査したい制約を記述する

pred inboundOK(src, dest : Instance, proto : Protocol, port Port) { some r : dest.secGrps.inRules | proto = r.protocol && port in r.ports && some (src.priIPs in r.source.ips + src.secGrps in r.souce)}

ルール r は指定されたプロトコルで

Page 17: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

検査したい制約を記述する

pred inboundOK(src, dest : Instance, proto : Protocol, port Port) { some r : dest.secGrps.inRules | proto = r.protocol && port in r.ports && some (src.priIPs in r.source.ips + src.secGrps in r.souce)} ルール r は指定されたポート番号を含み

Page 18: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

検査したい制約を記述する

pred inboundOK(src, dest : Instance, proto : Protocol, port Port) { some r : dest.secGrps.inRules | proto = r.protocol && port in r.ports && some (src.priIPs in r.source.ips + src.secGrps in r.souce)}

ルール r は送信元インスタンスのプライベート IPまたはセキュリティグループを含む

Page 19: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

具体例を全数探索

run { some disj i1 i2 : Instance, proto : Protocol, port : Port | inboundOK[i1, i2, proto, port] && outboundOK[i1, i2, proto, port]}

Page 20: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

具体例を全数探索

run { some disj i1 i2 : Instance, proto : Protocol, port : Port | inboundOK[i1, i2, proto, port] && outboundOK[i1, i2, proto, port]}相異なる 2 つのインスタンス i1, i2 について

Page 21: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

具体例を全数探索

run { some disj i1 i2 : Instance, proto : Protocol, port : Port | inboundOK[i1, i2, proto, port] && outboundOK[i1, i2, proto, port]}

Security Group の設定上、通信が可能

Page 22: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

この間、わずか 0.3 秒

Page 23: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

発見された具体例いろいろ

Page 24: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

発見された具体例いろいろ

Page 25: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

発見された具体例いろいろ

Page 26: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

こんな応用どうだろう?

● 通信の到達可能性 / 不可能性の確認

● 不要なルール設定の発見

● IAM によるアクセス権限制御の検証

● 無駄に課金しない運用フローの作成

Page 27: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

まとめ

● インフラ設計に形式手法の力を

● Alloy Analyzer でお手軽モデリング

● アイデア次第で色々な応用が

Page 28: AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計

Have a Nice Infrastructure!

presented byチェシャ猫 (@y_taka_23)