가드로 애플리케이션 보안
가드는 응용프로그램의 수신 요청 및 전송 응답을 통제하는 데 사용할 수 있는 런타임 보안 솔루션입니다. IBM Cloud® Code Engine 가드는 애플리케이션 수신 요청 및 전송 응답을 통제하기 위해 애플리케이션당 자동 학습된 마이크로 규칙 세트를 사용합니다. 결과적으로 가드를 사용하여 애플리케이션 이상을 식별하고 상황 인식을 지원할 수 있습니다. 또한 가드는 예상 패턴과 일치하지 않는 요청 또는 응답을 차단할 수 있습니다.
이 학습서에서는 Hello World 애플리케이션을 배치하고 이를 가드로 보호한다.
시작하기 전에:
모든 Code Engine 사용자에게는 종량과금제 계정이 있어야 합니다. 튜토리얼은 비용이 부과될 수 있습니다. 비용 추정기를 사용하여 예상 사용량을 기반으로 한 비용 추정을 생성하십시오. 자세한 정보는 Code Engine 가격을 참조하십시오.
가드-학습자 애플리케이션을 프로젝트당 서비스로 배치
가드-학습자는 프로젝트에서 각 가드 보호 애플리케이션에 필요한 마이크로 규칙을 학습하는 서비스입니다. 가드-학습자 애플리케이션을 배치하려면 프로젝트에 보호-학습자 애플리케이션을 작성하십시오. Code Engine 프로젝트당 한 번만 가드-학습자 애플리케이션을 작성합니다.
- 애플리케이션을 보호하고
--v project옵션을 사용하여 앱의 가시성을 프로젝트 레벨로 설정하여 잠재적 위반자에게 노출하지 않도록 하십시오. 자세한 정보는 Code Engine 애플리케이션에 대한 가시성 옵션의 내용을 참조하십시오. - 가드-학습자 서비스를 확장하여
--min 1 --max 1옵션을 사용하여 단일 인스턴스를 지속적으로 실행하십시오.
ibmcloud ce application create -n guard-learner -v project --min 1 --max 1 -p 8888 -i ghcr.io/ibm/workload-security-guard/guard-learner
출력 예
Creating application 'guard-learner'...
[...]
Run 'ibmcloud ce application get -n guard-learner' to check the application status.
OK
http://guard-learner.p8abcd4abcd.svc.cluster.local
보호된 Hello World 애플리케이션 작성 및 배포
Hello World 애플리케이션을 작성하고 project 가시성을 지정하십시오. 다음 예제에서는 애플리케이션 이름을 변경하고 다른 이미지 및 포트를 설정할 수 있습니다.
- 애플리케이션을 보호하고
--v project옵션을 사용하여 앱의 가시성을 프로젝트 레벨로 설정하여 잠재적 위반자에게 노출하지 않도록 하십시오. 자세한 정보는 Code Engine 애플리케이션에 대한 가시성 옵션의 내용을 참조하십시오. --min 1옵션을 사용하여 최소 스케일을 단일 인스턴스로 설정하십시오.
export SERVICE_NAME="myapp"
ibmcloud ce application create -n ${SERVICE_NAME} -v project -min 1 -p 8080 -i icr.io/codeengine/hello
출력 예
Creating application 'myapp'...
[...]
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK
http://myapp.p8abcd4abcd.svc.cluster.local
네임스페이스 및 서비스 URL찾기
배치된 애플리케이션 및 프로젝트의 가드-리어에 대한 정보를 추출하십시오.
export NAMESPACE=`ibmcloud ce project current -o json|jq -r .kube_config_context`
export GUARD_URL=`ibmcloud ce application get -n guard-learner -o url`
export SERVICE_URL=`ibmcloud ce application get -n ${SERVICE_NAME} -o url`
echo "The protected service name '${SERVICE_NAME}' namespace '${NAMESPACE}' url '${SERVICE_URL}'"
echo "The guard learner url is '${GUARD_URL}'"
출력 예
The protected service name 'myapp' namespace 'p8abcd4abcd' url 'http://myapp.p8abcd4abcd.svc.cluster.local'
The guard learner url is 'http://guard-learner.p8abcd4abcd.svc.cluster.local'
가드를 통해 Hello World 애플리케이션을 인터넷에 노출
Hello World 경비원을 추가하여 Hello World 애플리케이션을 인터넷에 안전하게 노출시킨다.
ibmcloud ce application create -n ${SERVICE_NAME}-guard --min 1 -p 22000 \
-e GUARD_URL=${GUARD_URL} \
-e SERVICE_URL=${SERVICE_URL} \
-e SERVICE_NAME=${SERVICE_NAME} \
-e NAMESPACE=${NAMESPACE} \
-i ghcr.io/ibm/workload-security-guard/guard-rproxy
출력 예
Creating application 'myapp-guard'...
[...]
Run 'ibmcloud ce application get -n myapp-guard' to check the application status.
OK
https://myapp-guard.p8abcd4abcd.us-south.codeengine.appdomain.cloud
Hello World 경비원이 노출한 URL을 통해 보호된 Hello World 애플리케이션에 액세스할 수 있다.
참고:
- 보호할 애플리케이션에 대해 보호를 배치합니다.
- 프로젝트 이름 공간 및 보호하는 해당 애플리케이션 이름 및 URL을 보호하십시오.
- 가드-학습자의 url을 사용하여 주 방위군을 제공합니다.
USE_CONFIGMAP=true를 설정하여guardian-${SERVICE_NAME}라는 configmap에서 마이크로 규칙을 유지보수하십시오.--min 1옵션을 사용하여 보호 앱의 최소 배율을 단일 인스턴스로 설정하는 것을 고려하십시오.
Hello World 애플리케이션의 보안 관리 및 상황 인식 확보
가드는 애플리케이션 보안 자세에 상황 인식을 제공합니다. 보안 경보가 발생하면 보안 경보를 로그 파일에서 찾을 수 있습니다.
ibmcloud ce application logs -n ${SERVICE_NAME}-guard
출력 예
[...]
{"level":"warn","message":"SECURITY ALERT! HttpRequest: Headers: KeyVal: Known Key X-B3-Traceid: Digits: Counter out of Range: 25"}
[...]
보안 경보는 보호 로그 파일에 경고로 표시되며 SECURITY ALERT!문자열로 시작합니다. 보호의 기본 설정은 요청 또는 응답을 허용하고 이를 보고한 후 새 패턴을 학습하는 것입니다. 애플리케이션이 요청을 적극적으로 제공하고 있을 때, 일반적으로 가드는 애플리케이션 요청 및 응답의 패턴을 학습하고 대응하는 마이크로-규칙을 빌드하기 위해 가드에 대해 약 30분이 소요된다. 초기 학습 기간 후에는 동작의
변경이 발견되는 경우에만 경고를 보냅니다.
기본 설정에서, 보호는 계속해서 새 동작을 학습하므로 새 동작이 다시 발생할 때 경고를 반복적으로 보고하지 않아도 됩니다. 올바른 보안 프로시저에는 보호가 발견한 새 동작을 검토하는 것이 포함되어야 합니다.
또한, 가드는 다음과 같은 다른 동작 모드에서 동작하도록 구성될 수 있다.
- 최초 학습 기간 이후 자동 학습에서 수동 마이크로 규칙 관리로 이동
- 마이크로 규칙을 준수하지 않을 때 요청/응답 차단
자세한 정보 또는 문제점 해결 도움말은 #code-engine 채널을 참조하십시오.
튜토리얼 애플리케이션 정리하기
이 학습서를 완료하면 다음 예제에 표시된 대로 Hello World 애플리케이션, Hello World Guard및 Guard-Learner를 제거할 수 있다.
ibmcloud ce application delete -n ${SERVICE_NAME}
ibmcloud ce application delete -n ${SERVICE_NAME}-guard
ibmcloud ce application delete -n guard-learner