7.3. Déployer un exemple d’application
Créez un nouveau projet pour notre exemple d’application:
$ oc new-project hello-worldDéployez une application hello world:
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshiftConvertissez la ressource de service pré-créée en un type de service NodePort:
$ oc -n hello-world patch service hello-openshift -p '{"spec":{"type":"NodePort"}}'Déployer un AWS ALB à l’aide de l’opérateur AWS Load Balancer:
$ cat << EOF | oc apply -f - apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: hello-openshift-alb namespace: hello-world annotations: alb.ingress.kubernetes.io/scheme: internet-facing spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Exact backend: service: name: hello-openshift port: number: 8080 EOFCurl le point de terminaison AWS ALB Ingress pour vérifier l’application hello world est accessible:
NoteAWS ALB provisioning prend quelques minutes. Lorsque vous recevez une erreur qui dit curl: (6) Ne peut pas résoudre l’hôte, s’il vous plaît attendre et essayer à nouveau.
$ INGRESS=$(oc -n hello-world get ingress hello-openshift-alb -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') $ curl "http://${INGRESS}"Exemple de sortie
Hello OpenShift!
7.3.1. Configurer l’AWS WAF Copier lienLien copié sur presse-papiers!
Le service AWS WAF est un pare-feu d’application Web qui vous permet de surveiller, de protéger et de contrôler les requêtes HTTP et HTTPS qui sont transmises à vos ressources d’application Web protégées, comme ROSA.
Créer un fichier de règles AWS WAF pour s’appliquer à notre ACL web:
$ cat << EOF > ${SCRATCH}/waf-rules.json [ { "Name": "AWS-AWSManagedRulesCommonRuleSet", "Priority": 0, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesCommonRuleSet" } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesCommonRuleSet" } }, { "Name": "AWS-AWSManagedRulesSQLiRuleSet", "Priority": 1, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesSQLiRuleSet" } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesSQLiRuleSet" } } ] EOFCela activera les jeux de règles gérés Core (Common) et SQL AWS.
Créer un AWS WAF Web ACL en utilisant les règles que nous avons spécifiées ci-dessus:
$ WAF_ARN=$(aws wafv2 create-web-acl \ --name ${CLUSTER}-waf \ --region ${REGION} \ --default-action Allow={} \ --scope REGIONAL \ --visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=${CLUSTER}-waf-metrics \ --rules file://${SCRATCH}/waf-rules.json \ --query 'Summary.ARN' \ --output text)Annotez la ressource Ingress avec AWS WAF Web ACL ARN:
$ oc annotate -n hello-world ingress.networking.k8s.io/hello-openshift-alb \ alb.ingress.kubernetes.io/wafv2-acl-arn=${WAF_ARN}Attendez 10 secondes pour que les règles se propagent et testent que l’application fonctionne toujours:
$ curl "http://${INGRESS}"Exemple de sortie
Hello OpenShift!Essayez que la WAF nie une mauvaise demande:
$ curl -X POST "http://${INGRESS}" \ -F "user='<script><alert>Hello></alert></script>'"Exemple de sortie
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> </body> </htmlNoteL’activation de l’intégration AWS WAF peut parfois prendre plusieurs minutes. Dans le cas où vous ne recevez pas une erreur 403 interdite, veuillez attendre quelques secondes et essayer à nouveau.
Le résultat attendu est une erreur 403 interdite, ce qui signifie que le WAF AWS protège votre application.