我想将Java App Engine Standard应用程序升级到App Engine Flexible,我想知道什么是保护某些URL的最佳解决方案(例如/ admin /*)。
在Standard中,我在web.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>
如the upgrade notes中所述:
现在不赞成在App Engine中使用处理程序下的安全设置 灵活的环境。
用来自AIM的用户和角色来保护URL的最佳解决方案是什么,那么使用我已经在此处定义的权限呢?
答案 0 :(得分:0)
我认为Cloud Identity-Aware代理(IAP)[1]将是您的理想解决方案:
使用云身份识别代理(Cloud IAP),您可以管理对在App Engine标准环境, App Engine灵活环境,Compute Engine和Kubernetes Engine中运行的应用程序的访问。 Cloud IAP为HTTPS访问的应用程序建立了中央授权层,因此您可以采用应用程序级访问控制模型,而不必使用网络级防火墙。
检查此页面以管理用户访问权限[2]:
本页描述了如何在资源级别上管理对受Cloud Identity-Aware代理(Cloud IAP)保护的资源的个人或组访问。
答案 1 :(得分:0)
您可以使用projects.testIamPermissions来检查用户当前拥有的权限,并从那里拒绝/允许访问。例如:
test_iam_permissions_request_body = {
"permissions": [
"resourcemanager.projects.get"
]
}
如果用户具有权限,则
将返回resourcemanager.projects.get
;否则,将返回空。这样,您仍然可以使用IAM中定义的用户/角色来允许访问。
答案 2 :(得分:0)
不幸的是,仅通过配置已不再可能。如您在documentation
中所见“请注意,由于无法使用Users服务,因此无法使用app.yaml来使URL仅可由管理员访问。您将需要在应用程序中处理此逻辑。”
您将需要使用应用程序代码来处理此问题(检查经过身份验证的用户,然后允许或拒绝其访问)。