我想将我的Java App Engine Standard应用程序升级到App Engine Flexible,我想知道保护某些URL(例如/admin/*(的最佳解决方案是什么。
在 Web 中使用的标准 I 中.xml限制用户从 AIM (https://console.cloud.google.com/iam-admin/iam( 访问某些路径:
<security-constraint>
<web-resource-collection>
<web-resource-name>users</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
如升级说明中所述:
App Engine 中"处理程序"下的安全设置现已弃用 灵活的环境。
使用AIM中的用户和角色保护URL的最佳解决方案是什么,因此我已经在那里定义了权限?
我认为云身份感知代理(IAP([1]对您来说是一个很好的解决方案:
CloudIdentity-Aware Proxy (Cloud IAP( 可让您管理对在 App Engine 标准环境、App Engine 灵活环境、Compute Engine 和 Kubernetes Engine 中运行的应用程序的访问。云IAP为HTTPS访问的应用建立了中央授权层,因此您可以采用应用级访问控制模型,而不是使用网络级防火墙。
查看此页面以管理用户访问权限 [2]:
本页介绍如何在资源级别管理个人或组对受云身份感知代理 (Cloud IAP( 保护的资源的访问权限。
您可以使用 projects.testIamPermissions 来检查用户当前拥有的权限,并拒绝/允许从那里访问。例如:
test_iam_permissions_request_body = {
"permissions": [
"resourcemanager.projects.get"
]
}
如果用户具有该权限,则返回resourcemanager.projects.get
,如果没有,则返回空。这样,您仍然可以使用 IAM 中定义的用户/角色来允许访问。
不幸的是,仅通过配置不再可能。正如您在文档中看到的
"请注意,由于用户服务不可用,因此无法使用 app.yaml 使 URL 只能由管理员访问。您需要在应用程序中处理此逻辑。
您需要使用应用程序代码处理此问题(检查经过身份验证的用户,然后允许或拒绝其访问(。