Skip to content

Security Group Rules and Driver API

ByoungSeob Kim edited this page May 17, 2022 · 47 revisions

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) 시험 절차

    • 시험 도구 위치로 이동
      cd $CBSPIDER_ROOT/test/sg-rules-validation-cli/1.inbound-rule-test
      
    • 시험 환경 준비(VPC~VM 생성 및 TCP/UDP 서버 등 가동)
      ./00.prepare-00.sh aws
      
    • Rule 검증 시험 단계별 실행 (단계별 의미: 3.1. 시험 항목 및 가이드 참고)
      ./01.inbound-case-01.sh
      
      ./02.inbound-case-02.sh
      
      ./03.inbound-case-03.sh
      
      ./04.inbound-case-04.sh
      
      ./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
    
  • (4) 결과 확인 방법

    • 시험 결과는 다음 형식의 날자 단위의 파일 끝에 추가

      • 결과 출력 파일 위치 및 예시: ./1.inbound-rule-test/aws-result-04.15.out
    • 시험 결과 형식 및 활용 가이드

      • 시험 결과 형식: Markup Table 형식
      • 시험 결과 출력 Table 규격은 공유된 시험 항목 excel과 동일
      • 시험 결과 파일 내용 중 원하는 시험 결과를 복사하여 Github issue나 Wiki에 복사/활용
      • issue나 Wiki의 시험 결과 Cell을 복사하여, excel에 Sheet 추가 후 반영 및 공유
    • 결과 예시

[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


시험 결과 현황


참고


Table of contents



Clone this wiki locally