Google Cloud Functions 上的细粒度权限?

Google Cloud Functions 上的细粒度权限?

我有一个 HTML 触发的云函数,其权限设置为 allUsers:

功能

当我访问触发地址的函数时,它正确返回了一个 HTML 页面,但在相关样式表上给出了一个 Forbidden 错误:

html

错误

我没有看到任何关于如何在云函数中配置单个文件夹权限的文档。Python 运行时使用的 Flask 服务器将所有静态资源放在 css、img 和 js 文件夹中,/static而不是单独的 css、img 和 js 文件夹中 - 我没有尝试将 Flask 配置到其他地方,因为默认位置失败没有任何非魔法原因。

笔记:App Engine 有一个 app.yaml 配置文件(https://cloud.google.com/appengine/docs/standard/python3/serving-static-files),但我没有看到任何与 Cloud Functions 等效的功能。

有没有线索可以避免 Google 实施 Flask 时出现的权限错误?

答案1

权限错误是由 Cloud Functions Python 运行时的异常引起的 - URL 中缺少云函数名称。在 HTML 触发器处访问的页面

http://<region-project>.cloudfunctions.net/function-1/home

包含链接

/static/style.css

似乎有一个文档根目录位于...cloudfunctions.net/,而不是...cloudfunctions.net/function1/

Python请求的网址...cloudfunctions.net/home不正确...cloudfunctions.net/function-1/home请求路径/home代码是否在 Cloud Functions 上运行。

一种解决方法是手动修补所有引用云函数的 URL,以便FUNCTION_NAME在从模板呈现页面时添加环境变量:

def getenv(name, default):
    try:
        return os.environ[name]
    except KeyError:
        return default

def _url(request, path):       # Patch URLs to include FUNCTION_NAME if running on GCP
    f = getenv('FUNCTION_NAME', '')
    return request.url + (f + '/' if f else '') + path

这样,页面将从 Cloud Functions 正确显示,且不会导致权限错误:

在此处输入图片描述

相关内容