Sécurisation de votre application avec Guard

Guard est une solution de sécurité d'exécution que IBM Cloud® Code Engine vous pouvez utiliser pour gouverner les demandes entrantes et les réponses sortantes de votre application. Guard utilise un ensemble de micro-règles appris automatiquement par application pour régir les demandes entrantes et les réponses sortantes de l'application. Par conséquent, vous pouvez utiliser Guard pour identifier les anomalies d'application et prendre en charge Situational Awareness. Guard peut également bloquer les demandes ou les réponses qui ne sont pas conformes aux modèles attendus.

Dans ce tutoriel, déployez une application Hello World et protégez-la avec Guard.

Avant de commencer :

Tous les utilisateurs Code Engine doivent avoir un compte de paiement à la carte. Les tutoriels peuvent entraîner des coûts. Utilisez l'estimateur de coût pour générer une estimation du coût en fonction de l'utilisation envisagée. Pour plus d'informations, voir Tarification Code Engine.

Déploiement d'une application guard-Learner en tant que service par projet

Guard-Learner est un service qui apprend les micro-règles nécessaires pour chaque application protégée par Guard dans un projet. Pour déployer une application Guard-Learner, créez-la dans votre projet. Notez que vous créez l'application Guard-Learner une seule fois par projet Code Engine .

  • Protégez votre application et évitez de l'exposer à des délinquants potentiels en définissant la visibilité de l'application au niveau du projet avec l'option --v project . Pour plus d'informations, voir Options de visibilité pour une application Code Engine.
  • Mettez à l'échelle le service Guard-Learner pour exécuter en continu une seule instance avec l'option --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

Exemple de sortie

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

Création et déploiement d'une application Hello World protégée

Créez l'application Hello World et affectez-lui la visibilité project . Dans l'exemple suivant, vous pouvez modifier le nom de l'application et définir une image et un port différents.

  • Protégez votre application et évitez de l'exposer à des délinquants potentiels en définissant la visibilité de l'application au niveau du projet avec l'option --v project . Pour plus d'informations, voir Options de visibilité pour une application Code Engine.
  • Envisagez de définir l'échelle minimale sur une seule instance à l'aide de l'option --min 1 .
export SERVICE_NAME="myapp"
ibmcloud ce application create -n ${SERVICE_NAME} -v project -min 1 -p 8080 -i icr.io/codeengine/hello

Exemple de sortie

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

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

Recherche de l'espace de nom et des URL de service

Extrayez des informations sur votre application déployée et sur Guard-Leaner du projet.

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

Exemple de sortie

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'

Exposition de l'application Hello World à Internet via Guard

Ajoutez une protection Hello World pour exposer en toute sécurité l'application Hello World sur 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

Exemple de sortie

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

Vous pouvez accéder à l'application Hello World protégée via l'URL exposée par Hello World guard.

Remarques:

  • Déployez un garde pour toute application que vous souhaitez protéger.
  • Fournissez à Guard l'espace de nom de projet ainsi que le nom d'application et l'URL correspondants qu'il protège.
  • Fournissez à Guard l'URL de Guard-Learner.
  • Définissez USE_CONFIGMAP=true pour gérer les micro-règles dans une mappe de configuration nommée guardian-${SERVICE_NAME} .
  • Envisagez de définir l'échelle minimale de l'application Guard sur une seule instance à l'aide de l'option --min 1 .

Gestion de la sécurité de l'application Hello World et prise en compte de la situation

Guard offre une connaissance de la situation dans la situation de sécurité de l'application. Vous pouvez trouver des alertes de sécurité dans le fichier journal de Guard, au fur et à mesure qu'elles se produisent.

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

Exemple de sortie

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

Les alertes de sécurité apparaissent en tant qu'avertissements dans le fichier journal de garde et commencent par la chaîne SECURITY ALERT!. La configuration par défaut de Guard consiste à autoriser toute demande ou réponse et à apprendre tout nouveau modèle après l'avoir signalé. Lorsque l'application traite activement des demandes, il faut généralement environ 30 minutes à Guard pour connaître les modèles des demandes et des réponses de l'application et générer les micro-règles correspondantes. Après la période d'apprentissage initiale, Guard envoie des alertes uniquement lorsqu'un changement de comportement est détecté.

Notez que dans la configuration par défaut, Guard continue d'apprendre tout nouveau comportement et évite donc de générer des rapports d'alertes à plusieurs reprises lorsque le nouveau comportement se reproduit. Les procédures de sécurité correctes doivent inclure l'examen de tout nouveau comportement détecté par Guard.

Guard peut également être configuré pour fonctionner dans d'autres modes de fonctionnement, tels que:

  • Passer de l'apprentissage automatique à la gestion manuelle des micro-règles après la période d'apprentissage initiale
  • Bloquer les demandes / réponses lorsqu'elles ne sont pas conformes aux micro-règles

Pour plus d'informations ou pour obtenir de l'aide sur le traitement des incidents, voir le canal#code-engine.

Nettoyer les applications du tutoriel

Une fois que vous avez terminé avec ce tutoriel, vous pouvez supprimer l'application Hello World, l'application Hello World Guard et l'application Guard-Learner, comme illustré dans l'exemple suivant.

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