6.3. サンプルアプリケーションのデプロイ
サンプルアプリケーション用に新しいプロジェクトを作成します。
$ oc new-project hello-worldHello World アプリケーションをデプロイします。
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift事前に作成済みのサービスリソースを NodePort サービスタイプに変換します。
$ oc -n hello-world patch service hello-openshift -p '{"spec":{"type":"NodePort"}}'AWS Load Balancer Operator を使用して AWS ALB をデプロイします。
$ 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 EOFAWS ALB Ingress エンドポイントを curl して、Hello World アプリケーションにアクセスできることを確認します。
注記AWS ALB のプロビジョニングには数分かかります。
curl: (6) Could not resolve hostというエラーが表示された場合は、待機してから再試行してください。$ INGRESS=$(oc -n hello-world get ingress hello-openshift-alb -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') $ curl "http://${INGRESS}"出力例
Hello OpenShift!
6.3.1. AWS WAF の設定 リンクのコピーリンクがクリップボードにコピーされました!
AWS WAF サービスは Web アプリケーションファイアウォールです。Red Hat OpenShift Service on AWS などの保護対象の Web アプリケーションリソースに転送される HTTP および HTTPS 要求を監視、保護、制御できます。
Web ACL に適用する AWS WAF ルールファイルを作成します。
$ 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" } } ] EOFこれにより、コア (共通) および SQL AWS マネージドルールセットが有効になります。
上記で指定したルールを使用して、AWS WAF の Web ACL を作成します。
$ 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)Ingress リソースに 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}ルールが反映されるまで 10 秒待ち、アプリケーションがまだ動作するかテストします。
$ curl "http://${INGRESS}"出力例
Hello OpenShift!WAF が不正な要求を拒否することをテストします。
$ curl -X POST "http://${INGRESS}" \ -F "user='<script><alert>Hello></alert></script>'"出力例
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> </body> </html注記AWS WAF 統合の有効化には数分かかる場合があります。
403 Forbiddenエラーが表示されない場合は、数秒待ってからもう一度お試しください。予期される結果は
403 Forbiddenエラーです。このエラーが返されれば、アプリケーションは AWS WAF によって保護されています。