Proteggi la tua applicazione con Guard

Guard è una soluzione di sicurezza di runtime che IBM Cloud® Code Engine puoi utilizzare per gestire le richieste in entrata e le risposte in uscita della tua applicazione. Guard utilizza una serie di microregole apprese automaticamente per applicazione per gestire le richieste in entrata e le risposte in uscita dell'applicazione. Di conseguenza, è possibile utilizzare Guard per identificare le anomalie dell'applicazione e supportare Situational Awareness. Guard può anche bloccare le richieste o le risposte che non sono in linea con i modelli previsti.

In questa esercitazione, distribuisci un'applicazione Hello World e proteggila con Guard.

Prima di cominciare:

Tutti gli utenti Code Engine devono avere un account Pagamento a consumo. Le esercitazioni potrebbero comportare dei costi. Utilizzare lo stimatore dei costi per generare una stima dei costi basata sull'utilizzo previsto. Per ulteriori informazioni, vedi Prezzi diCode Engine.

Distribuisci un'applicazione guard - learner come servizio per progetto

Guard - Learner è un servizio che impara le microregole necessarie per ogni applicazione protetta da Guard in un progetto. Per distribuire un'applicazione Guard - Learner, crearla nel progetto. Nota che crei l'applicazione Guard - Learner solo una volta per ogni progetto Code Engine .

  • Proteggi la tua applicazione ed evita di esporla ai potenziali criminali impostando la visibilità per l'applicazione al livello del progetto con l'opzione --v project . Per ulteriori informazioni, vedi Opzioni per la visibilità per un'applicazione Code Engine.
  • Ridimensiona il servizio Guard - Learner per eseguire continuamente una singola istanza con l'opzione --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

Output di esempio

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

Creazione e distribuzione di un'applicazione Hello World protetta

Crea l'applicazione Hello World e assegnane la visibilità project . Nel seguente esempio, è possibile modificare il nome dell'applicazione e impostare un'altra immagine e porta.

  • Proteggi la tua applicazione ed evita di esporla ai potenziali criminali impostando la visibilità per l'applicazione al livello del progetto con l'opzione --v project . Per ulteriori informazioni, vedi Opzioni per la visibilità per un'applicazione Code Engine.
  • Considera di impostare la scala minima su una singola istanza con l'opzione --min 1 .
export SERVICE_NAME="myapp"
ibmcloud ce application create -n ${SERVICE_NAME} -v project -min 1 -p 8080 -i icr.io/codeengine/hello

Output di esempio

Creating application 'myapp'...
[...]
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK

http://myapp.p8abcd4abcd.svc.cluster.local

Ricerca dello spazio dei nomi e degli URL del servizio

Estrai informazioni sulla tua applicazione distribuita e sul Guard - Leaner del progetto.

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}'"

Output di esempio

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'

Esporre l'applicazione Hello World a Internet tramite Guard

Aggiungere una guardia Hello World per esporre in modo sicuro l'applicazione Hello World a internet.

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

Output di esempio

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

Puoi accedere all'applicazione Hello World protetta tramite l'URL esposto da Hello World guard.

Note:

  • Distribuire un Guard per qualsiasi applicazione che si desidera proteggere.
  • Fornire a Guard lo spazio dei nomi del progetto e il corrispondente nome e URL dell'applicazione che protegge.
  • Fornire a Guard l'url del Guard - Learner.
  • Impostare USE_CONFIGMAP=true per gestire le micro regole in una configmap denominata guardian-${SERVICE_NAME} .
  • Considera l'impostazione della scala minima dell'applicazione Guard su una singola istanza con l'opzione --min 1 .

Gestione della sicurezza dell'applicazione Hello World e acquisizione della consapevolezza situazionale

Guard offre la consapevolezza situazionale nella postura di sicurezza dell'applicazione. È possibile trovare gli avvisi di protezione nel file di log di Guard, man mano che si verificano.

ibmcloud ce application logs -n ${SERVICE_NAME}-guard

Output di esempio

[...]
{"level":"warn","message":"SECURITY ALERT! HttpRequest: Headers: KeyVal: Known Key X-B3-Traceid: Digits: Counter out of Range: 25"}  
[...]

Gli avvisi di sicurezza vengono visualizzati come avvertenze nel file di log guard e iniziano con la stringa SECURITY ALERT!. L'impostazione predefinita di Guard è quella di consentire qualsiasi richiesta o risposta e di apprendere qualsiasi nuovo modello dopo averlo segnalato. Quando l'applicazione sta attivamente servendo le richieste, in genere ci vogliono circa 30 minuti perché Guard apprenda i modelli delle richieste e delle risposte dell'applicazione e costruisca le corrispondenti micro - regole. Dopo il periodo di apprendimento iniziale, Guard invia avvisi solo quando viene rilevato un cambiamento nel comportamento.

Si noti che nella configurazione predefinita, Guard continua a imparare qualsiasi nuovo comportamento e quindi evita di segnalare gli avvisi ripetutamente quando il nuovo comportamento si ripresenta. Le procedure di sicurezza corrette devono includere la revisione di qualsiasi nuovo comportamento rilevato da Guard.

Guard può anche essere configurato per operare in altre modalità di funzionamento, come:

  • Passaggio dall'apprendimento automatico alla gestione manuale delle micro - regole dopo il periodo di apprendimento iniziale
  • Blocca richieste / risposte quando non sono conformi alle microregole

Per ulteriori informazioni o per la guida alla risoluzione dei problemi, consultare #code-engine channel.

Ripulire le applicazioni dell'esercitazione

Una volta terminata questa esercitazione, puoi rimuovere l'applicazione Hello World, Hello World Guard e Guard - Learner come mostrato nel seguente esempio.

ibmcloud ce application delete -n ${SERVICE_NAME}
ibmcloud ce application delete -n ${SERVICE_NAME}-guard
ibmcloud ce application delete -n guard-learner