Security Group Rules and Driver API - cloud-barista/cb-spider GitHub Wiki

1. CB-Spider Security Group and Rules

  • 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, ...
  • CSP Driver 개발 가이드

    • Security Group 생성시 대상 CSP의 default Rule 규칙 확인
      • Spider default rule과 다를 경우 Spider default rule로 설정 필요
    • ALL, -1 관련: 대상 CSP에서 Spider와 의미가 다를 경우 변환 처리 필요
      • ex) ALL <---> ANY
  • 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) 443
    1~65535
    ex) 443
    IPv4 ex) 0.0.0.0/8
    IPv6 ex) ::/8
    inbound, outbound UDP 1~65535
    ex) 6000
    1~65535
    ex) 8000
    IPv4 ex) 0.0.0.0/32
    IPv6 ex) ::/32
    inbound, outbound ICMP -1 -1 IPv4 ex) 1.2.3.4/32
    IPv6 ex) ::/64
    * ICMP: network layer
    - Port 지정 불필요(-1로 설정)
    - ICMP 예시: ping, echo, tracert 등
  • CSP별 Security Group Rule 및 세부 내용 참고

2. Driver API

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초

3. Security Group Rules 검증 시험 도구

3.1. 시험 항목 및 가이드

3.2. 시험 도구 위치

3.3. 시험 도구 구성

  • (1) inbound Rule Test 도구: inbound 규칙 변경 및 VM inbound/outbound 접근 검증 시험
  • (2) outbound Rule Test 도구: outbound 규칙 변경 및 VM inbound/outbound 접근 검증 시험
  • (3) create-add-list-get-info 도구: SecurityGroup 정보를 제공하는 API 반환 값 검증을 위한 정보 출력 시험 도구(수동 검증 필요)

3.4. 시험 방법 및 절차

  • (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
  • (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
      
    • 생성 자원 반납

      ./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


4. 시험 결과 현황


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) 개발 예정    

참고


⚠️ **GitHub.com Fallback** ⚠️