-
Notifications
You must be signed in to change notification settings - Fork 47
Security Group Rules and Driver API
-
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 폐쇄 설정 검증 시험 항목 제외
-
Install & Start Guide
-
Features & Usage
-
- AdminWeb Tool Guide
- CLI Tool Guide
- REST API Guide
-
Design
-
Developer Guide
-
Cloud Driver Developer Guide
- Cloud Driver Developer Guide-WIP
- VM SSH Key Development Guide-WIP
- VM User Development Guide
- What is the CSP SDK API Version of drivers
- Region Zone Info and Driver API
- Price Info and Driver API
- (StartVM TerminateVM) API Call Counts and Waiting
- StartVM and TerminateVM Main Flow of drivers
- VM Root Disk Configuration Guide
- Security Group Rules and Driver API
- Network Load Balancer and Driver API
- VM Snapshot, MyImage and Disk Overview
- Kubernetes and Driver API(PMKS, K8S)
- Tag and Cloud Driver API
- AnyCall API Extension Guide
-
Test Reports
- v0.2.8-for-espresso-release
- v0.3.0-espresso-release
- Azure:Terminating VM
- cb-user@VM: ssh login, sudo run
- v0.3.14 test for SG Source
- v0.4.0-cafemocha-release
- Test via REST API Gateway
- Test Reports of v0.4.11 (IID2 initial Version)
- Test Reports of v0.4.12 (Register & Unregister existing Resources)
- Test Reports for v0.6.0 Release
- How to ...
- How to Use Alibaba ECS i1.* Instance Types
- How to provision GPU VMs
- How to Resolve the 'Failed to Connect to Database' Error
- How to test CB Spider with Mock Driver
- How to install CB Spider on WSL2 under 공유기/사설망
- How to install CB Spider on macOS
- How to run CB Spider Container on macOS
- How to install OpenStack on a VM for CB Spider Testing
- How to get Azure available Regions
- How to profile memory usage in Golang
- Deprecated:How to install protoc and plugins
- [For Cloud-Migrator]