Tengo un proyecto que usa el depósito predeterminado en Firebase Admin.
tengo la siguiente linea:
const [url] = await blob.getSignedUrl({ action: 'read', expires: Date.now() + 60 * 1000, contentType: mimetype })Cuando se llama a mi función HTTPS invocable, la línea de arriba arroja el siguiente error:
Unhandled error Error: The caller does not have permission at Gaxios._request (/workspace/node_modules/gaxios/build/src/gaxios.js:129:23) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async Compute.requestAsync (/workspace/node_modules/google-auth-library/build/src/auth/oauth2client.js:368:18) at async GoogleAuth.signBlob (/workspace/node_modules/google-auth-library/build/src/auth/googleauth.js:655:21) at async sign (/workspace/node_modules/@google-cloud/storage/build/src/signer.js:97:35) { name: 'SigningError' }¿Que estoy haciendo mal?
Ya hay un problema abierto de GitHub sobre esto. Si esto es exactamente lo que está buscando, puede pasar por la solución que figura en el problema de GitHub, que es:
Vaya a Cloud Console > IAM & admin > IAM , busque la App Engine default service account y agregue la función Service Account Token Creator a ese miembro. Esto permitirá que su aplicación cree direcciones URL públicas firmadas para las imágenes.
Si no funcionó para usted, intente actualizar los roles de IAM. Desde el archivo firebaseSA.json, busque si el correo electrónico asociado tiene estos roles:
Firebase Admin SDK Administrator ,Service Agent, Service Account Token Creator ,Pub/Sub Publisher, Storage AdminSi aún no te funcionó, intenta ejecutar tu aplicación con otra cuenta de servicio que tenga todos los permisos posibles de almacenamiento en la nube, ¿funciona? En caso afirmativo, significaría que su Servicio actual requiere permisos adicionales para ejecutar la función. Puede verificar qué permisos otorgar en los roles de IAM de almacenamiento en la nube