CDN-Konfigurations-Snippets für gängige Szenarien cdn-configuration-snippets

Dieser Artikel sammelt praktische cdn.yaml für AEM as a Cloud Service. Verwenden Sie sie zusammen mit der Funktionsdokumentation für CDN-Traffic-Regeln, kundenverwaltete CDN- und Traffic-Filterregeln einschließlich WAF. Bereitstellen von Snippets mit einer Cloud Manager Konfigurations-Pipeline.

NOTE
Ersetzen Sie Hostnamen, Pfade, IP-Bereiche, Schlüssel und Schwellenwerte durch Werte, die Ihrem Programm entsprechen. Testen Sie Änderungen in einer Nicht-Produktionsumgebung, bevor Sie sie weiterleiten.

Vom Kunden verwaltetes CDN customer-managed-cdn

Einrichten der Edge-Schlüsselauthentifizierung nur für einige Domains edge-auth-selected-hosts

Problem: In einem vom Kunden verwalteten CDN müssen Sie die Authentifizierung für einige Kunden-Hostnamen erzwingen, während andere Hostnamen, die die Veröffentlichung erreichen, ohne diese Kopfzeile verfügbar bleiben sollten (z. B. während des Rollouts oder wenn sich nur eine Marken-Domain hinter Ihrem CDN befindet).

Lösung: X-AEM-Edge-Key Authentifizierung ist nur erforderlich, wenn der erste Host-Name von X-Forwarded-Host Ihrem Ziel-Host-Namen entspricht (z. B. example.com). Die Regel verwendet die forwardedDomain-Anfrageeigenschaft, um diese Übereinstimmung durchzuführen, und führt die authenticate Aktion für Ihren Edge-Authentifizierer aus. Ersetzen Sie Host-Namen, Authentifizierungsnamen und Schlüssel-Platzhalter für Ihr Programm.

kind: "CDN"
version: "1"
data:
  authentication:
    authenticators:
      - name: edge-key-auth
        type: edge
        edgeKey1: ${{CDN_EDGEKEY_1}}
        edgeKey2: ${{CDN_EDGEKEY_2}}
    rules:
      - name: edge-key-auth-rule
        when: { reqProperty: forwardedDomain, equals: "example.com" }
        action:
          type: authenticate
          authenticator: edge-key-auth

Einrichten der Edge-Schlüsselauthentifizierung für Anfragen, die nicht von VPN-IPs stammen edge-auth-trusted-ips

Problem: Einrichten der Edge-Schlüsselauthentifizierung für BYOCDN, aber direkten Zugriff auf die Veröffentlichungsdomäne nur für VPN-IPs zulassen

Lösung: Authentifizierung mit X-AEM-Edge-Key nur dann erforderlich, wenn die Client-IP nicht in der Liste der VPN-IPs enthalten ist

kind: "CDN"
version: "1"
data:
  authentication:
    authenticators:
      - name: edge-key-auth
        type: edge
        edgeKey1: ${{CDN_EDGEKEY_1}}
        edgeKey2: ${{CDN_EDGEKEY_2}}
    rules:
      - name: edge-key-auth-rule
        when: { reqProperty: clientIp, notIn: ["10.0.0.1", "11.0.0.0/24", "<other VPN IPs>"] }
        action:
          type: authenticate
          authenticator: edge-key-auth

Umleitungen redirects

Weiterleitung von APEX Domain zu www apex-to-www

kind: "CDN"
version: "1"
data:
 redirects:
   rules:
     - name: non-www-to-www-redirect
       when:
         reqProperty: domain
         doesNotMatch: '^www\.'
       action:
         type: redirect
         status: 301
         location:
           join:
             format: 'https://www.%s%s'
             args:
               - reqProperty: domain
               - reqProperty: url

Ändern des Cache-Schlüssels cache-key

Das CDN stellt kein separates Feld „Cache-Schlüssel“ zur Verfügung. Da die URL an der Zwischenspeicherung beteiligt ist, können Sie Cache-Einträge aufteilen, indem Sie die URL ändern - z. B. indem Sie einen Abfrageparameter über eine Anfragetransformation“ ​.

kind: "CDN"
version: "1"
data:
  requestTransformations:
    rules:
      - name: set-request-different-cache-curl
        when:
          allOf:
            - reqProperty: tier
              equals: publish
            - reqHeader: user-agent
              matches: curl
        actions:
          - type: set
            queryParam: cache
            value: 'curl'

Zu einem normalisierten Pfad umleiten trailing-slash

Senden Sie eine permanente Umleitung, wenn ein Browser bei der Veröffentlichung einen Schrägstrich anfordert, z. B. von https://www.example.com/path/ zu https://www.example.com/path.

kind: "CDN"
version: "1"
data:
  redirects:
    rules:
      - name: remove-trailing-slash
        when:
          allOf:
            - reqProperty: tier
              equals: publish
            - reqProperty: domain
              equals: www.example.com
            - reqProperty: originalPath
              matches: ^/(.+)/$
        action:
          type: redirect
          status: 301
          location:
            reqProperty: originalPath
            transform:
              - op: replace
                match: ^/(.+)/$
                replacement: https://www.example.com/\1
kind: "CDN"
version: "1"
data:
  requestTransformations:
    rules:
      - name: options-response
        when: { reqProperty: tier, equals: publish }
        actions:
        - type: set
          reqHeader: x-mycookie-info
          value:
            reqCookie: mycookie
            transform:
            - 'base64decode'
            - { op: 'replace', match: '"info":\s*"([^"]*)"', replacement: '\1'}

Cross Origin Setup cross-origin

Bedienen von OPTIONS-Anfragen vom CDN options-from-cdn

kind: "CDN"
version: "1"
data:
  requestTransformations:
    rules:
      - name: options-response
        when:
          allOf:
            - { reqProperty: path, like: /mypathi*  }
            - { reqProperty: method, equals: "OPTIONS" }
            - { reqHeader: Origin, equals: "https://example.com" }
        actions:
          - type: respond
            status: 200
            reason: "OK"
            headers:
              content-type: 'text/plain'
              access-control-allow-origin: { reqHeader: Origin }
              access-control-allow-methods: "*"
              access-control-allow-headers: "*"

Traffic-Filter traffic-filters

Ratenbegrenzungs-ASN rate-limit-asn

Problem: Bei den Ratenbeschränkungen pro IP kann ein verteiltes Denial-of-Service (DDoS)-Muster übersehen werden: Jede Adresse bleibt unter dem Schwellenwert, sodass legitimer und missbräuchlicher Traffic auf der IP-Ebene gleich aussieht.

Lösung: Anzahl der Anfragen nach autonomem Systemnamen (clientAsName), sodass der Begrenzer Hosts aggregiert, die denselben Netzwerknamen haben. Der Ausschnitt schreibt bei jeder Anfrage clientAsName in eine Protokolleigenschaft und wendet dann eine Ratenbeschränkung auf „author“ und „publish“ an, die nach diesem Wert gruppiert sind. Viele Benutzer können ein SAN gemeinsam nutzen (z. B. ein großer ISP oder ein VPN-Ausgang eines Unternehmens). Stimmen Sie daher die Grenzwerte sorgfältig ab und überwachen Sie die CDN-Protokolle auf falsch positive Ergebnisse.

kind: "CDN"
version: "1"
data:
  requestTransformations:
    rules:
      - name: log-on-request
        when: "*"
        actions:
          - type: set
            logProperty: client_as_name
            value:
              reqProperty: clientAsName
  trafficFilters:
    rules:
    - name: limit-requests-client-as-name
      when:
        reqProperty: tier
        matches: "author|publish"
      rateLimit:
        limit: 60
        window: 10
        penalty: 300
        count: all
        groupBy:
          - reqProperty: clientAsName
      action: block
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab