11. 関係でモデルを定義する
sig Instance {
priIPs : some IP,
secGrps : set SecurityGroup,
}
sig SecurityGroup {
inRules : set Rule,
outRules : set Rule,
}
12. 関係でモデルを定義する
sig Instance {
priIPs : some IP,
secGrps : set SecurityGroup,
}
sig SecurityGroup {
inRules : set Rule,
outRules : set Rule,
}
インスタンス 1 個に対して
IP アドレスが 1 個以上複数個対応
13. 関係でモデルを定義する
sig Instance {
priIPs : some IP,
secGrps : set SecurityGroup,
}
sig SecurityGroup {
inRules : set Rule,
outRules : set Rule,
}
インスタンス 1 個に対して
セキュリティグループが 0 個以上複数個対応
14. 検査したい制約を記述する
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)
}
15. 検査したい制約を記述する
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 について
16. 検査したい制約を記述する
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 は指定されたプロトコルで
17. 検査したい制約を記述する
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 は指定されたポート番号を含み
18. 検査したい制約を記述する
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
またはセキュリティグループを含む
19. 具体例を全数探索
run {
some disj i1 i2 : Instance,
proto : Protocol, port : Port
| inboundOK[i1, i2, proto, port] &&
outboundOK[i1, i2, proto, port]
}
20. 具体例を全数探索
run {
some disj i1 i2 : Instance,
proto : Protocol, port : Port
| inboundOK[i1, i2, proto, port] &&
outboundOK[i1, i2, proto, port]
}
相異なる 2 つのインスタンス i1, i2 について
21. 具体例を全数探索
run {
some disj i1 i2 : Instance,
proto : Protocol, port : Port
| inboundOK[i1, i2, proto, port] &&
outboundOK[i1, i2, proto, port]
}
Security Group の設定上、通信が可能