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 insertSecurityPolicies deleteSecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies 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 setSecurityPolicyBackendServices list(nurgcloud)
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 getSecurityPolicies getRule |
Sicherheitsadministrator (roles/iam.securityAdmin) |
compute.securityPolicies.list |
SecurityPolicies list |
Sicherheitsadministrator (roles/iam.securityAdmin) |
Beide der folgenden Bedingungen:
|
BackendServices |
Compute-Netzwerkadministrator (roles/compute.networkAdmin) |
compute.securityPolicies.update |
SecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies 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 StringexampleimUser-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_ipabgleichen: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-ideinen 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
- WAP-Regeln (Web Application Firewall) abstimmen
- Fehlerbehebung
- Referenz der Sprache für benutzerdefinierte Regeln verwenden
- Sicherheitsrichtlinien verwalten