Cloud Armor-Sicherheitsrichtlinien erstellen und ansehen

Auf dieser Seite wird beschrieben, wie Sie Google Cloud Armor-Sicherheitsrichtlinien erstellen können, um eingehenden Traffic zu Ihrer Anwendung zu filtern. Informationen zu Konzepten für Sicherheitsrichtlinien finden Sie in der Übersicht über Cloud Armor-Sicherheitsrichtlinien.

Hinweis

Führen Sie vor dem Konfigurieren von Sicherheitsrichtlinien folgende Schritte aus:

  • Machen Sie sich mit den Konzepten des externen Application Load Balancers vertraut.

  • Prüfen Sie Ihre vorhandenen Backend-Dienste, um festzustellen, ob jeweils eine Sicherheitsrichtlinie angehängt ist. Diese Backend-Dienste und die zugehörigen Backends sind nicht geschützt. Um Cloud Armor-Schutz hinzuzufügen, hängen Sie eine neue oder vorhandene Sicherheitsrichtlinie an den Back-End-Dienst an.

IAM-Berechtigungen für Cloud Armor-Sicherheitsrichtlinien einrichten

Für die folgenden Vorgänge ist Identity and Access Management-Rolle „Compute Security Admin“ (roles/compute.securityAdmin) erforderlich:

  • Cloud Armor-Sicherheitsrichtlinie konfigurieren, ändern, aktualisieren und löschen
  • Mit den folgenden API-Methoden:
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Ein Nutzer mit der Rolle „Compute Network Admin“ (roles/compute.networkAdmin) kann die folgenden Vorgänge ausführen:

  • Cloud Armor-Sicherheitsrichtlinie für einen Backend-Dienst einrichten
  • Mit den folgenden API-Methoden:
    • BackendServices setSecurityPolicy
    • BackendServices list (nur gcloud)

Nutzer mit der Rolle „Security Admin“ (roles/iam.securityAdmin) und der Rolle „Compute Network Admin“ (roles/compute.networkAdmin) können sich Cloud Armor-Sicherheitsrichtlinien mithilfe der SecurityPolicies-API-Methoden get, list und getRule ansehen.

IAM-Berechtigungen für benutzerdefinierte Rollen einrichten

In der folgenden Tabelle sind die grundlegenden Berechtigungen der IAM-Rollen, die zugehörigen API-Methoden und die Rollen aufgeführt, die diese Berechtigung gewähren.

IAM-Berechtigung API-Methoden Rollen
compute.securityPolicies.create SecurityPolicies insert Compute-Sicherheitsadministrator (roles/compute.securityAdmin)
compute.securityPolicies.delete SecurityPolicies delete Compute-Sicherheitsadministrator (roles/compute.securityAdmin)
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
Sicherheitsadministrator (roles/iam.securityAdmin)
compute.securityPolicies.list SecurityPolicies list Sicherheitsadministrator (roles/iam.securityAdmin)
Beide der folgenden Bedingungen:
  • compute.securityPolicies.use
  • compute.backendServices.
    setSecurityPolicy
BackendServices
setSecurityPolicy
Compute-Netzwerkadministrator (roles/compute.networkAdmin)
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Compute-Sicherheitsadministrator (roles/compute.securityAdmin)

Sicherheitsrichtlinien erstellen

Sie können Sicherheitsrichtlinien, Regeln und Ausdrücke für Cloud Armor mithilfe der Google Cloud Console, der Google Cloud CLI oder der REST API konfigurieren. Wenn Sie das gcloud CLI verwenden, geben Sie mit dem Flag --type an, ob die Sicherheitsrichtlinie eine Backend-Sicherheitsrichtlinie oder eine Edge-Sicherheitsrichtlinie ist.

Wenn Sie mit der Konfiguration von Sicherheitsrichtlinien nicht vertraut sind, empfehlen wir Ihnen, sich Beispiele für Sicherheitsrichtlinien anzusehen.

Beispielausdrücke

Im Folgenden finden Sie Beispielausdrücke. Weitere Informationen finden Sie in der Referenz zur Sprache der benutzerdefinierten Regeln für Cloud Armor.

Wenn in Ihrer Regel oder Ihrem Ausdruck Länder- oder Regionscodes im Format ISO 3166-1 alpha-2 verwendet werden, behandelt Cloud Armor jeden Code unabhängig. Die Regeln und Ausdrücke von Cloud Armor verwenden diese Codes, um Anfragen zuzulassen oder abzulehnen.

  • Der folgende Ausdruck stimmt mit Anfragen von der IP-Adresse 1.2.3.4 überein, die den String example im User-Agent-Header enthalten:

    inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
    

    Alternativ können Sie den IP-Adressbereich eines benutzerdefinierten Client-IP-Adressheaders mit dem Attribut origin.user_ip abgleichen:

    inIpRange(origin.user_ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
    
  • Der folgende Ausdruck stimmt mit Anfragen überein, die ein Cookie mit einem bestimmten Wert enthalten:

    has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
    
  • Der folgende Ausdruck stimmt mit Anfragen aus der Region AU überein:

    origin.region_code == 'AU'
    
  • Der folgende Ausdruck stimmt mit Anfragen aus der Region AU überein, die nicht im angegebenen IP-Bereich liegen:

    origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
    
  • Der folgende Ausdruck stimmt mit Anfragen mit einem nummerierten Variablenpfad zu einer bestimmten Datei überein, falls der URI mit einem regulären Ausdruck übereinstimmt:

    request.path.matches('/path/[0-9]+/target_file.html')
    
  • Der folgende Ausdruck stimmt mit Anfragen überein, wenn der Base64-decodierte Wert des Headers user-id einen bestimmten Wert enthält:

    has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
    
  • Der folgende Ausdruck verwendet einen vorkonfigurierten Ausdruckssatzabgleich gegen SQLi-Angriffe:

    evaluatePreconfiguredWaf('sqli-stable')
    

Path Traversal und Normalisierung

Normalisieren Sie Inhalte in Ihren pfadbasierten Regeln, um Regeln für Path Traversal und die Codierung zu verwalten und allgemeine Regeln zu erstellen, die Groß- und Kleinschreibung oder inhaltsbezogene Codierung vermeiden.

Wenn Sie Regeln schreiben, die startsWith, endsWith oder contains verwenden, um request.path abzugleichen, verwenden Sie lower und urlDecode, um den Pfad vor dem Abgleich zu normalisieren. So lassen sich Umgehungen verhindern, bei denen URL-Codierung oder Groß-/Kleinschreibung verwendet wird.

Wenn Sie beispielsweise den Zugriff auf das Verzeichnis /admin blockieren möchten, verwenden Sie den folgenden Ausdruck:

request.path.lower().urlDecode().startsWith('/admin')

Mit dieser Regel werden Anfragen für /admin, /Admin, /a%64min und andere Varianten blockiert.

Wenn Sie Regeln schreiben, in denen matches verwendet wird, um request.path abzugleichen, müssen Sie den umgekehrten Schrägstrich (\) in Ihrem regulären Ausdruck berücksichtigen.

Wenn Sie beispielsweise den Zugriff auf das Verzeichnis /admin blockieren möchten, verwenden Sie den folgenden Ausdruck, um Umgehungen zu blockieren, bei denen der Backslash (\) verwendet wird:

request.path.matches(r'^/\\*admin')

Kombinieren Sie dies mit urlDecode, um sowohl die URL-Codierung als auch die Umgehung des Backslash-Zeichens (\) zu berücksichtigen:

request.path.urlDecode().matches(r'^/\\*admin')

Nächste Schritte