0

Je reçois une erreur: API error 7 (images: ACCESS_DENIED)Comment puis-je donner mon Google Cloud App Accès moteur à mon seau Firebase stockage

Normalement j'aurais l'application Firebase associée à mon Google App service du moteur, mais depuis Firestore n'est pas compatible avec App Engine, je dois créer des instances distinctes du service. Cependant, maintenant j'ai besoin de mon service d'image de moteur d'application pour pouvoir référencer les dossiers dans le dossier de stockage de nuage de Firebase. Comment puis-je configurer l'accès? Aurais-je besoin de créer un IAM partagé entre les deux services?

Exemple de ma fonction go app-moteur faisant référence à la benne de stockage firebase the-other-firebase-app

func photoHandler(w http.ResponseWriter, r *http.Request) { 

    c := appengine.NewContext(r) 
    v := r.URL.Query() 
    fileName := v.Get("file") 
    if (fileName == "") { 
     fmt.Fprint(w, "file name is required") 
    } else { 
     filename := "/gs/the-other-firebase-app.appspot.com/photos/" + fileName; 
     blobKey,err := blobstore.BlobKeyForFile(c, filename) 
     if (err == nil) { 
      url, urlErr := image.ServingURL(c, blobKey, nil) 
      if (urlErr == nil) { 
       fmt.Fprint(w, url) 
      } else { 
       fmt.Fprint(w, urlErr) 
      } 
     } else { 
      fmt.Fprint(w, "image does not exist") 
     } 
    } 
} 

Répondre

1

Si votre application est env standard d'un il devrait déjà avoir un compte de service, voir Using service accounts:

The App Engine application runs using the identity of the App Engine default service account. You can see this account on the IAM page in the Cloud Platform Console.

Si votre application est un moteur flexible, voir Service Account for the App Engine Flexible Environment:

When you enable the Google App Engine flexible environment API, a specific service account is automatically created. You can view your project's service accounts in the IAM section of the Cloud Platform Console . The email for the App Engine flexible environment service account is service-[PROJECT-NUMBER]@gae-api-prod.google.com.iam.gserviceaccount.com , where [PROJECT-NUMBER] is the project number listed in the IAM settings .

Dans le projet de l'application Firebase, vous devez ajouter le compte de service de l'application GAE en tant que membre de l'équipe et lui accorder les autorisations nécessaires.

Comme mentionné dans le commentaire:

Firebase Dasbhoard -> Project Settings Cog -> Users and permissions – MonkeyBonkey

potentiellement d'intérêt pourrait aussi être Integrate with Google Cloud Platform.

+0

le lien pour ajouter les membres du projet est un tableau de bord de Google Cloud et non la tableau de bord firebase - comment manipuler les permissions du projet firebase - Je ne vois rien dans le tableau de bord Firebase pour ajouter des membres du projet. – MonkeyBonkey

+0

Oh je le vois maintenant, je peux aller sur le Firebase Dasbhoard -> Paramètres du projet Cog -> Utilisateurs et autorisations – MonkeyBonkey

0

J'ai eu un problème similaire, mais le message d'erreur exact jeté était:

_"[email protected] does not have storage.objects.get access to storage_file_path_here>"_

Je l'ai fixé grâce aux suggestions de eltonnobrega sur Github: https://github.com/firebase/functions-samples/issues/299

Voici un résumé:

  1. Accédez à Google Cloud Console et sélectionnez le projet dans lequel se trouve votre compartiment de stockage: le compartiment auquel vous souhaitez accéder à partir de votre ser vice-compte.
  2. Accédez à l'onglet Stockage
  3. Dans l'onglet du navigateur, vous devriez voir les compartiments de stockage dans ce projet. Chacun aura une icône Options à la fin de ligne droite (trois points verticaux)
  4. De ces options choisissez Modifier Bucket autorisations
  5. De là, vous pouvez ajouter des membres. Ajoutez votre compte de service ([email protected]) et lui donner le rôle Object Storage Admin

enter image description here