问题描述
我在同一个 Google 项目中有多个 App Engine 服务。我希望为某些服务启用 IAP 而不是其他服务(在同一项目中),但是,我知道这是不可能的。对于我理想情况下不希望启用 IAP 的服务,我不想通过授予 allUser
IAP-secured Web App User
角色来向整个 Internet 开放它。我仍然希望对谁可以访问资源进行某种 IP 限制。但是,Google 在文档 (https://cloud.google.com/iap/docs/managing-access) 中明确表示,
目前,授予公共访问权限的绑定不能具有与其关联的条件。例如,如果请求路径以 /public/ 开头,则允许任何人访问资源的策略无效。
此应用的用户将是外部客户,因此我不希望经历向他们提供服务帐户和凭据文件并与他们共享代码以生成 OIDC 令牌的过程。
解决方法
我有一个额外的解决方法。您可以在所需的服务上激活 IAP。对于其他人,你可以这样做
- 创建全局 HTTPS 负载平衡器
- 对于您不希望通过 IAP 保护但使用 IP 过滤的每个 App Engine 服务
- 授予
allUser
IAP-secured Web App User
- 在负载均衡器上创建后端服务
- 创建一个 backend of type serverless Network Endpoint Group 将您的 App Engine 服务附加到它
- 创建一个 Cloud Armor policy 来过滤请求的 IP 源并将其添加到您的后端。您可以重复使用相同的策略或为每个后端(因此每个 App Engine 服务)创建一个新策略
- 授予
您一直在寻找的解决方案open public issue已经有一段时间了,所以我必须设定您对此功能的期望。
但是,此 thread 中讨论了一种解决方法,您应该拆分您的服务并将其部署到单独的项目中,然后从那里使用防火墙规则(或启用 IAP)。