我有一个 GKE 集群,它使用 Nginx Ingress Controller 作为其入口引擎。目前,当我设置 Nginx Ingress Controller 时,我定义了一项服务kind: LoadBalancer
并将其指向先前在 GCP 上保留的外部静态 IP。问题是它只绑定到区域静态 IP 地址(如果我没记错的话,是 L4 负载均衡器)。我想要一个全局负载均衡器。
我知道我可以通过使用 GKE 入口控制器而不是 Nginx 入口控制器来实现这一点。但我仍然想使用 Nginx Ingress,因为它具有强大的注释功能,例如根据条件重写标头等;GKE Ingress 注释不可用的内容。
最后,有没有办法将全局负载均衡器与 nginx 入口控制器结合起来,或者将全局负载均衡器放在 Nginx 创建的 L4 负载均衡器前面?
我们需要有全局负载均衡器才能受到 Cloud Armor 的保护。
nginx google-kubernetes-engine nginx-ingress google-cloud-armor gke-networking
我们正在尝试阻止除基于此 Cloud Armor演练的一些外部 IP 地址之外的所有非集群流量。
GKE 集群识别了规则,但仍然阻止允许的 IP。以下是遵循的步骤:
1)创建策略+规则
gcloud beta compute security-policies create allow-team-only \
--description "Cloud Armor deny non-team IPs"
gcloud beta compute security-policies rules create 1000 \
--security-policy allow-team-only \
--description "Deny traffic from 0.0.0.0/0." \
--src-ip-ranges "0.0.0.0/0" \
--action "deny-404"
gcloud beta compute security-policies rules create 999 \
--security-policy allow-team-only \
--description "Allow traffic from <IP ADDRESS>." \
--src-ip-ranges "<IP ADDRESS>/32" \
--action "allow"
Run Code Online (Sandbox Code Playgroud)
2) 将规则应用到我们位于 8080 端口的服务
metadata:
annotations:
beta.cloud.google.com/backend-config: '{"ports": {"8080":"allow-team-only"}}'
Run Code Online (Sandbox Code Playgroud)
我在忽略什么?
谢谢!
google-cloud-platform google-kubernetes-engine google-cloud-networking google-cloud-armor
首先,我使用带有 gke 舵的 Nginx 入口控制器,并使用 ModSecurity 作为 waf。尽管如此,我正在研究一种新型的waf来显示预防的结果,云甲看起来就是我正在寻找的东西。不幸的是,它仅适用于 HTTP/HTTPS 负载均衡器,但我的 Nginx 入口外部负载均衡器是 TCP 负载均衡器。据我研究,我无法将此负载均衡器的协议 TCP 转换为 HTTP/HTTPS。
Run Code Online (Sandbox Code Playgroud)- First Question, Is this conversation possible and if it is possible, Can I use cloud armor on it.
其次,我尝试创建一个新的云负载均衡器来通过它路由流量。不幸的是,即使我可以在其上激活云装甲,路由也无法按我的预期工作,因为它无论如何都会返回 502,即使它的运行状况检查看起来还不错。
最后,我尝试将 BackendConfig 与 yaml 一起使用:
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
name: armor-backendconfig
spec:
securityPolicy:
name: "bla-armor"
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/backend-config: '{"ports": {"443":"bla-backendconfig"}}'
spec:
clusterIP: xx.xx.xx.xx
externalTrafficPolicy: Local
healthCheckNodePort: xxxxxxx
loadBalancerIP: xx.xx.xxxx.xx
ports:
- name: http
nodePort: 31000
port: 80 …
Run Code Online (Sandbox Code Playgroud) load-balancing gcloud kubernetes nginx-ingress google-cloud-armor
问题。我正在寻找一种敏捷的方式来将 docker 容器(存储在 GCR.IO 上)拍摄到 GCP 上的托管服务:
gcr.io/project/helloworld
带有私有数据的docker 容器(比如 Cloud SQL 后端)——无法面对现实世界。我的理想平台是 Cloud Run,但 GAE 也能工作。
我想以敏捷的方式进行开发(比如用 2-3 行代码部署),是否可以秘密地运行我的服务,但又超级容易?我们不是在谈论一个巨大的生产项目,而是在谈论玩弄和编写一个 POC,你想通过互联网安全地分享给几个朋友,确保世界其他地方得到 403。
到目前为止我尝试过的。
唯一容易工作的想法是带有 docker-friendly 操作系统(如 cos)的 GCE vm,我可以在其中设置防火墙规则。这有效,但它是一次性 VM 上的一个蹩脚的 docker 应用程序。除非我在 cron/startup 上稳定它,否则机器将永远运行并在重新启动时死亡。看起来我在做别人的工作。
到目前为止我尝试过的其他一切都失败了:
cloud google-app-engine google-cloud-platform google-cloud-armor google-cloud-run
我已经参考https://cloud.google.com/armor/docs/rules-language-reference设置了 Google Cloud Armor 安全策略。效果很好。我在办公室进行的模拟 SQL 注入攻击被检测到,后续访问被阻止。Stackdriver 日志条目显示“拒绝”的相应 enforcedSecurityPolicy 结果,并且应用的表达式 ID 为“owasp-crs-v030001-id942421-sqli”。WAF关键规则如下:
valuPreconfiguredExpr('xss-stable') &&valuPreconfiguredExpr('sqli-stable')
有一点是我无法控制的。在我的模拟攻击之后,我办公室的所有访问都被一路封锁。当我从 LB 中分离并重新附加 Cloud Armor 安全策略后,我办公室的访问仍然被阻止。删除该安全策略并重新创建它并没有帮助。这意味着存在一个看不见的 SQLi 和 XSS 攻击者持久数据库,并且我的办公室 IP 可能已在其中注册,从而导致“始终”拒绝。
问题是:如何从看不见的“SQLi 和 XSS 黑名单”数据库中删除我的 IP,以在不修改规则的情况下重新获得后端访问权限?在我们的Cloud Armor生产操作中,曾经被禁止的IP可能希望在攻击源被移除后重新获得对目标后端服务的访问。
当然,如果我添加比WAF规则更高优先级的权限规则,我可以重新获得对目标后端的访问权限,但WAF检查将被绕过,这不是我想要的。
预先感谢您抽出时间。
栗岛R
我想知道是否可以将 Cloud Armor 与 GAE Flex 一起使用?因为在Cloud Armor 的文档中,它说您必须使用HTTPS 负载均衡器。由于 GAE Flex 没有负载均衡器,我们如何将 Cloud Armor 与 GAE Flex 结合使用?我们必须使用 WAF 来防止 DDOS 攻击。是否可以通过 HTTPS 负载均衡器将 Cloud Armor 与 GAE Flex 一起使用?如果是这样,你能解释一下我如何实现这个目标吗?
谢谢你。
google-app-engine google-cloud-platform google-cloud-armor google-cloud-load-balancer
https://www.terraform.io/docs/providers/google/r/compute_security_policy.html
规则嵌入在 google_compute_security_policy 资源中
并且 Cloud Armor 有一个愚蠢的限制,在一个规则中最多只允许 5 个 IP - 我有大约 15 个 IP 我想列入白名单
我希望这是动态的,而不必手动将它们分成 3 个在 google_compute_security_policy 中静态定义的规则
我想要一个包含所有 15 个 IP 的列表的 terraform var。然后遍历该 var 并创建 15 条规则并应用于 google_compute_security_policy 资源。
这样的事情可能吗?
google-cloud-platform terraform terraform-provider-gcp google-cloud-armor
我正在尝试按照有关配置 Cloud Armor 的文档进行操作,但在尝试应用它来创建 BackendConfig 时出现此错误。为什么我收到这个错误?很明显,他们是说应该有一个后端配置的 api 配置类型。
no matches for kind “BackendConfig” in version “cloud.google.com/v1”
google-cloud-platform google-kubernetes-engine google-cloud-armor
我可以使用以下规则阻止谷歌云装甲中的多个国家/地区。
origin.region_code == "RU" || origin.region_code == "UA"
但它认为该规则有 2 个表达式,因此每条规则只能阻止 5 个国家/地区,并且必须添加其他规则来阻止其他国家/地区。
有没有一种方法(例如 in_origin_regioncode)可以在单个表达式中提供我想要阻止的所有国家/地区的逗号分隔列表?
引用https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless#enabling
虽然可以使用 Cloud Run(全托管)、Cloud Functions 和 App Engine 后端为后端服务配置 Google Cloud Armor,但此功能存在某些限制,尤其是 Cloud Run(全托管)和 App Engine。有权访问由 Google Cloud 分配给这些服务的默认网址的用户可以绕过负载均衡器并直接转到服务网址,从而绕过任何已配置的 Google Cloud Armor 安全政策。
避免针对 Cloud Run URL ( *.run.app
)的攻击者绕过 Cloud Armor 的最佳方法是什么?
通常我会让 Cloud Run 只能由服务帐户调用,但 Cloud Load Balancer 不能使用服务帐户调用 Cloud Run。另一种方法是将 Cloud Load Balancer 配置为在标头中使用令牌,并将在 Cloud Run 中运行的应用程序配置为仅接受具有正确标头/令牌的调用,但我不想在应用程序中这样做。
google-cloud-platform google-cloud-armor google-cloud-load-balancer google-cloud-run
我正在使用 Cloud Armor 部署 WAF,我意识到可以在“仅预览”模式下创建规则,并且 Cloud Logging 中有 Cloud Armor 条目。
问题是,当我创建“仅预览”规则并且该规则与某些请求匹配时,我无法在日志中区分与某些特定规则匹配的请求和/或正常的普通请求。它们看起来几乎都一样。
在这些情况下,是否有任何日志记录属性仅在请求与特定规则匹配时才存在(或具有特定值)?因为我发现显式检查某些请求匹配的规则的唯一方法是取消选中“仅预览”标志,并且在测试时这对于生产来说并不好。
google-cloud-platform google-cloud-logging web-application-firewall google-cloud-armor