Благодаря @AhmetB - ответ Google и @whlee, у меня все заработало. В принципе, достаточно добавить в запрос токен носителя авторизации, который можно получить из специальной конечной точки: https://cloud.google.com/run/docs/authenticating/service-to-service#nodejs
Затем вам просто нужно добавить служебную учетную запись функции в список IAM контейнера Cloud Run: @ appspot.gserviceaccount.com
В примере nodejs используется устаревшая библиотека запросов, поэтому вот моя версия с использованием ax ios:
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(...);