Ik heb een serviceaccount nodig dat toegang heeft tot meerdere projecten, maar ik heb geen manier kunnen vinden om dit te doen. Het lijkt erop dat een serviceaccount altijd aan een project is gebonden.
Een andere optie is om een serviceaccount aan te maken voor de afzonderlijke projecten en ze vervolgens te authenticeren met behulp van gcloud auth activate-service-account --key-file SOME_FILE.json
, maar het probleem hier is dat het lijkt niet mogelijk om het aanmaken van serviceaccounts te automatiseren.
Dus de vraag is dan: is het mogelijk om een serviceaccount voor meerdere projecten aan te maken of om het aanmaken van een serviceaccount te automatiseren? Nog beter zou zijn als ik beide kon doen
Antwoord 1, autoriteit 100%
U zou een serviceaccount aan een ander project moeten kunnen toevoegen:
-
Maak het eerste serviceaccount in project A in de Cloud Console. Activeer het met
gcloud auth activate-service-account
. -
Navigeer in de Cloud Console naar project B. Zoek de “IAM & admin” > “IAM” pagina. Klik op de knop “Toevoegen”. Plak in het veld “Nieuwe leden” de naam van het serviceaccount (het zou eruit moeten zien als een vreemd e-mailadres) en geef het de juiste rol.
-
Voer
gcloud
-opdrachten uit met--project
ingesteld op project B. Ze zouden moeten slagen (ik heb zojuist handmatig geverifieerd dat dit werkt).
Het automatisch aanmaken van serviceaccounts is iets dat we aarzelen om te doen totdat we alle beveiligingsproblemen kunnen oplossen.
Antwoord 2, autoriteit 36%
Ik weet dat het een beetje oud is, maar als iemand hier nog steeds naar op zoek is, om toe te voegen aan het antwoord van @Zachary Newman, om dingen duidelijk te maken, nadat je een serviceaccount hebt gemaakt in project A, moet je naar project B gaan naar “IAM ” (niet “Serviceaccounts”), daar kunt u het e-mailadres toevoegen dat u zojuist hebt gemaakt met de juiste rollen.
Antwoord 3, autoriteit 4%
Ik heb bevestigd dat aangepaste token-ondertekening werkte met de procedure van @Zachary Newman.
Mijn concrete procedure voor het maken van een aangepaste token in een GAE-app in project A die kan worden gebruikt om verbinding te maken met Firestore van project B is als volgt:
- Voeg op de “IAM”-pagina van project B het serviceaccount
{project-a}@appspot.gserviceaccount.com
toe. Dit is een standaard GAE-serviceaccount van project A. - Wijs op de “IAM”-pagina van project B de rol “Service Account Token Creator” toe aan
{project-a}@appspot.gserviceaccount.com
. - Bel de Firebase Admin SDK
initializeApp
-methode in een GAE-app in project A met vermelding vanfirebase-adminsdk-xxxxx@{project-b}.iam.gserviceaccount.com
, wat een serviceaccount is met “Firebase Admin SDK Administrator Service Agent” in project B, alsserviceAccountId
enhttps://{project-b}.firebaseio.com
alsdatabaseURL
en maak vervolgens een aangepaste token.