问题描述
我们在App Engine标准Python 2.7中有一个应用程序。我们在这个项目中也有一个Cloud Function。
我们想对App Engine应用程序中的资源之一进行HTTP POST请求。当前,我们在Cloud Functions中具有以下代码
url = "https://project-name.appspot.com/urlidentifier"
data_obj = {
'sample' : 'data'
}
data_json = json.dumps(data_obj)
data_encode = urllib.parse.urlencode(data_json).encode("utf-8")
req = request.Request(url,data=data_encode) # this will make the method "POST"
resp = request.urlopen(req)
Python 2.7中的应用程序使用Firebase用户身份验证进行身份验证。有关详细信息,请参见here。
我们的问题-由Cloud Function(而非用户)启动HTTP POST时,我们如何强制对应用程序资源进行身份验证。应用程序资源(https://project-name.appspot.com/urlidentifier)是项目中的功能。我们可以使用服务帐户吗?如果是,我们该怎么做?
Cloud Function和应用程序都属于同一个项目。
解决方法
您可以通过该功能的现有service identity进行身份验证,请参阅:
https://cloud.google.com/run/docs/authenticating/service-to-service
(此文档适用于Cloud Run,但适用于Cloud Functions的模式相同。您需要将App Engine调用者角色赋予该功能的服务帐户)。