Menyebarkan aplikasi web Amazon Web Services (AWS) ke Azure

Dalam artikel ini, Anda menyebarkan aplikasi Yelb ke kluster Azure Kubernetes Service (AKS) yang Anda buat di artikel previous.

Memeriksa lingkungan

Sebelum Anda menyebarkan aplikasi, pastikan kluster AKS Anda dikonfigurasi dengan benar menggunakan perintah berikut:

  1. Cantumkan namespace di kluster Anda menggunakan kubectl get namespace perintah .

    kubectl get namespace
    

    Jika Anda memasang pengontrol ingress NGINX dengan menggunakan tambahan perutean aplikasi, Anda seharusnya melihat app-routing-system namespace dalam output.

    NAME                 STATUS   AGE
    app-routing-system   Active   4h28m
    cert-manager         Active   109s
    dapr-system          Active   4h18m
    default              Active   4h29m
    gatekeeper-system    Active   4h28m
    kube-node-lease      Active   4h29m
    kube-public          Active   4h29m
    kube-system          Active   4h29m
    

    Jika Anda menginstal kontroler masuk NGINX menggunakan Helm, Anda seharusnya melihat namespace ingress-basic di output tersebut.

    NAME                STATUS   AGE
    cert-manager        Active   7m42s
    dapr-system         Active   11m
    default             Active   21m
    gatekeeper-system   Active   20m
    ingress-basic       Active   7m19s
    kube-node-lease     Active   21m
    kube-public         Active   21m
    kube-system         Active   21m
    prometheus          Active   8m9s
    
  2. Dapatkan detail layanan dari namespace app-routing-system atau ingress-basic menggunakan kubectl get service command.

    kubectl get service --namespace <namespace-name> -o wide
    

    Jika Anda menggunakan add-on perutean aplikasi, Anda seharusnya melihat bahwa layanan EXTERNAL-IP memiliki alamat IP privat nginx. Alamat ini adalah IP privat dari konfigurasi frontend IP di penyeimbang beban privat kubernetes-internal kluster AKS Anda.

    NAME    TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE     SELECTOR
    nginx   LoadBalancer   172.16.55.104   10.240.0.7    80:31447/TCP,443:31772/TCP,10254:30459/TCP   4h28m   app=nginx
    

    Jika Anda menggunakan Helm, Anda akan melihat EXTERNAL-IP dari layanan nginx-ingress-ingress-nginx-controller adalah alamat IP pribadi. Ini adalah alamat IP pribadi dari konfigurasi IP frontend di load balancer privat kubernetes-internal dalam kluster AKS Anda.

    NAME                                               TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    nginx-ingress-ingress-nginx-controller             LoadBalancer   172.16.42.152    10.240.0.7    80:32117/TCP,443:32513/TCP   7m31s
    nginx-ingress-ingress-nginx-controller-admission   ClusterIP      172.16.78.85     <none>        443/TCP                      7m31s
    nginx-ingress-ingress-nginx-controller-metrics     ClusterIP      172.16.109.138   <none>        10254/TCP                    7m31s
    

Bersiap untuk menyebarkan aplikasi Yelb

Jika Anda ingin menyebarkan sampel menggunakan penghentian TLS di Application Gateway dan pemanggilan Yelb melalui pendekatan HTTP , Anda dapat menemukan skrip Bash dan templat YAML untuk menyebarkan aplikasi Yelb di http folder.

Jika Anda ingin menyebarkan sampel menggunakan Menimplementasi TLS end-to-end menggunakan arsitektur Azure Application Gateway, Anda dapat menemukan skrip Bash dan templat YAML untuk menyebarkan aplikasi web di folder https.

Di bagian lain dari artikel ini, kami memandu Anda melalui proses penyebaran aplikasi sampel menggunakan pendekatan TLS end-to-end.

Menyesuaikan variabel

  1. Sebelum menjalankan skrip apa pun, Anda perlu menyesuaikan nilai variabel dalam 00-variables.sh file. File ini disertakan dalam semua skrip dan berisi variabel berikut:

    # Azure subscription and tenant
    RESOURCE_GROUP_NAME="<aks-resource-group>"
    SUBSCRIPTION_ID="$(az account show --query id --output tsv)"
    SUBSCRIPTION_NAME="$(az account show --query name --output tsv)"
    TENANT_ID="$(az account show --query tenantId --output tsv)"
    AKS_CLUSTER_NAME="<aks-name>"
    AGW_NAME="<application-gateway-name>"
    AGW_PUBLIC_IP_NAME="<application-gateway-public-ip-name>"
    DNS_ZONE_NAME="<your-azure-dns-zone-name-eg-contoso.com>"
    DNS_ZONE_RESOURCE_GROUP_NAME="<your-azure-dns-zone-resource-group-name>"
    DNS_ZONE_SUBSCRIPTION_ID="<your-azure-dns-zone-subscription-id>"
    
    # NGINX ingress controller installed via Helm
    NGINX_NAMESPACE="ingress-basic"
    NGINX_REPO_NAME="ingress-nginx"
    NGINX_REPO_URL="https://kubernetes.github.io/ingress-nginx"
    NGINX_CHART_NAME="ingress-nginx"
    NGINX_RELEASE_NAME="ingress-nginx"
    NGINX_REPLICA_COUNT=3
    
    # Specify the ingress class name for the ingress controller
    # - nginx: Unmanaged NGINX ingress controller installed via Helm
    # - webapprouting.kubernetes.azure.com: Managed NGINX ingress controller installed via AKS application routing add-on
    INGRESS_CLASS_NAME="webapprouting.kubernetes.azure.com"
    
    # Subdomain of the Yelb UI service
    SUBDOMAIN="<yelb-application-subdomain>"
    
    # URL of the Yelb UI service
    URL="https://$SUBDOMAIN.$DNS_ZONE_NAME"
    
    # Secret provider class
    KEY_VAULT_NAME="<key-vault-name>"
    KEY_VAULT_CERTIFICATE_NAME="<key-vault-resource-group-name>"
    KEY_VAULT_SECRET_PROVIDER_IDENTITY_CLIENT_ID="<key-vault-secret-provider-identity-client-id>"
    TLS_SECRET_NAME="yelb-tls-secret"
    NAMESPACE="yelb"
    
  2. Anda dapat menjalankan perintah az aks show berikut untuk mengambil clientId identitas terkelola yang ditetapkan oleh pengguna yang digunakan oleh Azure Key Vault Provider untuk Secrets Store CSI Driver. Modul keyVault.bicepperan Administrator Key Vault ke identitas terkelola yang ditetapkan pengguna dari addon untuk memungkinkannya mengambil sertifikat yang digunakan oleh Ingress Kubernetes untuk mengekspos layanan yelb-ui melalui pengontrol ingress NGINX.

    az aks show \
      --name <aks-name> \
      --resource-group <aks-resource-group-name> \
      --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId \
      --output tsv \
      --only-show-errors
    
  3. Jika Anda menyebarkan infrastruktur Azure menggunakan modul Bicep yang disediakan dengan sampel ini, Anda dapat melanjutkan ke menyebarkan aplikasi Yelb. Jika Anda ingin menyebarkan aplikasi di kluster AKS, Anda dapat menggunakan skrip berikut untuk mengonfigurasi lingkungan Anda. Anda dapat menggunakan 02-create-nginx-ingress-controller.sh untuk menginstal pengontrol ingress NGINX dengan firewall aplikasi web sumber terbuka ModSecurity (WAF) diaktifkan.

    #!/bin/bash
    
    # Variables
    source ./00-variables.sh
    
    # Check if the NGINX ingress controller Helm chart is already installed
    result=$(helm list -n $NGINX_NAMESPACE | grep $NGINX_RELEASE_NAME | awk '{print $1}')
    
    if [[ -n $result ]]; then
      echo "[$NGINX_RELEASE_NAME] NGINX ingress controller release already exists in the [$NGINX_NAMESPACE] namespace"
    else
      # Check if the NGINX ingress controller repository is not already added
      result=$(helm repo list | grep $NGINX_REPO_NAME | awk '{print $1}')
    
      if [[ -n $result ]]; then
        echo "[$NGINX_REPO_NAME] Helm repo already exists"
      else
        # Add the NGINX ingress controller repository
        echo "Adding [$NGINX_REPO_NAME] Helm repo..."
        helm repo add $NGINX_REPO_NAME $NGINX_REPO_URL
      fi
    
      # Update your local Helm chart repository cache
      echo 'Updating Helm repos...'
      helm repo update
    
      # Deploy NGINX ingress controller
      echo "Deploying [$NGINX_RELEASE_NAME] NGINX ingress controller to the [$NGINX_NAMESPACE] namespace..."
      helm install $NGINX_RELEASE_NAME $NGINX_REPO_NAME/$nginxChartName \
        --create-namespace \
        --namespace $NGINX_NAMESPACE \
        --set controller.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.replicaCount=$NGINX_REPLICA_COUNT \
        --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
    fi
    
    # Get values
    helm get values $NGINX_RELEASE_NAME --namespace $NGINX_NAMESPACE
    

Menyebarkan aplikasi

  1. Jalankan skrip berikut 03-deploy-yelb.sh untuk menyebarkan aplikasi Yelb dan objek Kubernetes Ingress untuk membuat yelb-ui layanan dapat diakses oleh internet publik.

    #!/bin/bash
    
    # Variables
    source ./00-variables.sh
    
    # Check if namespace exists in the cluster
    result=$(kubectl get namespace -o jsonpath="{.items[?(@.metadata.name=='$NAMESPACE')].metadata.name}")
    
    if [[ -n $result ]]; then
      echo "$NAMESPACE namespace already exists in the cluster"
    else
      echo "$NAMESPACE namespace does not exist in the cluster"
      echo "creating $NAMESPACE namespace in the cluster..."
      kubectl create namespace $NAMESPACE
    fi
    
    # Create the Secret Provider Class object
    echo "Creating the secret provider class object..."
    cat <<EOF | kubectl apply -f -
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      namespace: $NAMESPACE
      name: yelb
    spec:
      provider: azure
      secretObjects:
        - secretName: $TLS_SECRET_NAME
          type: kubernetes.io/tls
          data: 
            - objectName: $KEY_VAULT_CERTIFICATE_NAME
              key: tls.key
            - objectName: $KEY_VAULT_CERTIFICATE_NAME
              key: tls.crt
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"
        userAssignedIdentityID: $KEY_VAULT_SECRET_PROVIDER_IDENTITY_CLIENT_ID
        keyvaultName: $KEY_VAULT_NAME
        objects: |
          array:
            - |
              objectName: $KEY_VAULT_CERTIFICATE_NAME
              objectType: secret
        tenantId: $TENANT_ID
    EOF
    
    # Apply the YAML configuration
    kubectl apply -f yelb.yml
    
    echo "waiting for secret $TLS_SECRET_NAME in namespace $namespace..."
    
    while true; do
      if kubectl get secret -n $NAMESPACE $TLS_SECRET_NAME >/dev/null 2>&1; then
        echo "secret $TLS_SECRET_NAME found!"
        break
      else
        printf "."
        sleep 3
      fi
    done
    
    # Create chat-ingress
    cat ingress.yml |
      yq "(.spec.ingressClassName)|="\""$INGRESS_CLASS_NAME"\" |
      yq "(.spec.tls[0].hosts[0])|="\""$SUBDOMAIN.$DNS_ZONE_NAME"\" |
      yq "(.spec.tls[0].secretName)|="\""$TLS_SECRET_NAME"\" |
      yq "(.spec.rules[0].host)|="\""$SUBDOMAIN.$DNS_ZONE_NAME"\" |
      kubectl apply -f -
    
    # Check the deployed resources within the yelb namespace:
    kubectl get all -n yelb
    
  2. Perbarui manifes YAML yelb-ui untuk menyertakan definisi csi volume dan volume mount untuk membaca sertifikat sebagai rahasia dari Azure Key Vault.

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: yelb
  name: yelb-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: yelb-ui
      tier: frontend
  template:
    metadata:
      labels:
        app: yelb-ui
        tier: frontend
    spec:
      containers:
        - name: yelb-ui
          image: mreferre/yelb-ui:0.7
          ports:
            - containerPort: 80
          volumeMounts:
            - name: secrets-store-inline
              mountPath: "/mnt/secrets-store"
              readOnly: true
      volumes:
        - name: secrets-store-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: yelb
  1. Anda sekarang dapat menyebarkan aplikasi. Skrip menggunakan yelb.yml manifes YAML untuk menyebarkan aplikasi dan ingress.yml untuk membuat objek ingress. Jika Anda menggunakan zona DNS Publik Azure untuk resolusi nama domain, Anda dapat menggunakan skrip 04-configure-dns.sh. Skrip ini mengaitkan alamat IP publik dari pengendali ingress NGINX dengan domain yang digunakan oleh objek ingress, yang layanan yelb-ui-nya diekspos. Skrip melakukan langkah-langkah berikut:

    1. Mengambil alamat publik dari IP publik Azure yang digunakan oleh konfigurasi IP front-end dari Application Gateway.
    2. Memeriksa apakah terdapat catatan A untuk subdomain yang digunakan oleh layanan yelb-ui.
    3. A Jika rekaman tidak ada, skrip akan membuatnya.
source ./00-variables.sh

# Get the address of the Application Gateway Public IP
echo "Retrieving the address of the [$AGW_PUBLIC_IP_NAME] public IP address of the [$AGW_NAME] Application Gateway..."
PUBLIC_IP_ADDRESS=$(az network public-ip show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $AGW_PUBLIC_IP_NAME \
    --query ipAddress \
    --output tsv \
    --only-show-errors)
if [[ -n $PUBLIC_IP_ADDRESS ]]; then
    echo "[$PUBLIC_IP_ADDRESS] public IP address successfully retrieved for the [$AGW_NAME] Application Gateway"
else
    echo "Failed to retrieve the public IP address of the [$AGW_NAME] Application Gateway"
    exit
fi
# Check if an A record for todolist subdomain exists in the DNS Zone
echo "Retrieving the A record for the [$SUBDOMAIN] subdomain from the [$DNS_ZONE_NAME] DNS zone..."
IPV4_ADDRESS=$(az network dns record-set a list \
    --zone-name $DNS_ZONE_NAME \
    --resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
    --subscription $DNS_ZONE_SUBSCRIPTION_ID \
    --query "[?name=='$SUBDOMAIN'].ARecords[].IPV4_ADDRESS" \
    --output tsv \
    --only-show-errors)
if [[ -n $IPV4_ADDRESS ]]; then
    echo "An A record already exists in [$DNS_ZONE_NAME] DNS zone for the [$SUBDOMAIN] subdomain with [$IPV4_ADDRESS] IP address"
    if [[ $IPV4_ADDRESS == $PUBLIC_IP_ADDRESS ]]; then
        echo "The [$IPV4_ADDRESS] ip address of the existing A record is equal to the ip address of the ingress"
        echo "No additional step is required"
        continue
    else
        echo "The [$IPV4_ADDRESS] ip address of the existing A record is different than the ip address of the ingress"
    fi
    # Retrieving name of the record set relative to the zone
    echo "Retrieving the name of the record set relative to the [$DNS_ZONE_NAME] zone..."
    RECORDSET_NAME=$(az network dns record-set a list \
        --zone-name $DNS_ZONE_NAME \
        --resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
        --subscription $DNS_ZONE_SUBSCRIPTION_ID \
        --query "[?name=='$SUBDOMAIN'].name" \
        --output tsv \
        --only-show-errors 2>/dev/null)
    if [[ -n $RECORDSET_NAME ]]; then
        echo "[$RECORDSET_NAME] record set name successfully retrieved"
    else
        echo "Failed to retrieve the name of the record set relative to the [$DNS_ZONE_NAME] zone"
        exit
    fi
    # Remove the A record
    echo "Removing the A record from the record set relative to the [$DNS_ZONE_NAME] zone..."
    az network dns record-set a remove-record \
        --ipv4-address $IPV4_ADDRESS \
        --record-set-name $RECORDSET_NAME \
        --zone-name $DNS_ZONE_NAME \
        --resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
        --subscription $DNS_ZONE_SUBSCRIPTION_ID \
        --only-show-errors 1>/dev/null
    if [[ $? == 0 ]]; then
        echo "[$IPV4_ADDRESS] ip address successfully removed from the [$RECORDSET_NAME] record set"
    else
        echo "Failed to remove the [$IPV4_ADDRESS] ip address from the [$RECORDSET_NAME] record set"
        exit
    fi
fi
# Create the A record
echo "Creating an A record in [$DNS_ZONE_NAME] DNS zone for the [$SUBDOMAIN] subdomain with [$PUBLIC_IP_ADDRESS] IP address..."
az network dns record-set a add-record \
    --zone-name $DNS_ZONE_NAME \
    --resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
    --subscription $DNS_ZONE_SUBSCRIPTION_ID \
    --record-set-name $SUBDOMAIN \
    --ipv4-address $PUBLIC_IP_ADDRESS \
    --only-show-errors 1>/dev/null
if [[ $? == 0 ]]; then
    echo "A record for the [$SUBDOMAIN] subdomain with [$PUBLIC_IP_ADDRESS] IP address successfully created in [$DNS_ZONE_NAME] DNS zone"
else
    echo "Failed to create an A record for the $SUBDOMAIN subdomain with [$PUBLIC_IP_ADDRESS] IP address in [$DNS_ZONE_NAME] DNS zone"
fi

Nota

Sebelum menyebarkan aplikasi Yelb dan membuat objek ingress, skrip menghasilkan SecretProviderClass untuk mengambil sertifikat TLS dari Azure Key Vault dan menghasilkan rahasia Kubernetes untuk objek ingress. Penting untuk dicatat bahwa Driver CSI Secrets Store untuk Key Vault membuat rahasia Kubernetes yang berisi sertifikat TLS hanya jika SecretProviderClass dan definisi volume disertakan dalam deployment. Untuk memastikan sertifikat TLS diambil dengan benar dari Azure Key Vault dan disimpan dalam rahasia Kubernetes yang digunakan oleh objek ingress, kita perlu melakukan modifikasi berikut pada manifes YAML dari penyebaran yelb-ui:

  • Tambahkan definisi csi volume menggunakan driver secrets-store.csi.k8s.io, yang mereferensikan objek SecretProviderClass yang bertanggung jawab untuk mengambil sertifikat TLS dari Azure Key Vault.
  • Sertakan volume mount untuk membaca sertifikat sebagai rahasia dari Azure Key Vault.

Untuk informasi selengkapnya, lihat Menyiapkan Secrets Store CSI Driver untuk mengaktifkan pengontrol ingress NGINX dengan TLS.

Uji aplikasi

05-call-yelb-ui.sh Gunakan skrip untuk memanggil yelb-ui layanan, mensimulasikan injeksi SQL, serangan XSS, dan mengamati bagaimana sekumpulan aturan terkelola ModSecurity memblokir permintaan berbahaya.

#!/bin/bash
# Variables
source ./00-variables.sh
# Call REST API
echo "Calling Yelb UI service at $URL..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL
# Simulate SQL injection
echo "Simulating SQL injection when calling $URL..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL/?users=ExampleSQLInjection%27%20--
# Simulate XSS
echo "Simulating XSS when calling $URL..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL/?users=ExampleXSS%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E
# A custom rule blocks any request with the word blockme in the querystring.
echo "Simulating query string manipulation with the 'blockme' word in the query string..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL/?users?task=blockme

Skrip Bash harus menghasilkan output berikut, di mana panggilan pertama berhasil, sementara aturan ModSecurity memblokir dua panggilan berikut:

Calling Yelb UI service at https://yelb.contoso.com...
HTTP Status: 200
Simulating SQL injection when calling https://yelb.contoso.com...
HTTP Status: 403
Simulating XSS when calling https://yelb.contoso.com...
HTTP Status: 403
Simulating query string manipulation with the 'blockme' word in the query string...
HTTP Status: 403

Memantau aplikasi

Dalam solusi yang diusulkan, proses penyebaran secara otomatis mengonfigurasi sumber daya Azure Application Gateway untuk mengumpulkan log dan metrik diagnostik ke Azure Log Analytics Workspace. Dengan mengaktifkan log, Anda dapat memperoleh wawasan berharga tentang penilaian, kecocokan, dan pemblokiran yang dilakukan oleh Azure Web Application Firewall (WAF) dalam Application Gateway. Untuk informasi selengkapnya, lihat Log diagnostik untuk Application Gateway. Anda juga dapat menggunakan Log Analytics untuk memeriksa data dalam log firewall. Saat Anda memiliki log firewall di ruang kerja Log Analytics, Anda dapat melihat data, menulis kueri, membuat visualisasi, dan menambahkannya ke dasbor portal Anda. Untuk informasi terperinci tentang kueri log, lihat Gambaran umum kueri log di Azure Monitor.

Menjelajahi data dengan kueri Kusto

Dalam solusi yang diusulkan, proses penyebaran secara otomatis mengonfigurasi sumber daya Azure Application Gateway untuk mengumpulkan log diagnostik dan metrik ke ruang kerja Azure Log Analytics. Dengan mengaktifkan log, Anda dapat memperoleh wawasan tentang penilaian, pencocokan, dan pemblokiran yang dilakukan oleh Azure Web Application Firewall (WAF) dalam Application Gateway. Untuk informasi selengkapnya, lihat Log diagnostik untuk Application Gateway.

Anda juga dapat menggunakan Log Analytics untuk memeriksa data dalam log firewall. Saat Anda memiliki log firewall di ruang kerja Log Analytics, Anda dapat melihat data, menulis kueri, membuat visualisasi, dan menambahkannya ke dasbor portal Anda. Untuk informasi selengkapnya tentang kueri log, lihat Gambaran umum kueri log di Azure Monitor.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| limit 10

Atau, saat bekerja dengan tabel Khusus sumber daya , data log firewall mentah dapat diakses menggunakan kueri berikut. Untuk mempelajari selengkapnya tentang tabel khusus sumber daya, lihat dokumentasi referensi data Pemantauan .

AGWFirewallLogs
| limit 10

Setelah memiliki data, Anda dapat mempelajari lebih dalam dan membuat grafik atau visualisasi. Berikut adalah beberapa contoh tambahan kueri KQL yang dapat digunakan:

Permintaan yang dicocokkan/diblokir berdasarkan IP

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize count() by clientIp_s, bin(TimeGenerated, 1m)
| render timechart

Permintaan yang Dicocokkan/Diblokir berdasarkan URI

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize count() by requestUri_s, bin(TimeGenerated, 1m)
| render timechart

Aturan yang paling sesuai

| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize count() by ruleId_s, bin(TimeGenerated, 1m)
| where count_ > 10
| render timechart

Lima grup aturan teratas yang paling cocok

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize Count=count() by details_file_s, action_s
| top 5 by Count desc
| render piechart

Meninjau sumber daya yang disebarkan

Anda dapat menggunakan Azure CLI atau Azure PowerShell untuk mencantumkan sumber daya yang disebarkan dalam grup sumber daya.

Cantumkan sumber daya yang disebarkan dalam grup sumber daya menggunakan perintah [az resource list][az-resource-list].

az resource list --resource-group <resource-group-name>

Anda dapat menggunakan Azure CLI atau Azure PowerShell untuk menghapus grup sumber daya ketika Anda tidak lagi memerlukan sumber daya yang Anda buat dalam tutorial ini.

Hapus grup sumber daya dan sumber daya terkait menggunakan az group delete perintah .

az group delete --name <resource-group-name>

Langkah berikutnya

Anda dapat meningkatkan keamanan dan perlindungan ancaman solusi menggunakan Azure DDoS Protection dan Azure Firewall. Untuk informasi lebih lanjut, baca artikel berikut:

Jika Anda menggunakan pengontrol ingress NGINX atau pengontrol ingress yang dihosting AKS lainnya sebagai pengganti Azure Application Gateway, Anda dapat menggunakan Azure Firewall untuk memeriksa lalu lintas ke dan dari kluster AKS dan melindungi kluster dari penyelundupan data dan lalu lintas jaringan lain yang tidak diinginkan. Untuk informasi lebih lanjut, baca artikel berikut:

Kontributor

Microsoft mempertahankan artikel ini. Kontributor berikut awalnya menulisnya:

Penulis utama:

Kontributor lain: