如何使 Google Cloud Armor 解释 recaptcha 分数
how to make Google Cloud Armor interpret recaptcha score
我在以下设置中有 GKE 应用程序:
- 前端应用适用于
example.com
- 后端应用在
api.example.com
上运行
我通过 Ingress 公开了这些负载,一切看起来都很酷。我想用 Cloud Armor 保护应用程序。我向 api
服务添加了注释。我可以确认,如果策略只有一个规则“拒绝所有 IP”,我将无法到达后端端点,如果我将规则更改为“允许所有 IP”,我可以。所以GCA本身工作正常。
我尝试连接 reCaptcha Enterprise 并用 Google Cloud Armor 解释它的分数,但我无法让它工作。我创建了以下规则,但我添加的任何值 token.recaptcha.score
似乎根本没有被解释。
所以在给出的示例中,即使我将规则设置得非常小,如“> 0.1”,我也总是会被阻止。前端发送 X-Recaptcha-Token
到后端所以看起来我做的一切都是正确的。
我唯一不确定的是是否正确定义了此允许规则。 GCP 日志显示已应用策略,但我不知道具体是哪条规则:
{
"insertId": "uxxxv",
"jsonPayload": {
"enforcedSecurityPolicy": {
"outcome": "DENY",
"configuredAction": "DENY",
"priority": 2147483647,
"name": "login-security-policy"
},
"@type": "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry",
"statusDetails": "denied_by_security_policy"
},
"httpRequest": {
"requestMethod": "OPTIONS",
"requestUrl": "https://api.example.com/v1/graphs?pageSize=10&orderBy=created_at%20desc&key=AXXXXXXE",
"requestSize": "330",
"status": 403,
"responseSize": "228",
"userAgent": "XXX",
"remoteIp": "XX.XX.XX.XX",
"referer": "https://example.com/",
"latency": "0.220009s"
},
"resource": {
"type": "http_load_balancer",
"labels": {
"zone": "global",
"target_proxy_name": "k8s2-ts-dxxxd-default-main-ixxxq",
"backend_service_name": "k8s-be-3xxx9--9xxx9",
"forwarding_rule_name": "k8s2-fs-dxxxd-default-main-ixxxq",
"project_id": "xxx",
"url_map_name": "k8s2-um-dxxxd-default-main-ixxxq"
}
},
"timestamp": "2021-12-21T12:22:28.505728Z",
"severity": "WARNING",
"logName": "projects/xxx/logs/requests",
"trace": "projects/xxx/traces/bxxx4",
"receiveTimestamp": "2021-12-21T12:22:28.925285233Z",
"spanId": "cxxx4"
}
我假设字段 jsonPayload.enforcedSecurityPolicy.priority
指向默认规则,这意味着 Allow
规则不起作用。
还通过电子邮件 Google according to documentation.
启用了 reCaptcha 密钥
进入默认规则的 HTTP 方法是 OPTIONS。 CORS 经常使用 OPTIONS 方法,因此您通常希望这些请求能够通过。
添加一条规则,允许基于 request.method == 'OPTIONS'.
的 HTTP 方法选项
或将现有规则修改为仅检查方法是否为 GET、PUT、POST(指定验证 reCaptcha 所需的方法)。
我在以下设置中有 GKE 应用程序:
- 前端应用适用于
example.com
- 后端应用在
api.example.com
上运行
我通过 Ingress 公开了这些负载,一切看起来都很酷。我想用 Cloud Armor 保护应用程序。我向 api
服务添加了注释。我可以确认,如果策略只有一个规则“拒绝所有 IP”,我将无法到达后端端点,如果我将规则更改为“允许所有 IP”,我可以。所以GCA本身工作正常。
我尝试连接 reCaptcha Enterprise 并用 Google Cloud Armor 解释它的分数,但我无法让它工作。我创建了以下规则,但我添加的任何值 token.recaptcha.score
似乎根本没有被解释。
所以在给出的示例中,即使我将规则设置得非常小,如“> 0.1”,我也总是会被阻止。前端发送 X-Recaptcha-Token
到后端所以看起来我做的一切都是正确的。
我唯一不确定的是是否正确定义了此允许规则。 GCP 日志显示已应用策略,但我不知道具体是哪条规则:
{
"insertId": "uxxxv",
"jsonPayload": {
"enforcedSecurityPolicy": {
"outcome": "DENY",
"configuredAction": "DENY",
"priority": 2147483647,
"name": "login-security-policy"
},
"@type": "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry",
"statusDetails": "denied_by_security_policy"
},
"httpRequest": {
"requestMethod": "OPTIONS",
"requestUrl": "https://api.example.com/v1/graphs?pageSize=10&orderBy=created_at%20desc&key=AXXXXXXE",
"requestSize": "330",
"status": 403,
"responseSize": "228",
"userAgent": "XXX",
"remoteIp": "XX.XX.XX.XX",
"referer": "https://example.com/",
"latency": "0.220009s"
},
"resource": {
"type": "http_load_balancer",
"labels": {
"zone": "global",
"target_proxy_name": "k8s2-ts-dxxxd-default-main-ixxxq",
"backend_service_name": "k8s-be-3xxx9--9xxx9",
"forwarding_rule_name": "k8s2-fs-dxxxd-default-main-ixxxq",
"project_id": "xxx",
"url_map_name": "k8s2-um-dxxxd-default-main-ixxxq"
}
},
"timestamp": "2021-12-21T12:22:28.505728Z",
"severity": "WARNING",
"logName": "projects/xxx/logs/requests",
"trace": "projects/xxx/traces/bxxx4",
"receiveTimestamp": "2021-12-21T12:22:28.925285233Z",
"spanId": "cxxx4"
}
我假设字段 jsonPayload.enforcedSecurityPolicy.priority
指向默认规则,这意味着 Allow
规则不起作用。
还通过电子邮件 Google according to documentation.
启用了 reCaptcha 密钥进入默认规则的 HTTP 方法是 OPTIONS。 CORS 经常使用 OPTIONS 方法,因此您通常希望这些请求能够通过。
添加一条规则,允许基于 request.method == 'OPTIONS'.
的 HTTP 方法选项或将现有规则修改为仅检查方法是否为 GET、PUT、POST(指定验证 reCaptcha 所需的方法)。