我已经通过Google Cloud Run部署了一个小的HTTP端点。关闭身份验证后,它可以正常工作。
我现在想打开它,以便只能由我的Firebase Cloud Function调用。如果我理解正确,则只需在Cloud Run的IAM设置中将正确的服务帐户邮件地址添加为“ Cloud Run Invoke”。 但是哪个地址是正确的地址?
我已经尝试过在Firebase控制台->项目设置->服务帐户中找到的所有地址。
答案 0 :(得分:4)
我认为您可以检查特定的Firebase功能。在用户界面中,应列出使用的服务帐户。
默认情况下,GCF功能全部使用
答案 1 :(得分:0)
感谢@AhmetB-Google和@whlee的回答使它正常运行。基本上,向请求添加一个授权承载令牌就足够了,您可以从一个特殊的端点上获得该令牌:https://cloud.google.com/run/docs/authenticating/service-to-service#nodejs
然后,您只需将功能的服务帐户添加到Cloud Run容器的IAM列表中:
nodejs示例正在使用不建议使用的请求库,所以这是我使用axios的版本:
const getOAuthToken = async (receivingServiceURL: string): Promise<string> => {
// Set up metadata server request
const metadataServerTokenURL = 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=';
const uri = metadataServerTokenURL + receivingServiceURL;
const options = {
headers: {
'Metadata-Flavor': 'Google'
}
};
return axios.get(uri, options)
.then((res) => res.data)
.catch((error) => Promise.reject(error));
}
然后,您可以在实际请求中使用令牌:
const url = `...`;
const token = await getOAuthToken(url);
axios.post(url, formData, {
headers: {
Authorization: `Bearer ${token}`,
}
}).then(...).catch(...);