次の設定で GKE アプリケーションを使用しています。
- フロントアプリの動作
example.com
- バックエンドアプリが動作
api.example.com
Ingress を介してこれらの負荷を公開すると、すべてがクールに見えます。Cloud Armor でアプリケーションを保護したい。サービスにアノテーションを追加しapi
ました。ポリシーに「すべての IP を拒否する」ルールが 1 つしかない場合、バックエンド エンドポイントに到達できず、ルールを「すべての IP を許可する」に変更すると到達できることを確認できます。したがって、GCA 自体は問題なく動作します。
reCaptcha Enterprise を接続して、そのスコアを Google Cloud Armor で解釈しようとしましたが、うまくいきません。次のルールを作成しましたが、追加した値token.recaptcha.score
がまったく解釈されないようです。
したがって、提示された例では、ルールを "> 0.1" のように途方もなく小さくしても、常にブロックされます。フロントX-Recaptcha-Token
はバックエンドに送信するので、すべてを正しく行ったように見えます。
私が確信していないのは、この許可ルールが正しく定義されているかどうかだけです。GCP Logging はポリシーが適用されたことを示していますが、正確にはどのルールかわかりません:
{
"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
ルールが機能しないことを意味します。
また、reCaptcha キーは、ドキュメントに従ってGoogle に電子メールで送信することで有効になっています。