Security Group Rules and Driver API - cloud-barista/cb-spider GitHub Wiki
-
VMμ in/out λ€νΈμν¬ νΈλν½ μ μ΄λ₯Ό μν΄μ νΉμ VPCμ μμλλ Security Groupμ μ μν μ μλ€.
-
Security Groupμ νλ μ΄μμ κ·μΉμ ν¬ν¨ν μ μμΌλ©°, νμ© κ·μΉ(Allow Rule)μ μ μνλ€.
-
Security Group μμ± μ default Ruleμ λ€μκ³Ό κ°κ³ , CSPλ³λ‘ κ΄λ ¨ Ruleμ΄ λ³΄μΌ μλ μκ³ μλ³΄μΌ μλ μλ€.
-
inbound
: λͺ¨λ νΈλν½ μ°¨λ¨ -
outbound
: λͺ¨λ νΈλν½ νμ©
-
-
Ruleμ λ€μκ³Ό κ°μ μμ±λ€λ‘ μ μν μ μλ€.
- Direction: νΈλν½ λ°©ν₯
-
inbound
|outbound
-
- Protocol: λμ νλ‘ν μ½
-
ALL
: λͺ¨λ νΈλν½ νμ© -
TCP
|UDP
|ICMP
-
- Port Range: λμ ν¬νΈ λ²μ
-
FromPort: 22
,ToPort: 22
-
FromPort: 1
,ToPort: 65535
-
FromPort: -1
,ToPort: -1
: ν¬νΈ μ€μ μ΄ λ¬΄μλ―Έ, λλ λͺ¨λ ν¬νΈ λμ
-
- Source or Destination: μ μ© λμ, Address CIDR BlockμΌλ‘ νν
-
0.0.0.0/0
,::/0
,1.2.3.4/32
, ...
-
- Direction: νΈλν½ λ°©ν₯
-
CSP Driver κ°λ° κ°μ΄λ
- Security Group μμ±μ λμ CSPμ default Rule κ·μΉ νμΈ
- Spider default ruleκ³Ό λ€λ₯Ό κ²½μ° Spider default ruleλ‘ μ€μ νμ
-
ALL
,-1
κ΄λ ¨: λμ CSPμμ Spiderμ μλ―Έκ° λ€λ₯Ό κ²½μ° λ³ν μ²λ¦¬ νμ- ex)
ALL
<--->ANY
- ex)
- Security Group μμ±μ λμ CSPμ default Rule κ·μΉ νμΈ
-
Rule's Data Structure μ°Έκ³
type SecurityRuleInfo struct { Direction string IPProtocol string FromPort string ToPort string CIDR string }
-
νλ‘ν μ½λ³ Rule μΈλΆ κ·μΉ μ°Έκ³
Direction IPProtocol FromPort ToPort CIDR Block (source or destination) λΉκ³ inbound, outbound ALL -1 -1 IPv4 ex) 0.0.0.0/0
IPv6 ex) ::/0* ALL: All traffic inbound, outbound TCP 1~65535
ex) 4431~65535
ex) 443IPv4 ex) 0.0.0.0/8
IPv6 ex) ::/8inbound, outbound UDP 1~65535
ex) 60001~65535
ex) 8000IPv4 ex) 0.0.0.0/32
IPv6 ex) ::/32inbound, outbound ICMP -1 -1 IPv4 ex) 1.2.3.4/32
IPv6 ex) ::/64* ICMP: network layer
- Port μ§μ λΆνμ(-1
λ‘ μ€μ )
- ICMP μμ: ping, echo, tracert λ±
type SecurityReqInfo struct {
IId IID // {NameId, SystemId}
VpcIID IID // {NameId, SystemId}
SecurityRules *[]SecurityRuleInfo
}
type SecurityRuleInfo struct {
Direction string
IPProtocol string
FromPort string
ToPort string
CIDR string
}
type SecurityInfo struct {
IId IID // {NameId, SystemId}
VpcIID IID // {NameId, SystemId}
SecurityRules *[]SecurityRuleInfo
KeyValueList []KeyValue
}
type SecurityHandler interface {
CreateSecurity(securityReqInfo SecurityReqInfo) (SecurityInfo, error)
ListSecurity() ([]*SecurityInfo, error)
GetSecurity(securityIID IID) (SecurityInfo, error)
DeleteSecurity(securityIID IID) (bool, error)
AddRules(sgIID IID, securityRules *[]SecurityRuleInfo) (SecurityInfo, error)
RemoveRules(sgIID IID, securityRules *[]SecurityRuleInfo) (bool, error)
}
- AddRules()/RemoveRules()μ μν΄ Port λ°©νλ²½ κ·μΉ λ³κ²½ μλ£ νμλ ν¨κ³Όκ° λνλλλ° μκ°μ΄ νμν¨
- ν΅μ 7~10μ΄
- Azure: 60~80μ΄
- (1) inbound Rule Test λꡬ: inbound κ·μΉ λ³κ²½ λ° VM inbound/outbound μ κ·Ό κ²μ¦ μν
- (2) outbound Rule Test λꡬ: outbound κ·μΉ λ³κ²½ λ° VM inbound/outbound μ κ·Ό κ²μ¦ μν
- (3) create-add-list-get-info λꡬ: SecurityGroup μ 보λ₯Ό μ 곡νλ API λ°ν κ° κ²μ¦μ μν μ 보 μΆλ ₯ μν λꡬ(μλ κ²μ¦ νμ)
-
(1) λμ CSP connection config μ€λΉ λ° image, Spec λ± μν νκ²½ μ€μ
- aws κ²½μ°: 1.inbound-rule-test/aws/setup.env νμΈ
- aws2μ κ°μ΄ κ²½λ‘ μΆκ°νμ¬ μλ‘μ΄ μ€μ κ΅¬μ± κ°λ₯
-
(2) Client1 νκ²½ μ€λΉ
- Client1: SG μν λμ VM -> outbound μνμ μν λ
Έλ
- λ³Έ μμμμλ μνμ μ€ννλ λ Έλλ₯Ό νμ©
- Client1 λ Έλμ ν¬νΈ λ° ICMP κ°λ°© νμ: 22(TCP), 1000(TCP), 2000(UDP), ICMP
- Client1_IP μ€μ νμΈ νμ
- λ€μ λͺ
λ Ήμ΄λ‘ IP νλμ΄ κ°λ₯ν΄μΌ ν¨
curl -s ifconfig.co
- λΆκ°λ₯ν κ²½μ° IP μ€μ νμ
- μμΉ: 1.inbound-rule-test/setup.env
- μμΉ: 2.outbound-rule-test/setup.env
- λ€μ λͺ
λ Ήμ΄λ‘ IP νλμ΄ κ°λ₯ν΄μΌ ν¨
- Client1: SG μν λμ VM -> outbound μνμ μν λ
Έλ
-
(3) μν μ μ°¨
-
μν λꡬ μμΉλ‘ μ΄λ(μμ: inbound κ²μ¦ μν)
cd $CBSPIDER_ROOT/test/sg-rules-validation-cli/1.inbound-rule-test
-
μν νκ²½ μ€λΉ μ€ν(VPC~VM μμ± λ° TCP/UDP μλ² λ± κ°λ)(μμ: AWS κ²½μ°)
./00.prepare-00.sh aws
-
Rule κ²μ¦ μν λ¨κ³λ³ μ€ν (λ¨κ³λ³ μλ―Έ:
3.1. μν νλͺ© λ° κ°μ΄λ
μ°Έκ³ )(μμ: AWS κ²½μ°)- (λ¨κ³λ³ μ€νμ: Azureμ κ²½μ° ν°λ―Έλμμ
export SLEEP=80
μ€ν νμ, Azure μν νunset SLEEP
μ€ν νμ)
./01.inbound-case-01.sh aws
./02.inbound-case-02.sh aws
./03.inbound-case-03.sh aws
./04.inbound-case-04.sh aws
./05.inbound-case-05.sh
./06.inbound-case-06.sh
./10.inbound-case-10.sh
./11.inbound-case-11.sh
./20.inbound-case-20.sh
./21.inbound-case-21.sh
- (λ¨κ³λ³ μ€νμ: Azureμ κ²½μ° ν°λ―Έλμμ
-
μμ± μμ λ°λ©
./100.clear_all.sh aws
-
κ²μ¦ μν μΌκ΄ μ€ν: ./01.inbound-case-01.sh ~ ./21.inbound-case-21.sh κΉμ§ μλ μ€ν
./all.inbound-case-all.sh aws
-
λ€μ CSP μΌκ΄ μν: ./00.prepare-00.sh ~ ./100.clear_all.sh κΉμ§ μ€ν
- μ€ν¬λ¦½νΈ λ΄λΆμ μν λμ CSP λͺ©λ‘ νμΈ/μ€μ νμ
./csp.all.inbound-case-all.sh
-
inbound, outbound κ²μ¦ μν λͺ¨λ μΌκ΄ μ€ν: λμ CSP λμμΌλ‘ inbound λ° outbound λͺ¨λ μν μλ μ€ν
-
μμΉ:
cd $CBSPIDER_ROOT/test/sg-rules-validation-cli
-
νμΈ: λμ CSP λͺ©λ‘
./1.inbound-rule-test/csp.all.inbound-case-all.sh ./2.outbound-rule-test/csp.all.outbound-case-all.sh
-
μ€ν:
./all.csp.all.case-all.sh
-
-
μν μ°Έκ³
- μΌκ΄ μνμ κ²½μ°: Azure μνμ SLEEP=80 μλ μ€μ λ¨
- μ€κ° κ²°κ³Ό νμΈ λ°©λ²
- μνν νλͺ© νμΈ:
$ grep case *.out
or$ grep case *.out | wc -l
- μ€λ₯ νλͺ© νμΈ:
$ grep X *.out
- μνν νλͺ© νμΈ:
-
-
(4) κ²°κ³Ό νμΈ λ°©λ²
-
μν κ²°κ³Όλ λ€μ νμμ λ μ§ λ¨μμ νμΌμ κΈ°λ‘
- κ²°κ³Ό μΆλ ₯ νμΌ μμΉ λ° μμ:
./1.inbound-rule-test/aws-result-04.15.out
- κ²°κ³Ό μΆλ ₯ νμΌ μμΉ λ° μμ:
-
μν κ²°κ³Ό νμ λ° νμ© κ°μ΄λ
- μν κ²°κ³Ό νμ: Markup Table νμ
- μν κ²°κ³Ό μΆλ ₯ Table κ·κ²©μ
3.1. μν νλͺ© λ° κ°μ΄λ
μν νλͺ©κ³Ό λμΌ - μν κ²°κ³Ό νμΌ λ΄μ© μ€ μνλ μν κ²°κ³Όλ₯Ό 볡μ¬νμ¬ Github issueλ Wikiμ 볡μ¬/νμ©/λΆμ
-
κ²°κ³Ό μμ
-
[aws-01.inbound-case-01.sh-Test:2022.04.15-16:04:37]
I:TCP-01 (22) |
I:TCP-02 (1000) |
I:UDP-01 (2000) |
I:ICMP-01 (ping) |
O:TCP-01 (22) |
O:TCP-02 (1000) |
O:UDP-01 (2000) |
O:ICMP-01 (ping) |
|
---|---|---|---|---|---|---|---|---|
pass / pass | pass / pass | pass / pass | pass / pass | pass / pass | pass / pass | pass / pass | pass / fail |
[aws-01.inbound-case-01.sh-Test:2022.04.15-16:05:55]
I:TCP-01 (22) |
I:TCP-02 (1000) |
I:UDP-01 (2000) |
I:ICMP-01 (ping) |
O:TCP-01 (22) |
O:TCP-02 (1000) |
O:UDP-01 (2000) |
O:ICMP-01 (ping) |
|
---|---|---|---|---|---|---|---|---|
pass / pass | pass / pass | pass / pass | pass / pass | pass / pass | pass / pass | pass / pass | pass / pass |
- μν λ μ§:
2022.05.16.
- μ μ© λ²μ : https://github.com/cloud-barista/cb-spider/releases/tag/v0.5.5
CSP | inbouund/outbound κ²μ¦ μν | λ°ν μ 보 κ²μ¦ | νΉμ΄ μ¬ν |
---|---|---|---|
AWS | All Pass | OK | |
Azure | inbound: ALL Pass outbound: μ¬μν νμ |
OK | - export SLEEP=80 νμ |
GCP | All Pass | OK | |
Alibaba | All Pass | OK | |
Tencent | issue | OK | |
IBM(VPC) | All Pass | OK | - Regionλ³λ‘ Image ID λ€λ¦ - νμμ Image ID λ³κ²½ |
OpenStack | All Pass | OK | - Driverν μν κ²°κ³Όλ‘ λ체 - μ¬μ : ETRI νκ²½ μ΄μ μ‘΄μ¬ |
CloudIt | All Pass(ICMPμ μΈ) | OK | - Driverν μν κ²°κ³Όλ‘ λ체 - μ¬μ : ssh μ μ μ΄μ - ICMP λΉμ§μ |
NCPVPC | WIP | - | |
NCP | WIP | - | |
NHNCloud | WIP | - | |
KT(VPC) | κ°λ° μμ |
- CSPλ³ Security Group Rule λ° μΈλΆ λ΄μ© μ°Έκ³
- μν μΈλΆ νλͺ© μ°Έκ³
- κ΄λ ¨ μ΄μ: https://github.com/cloud-barista/cb-spider/issues/482
- SG Rule UDP νμ μ€μ κ²μ¦ μν νλͺ© μ μΈ