Da biste omogućili pristup Github akcijama iz Github repozitorijuma GCP servisnom nalogu, potrebno je izvršiti sledeće korake:
Kreirajte servisni nalog za pristup iz Github akcija sa željenim dozvolama:
projectId=FIXMEgcloudconfigsetproject $projectId# Create the Service Accountgcloudiamservice-accountscreate"github-demo-sa"saId="github-demo-sa@${projectId}.iam.gserviceaccount.com"# Enable the IAM Credentials APIgcloudservicesenableiamcredentials.googleapis.com# Give permissions to SAgcloudprojectsadd-iam-policy-binding $projectId \--member="serviceAccount:$saId" \--role="roles/iam.securityReviewer"
Generišite novi bazen identiteta radnog opterećenja:
# Create a Workload Identity PoolpoolName=wi-poolgcloudiamworkload-identity-poolscreate $poolName \--location global \--display-name $poolNamepoolId=$(gcloudiamworkload-identity-poolsdescribe $poolName \--location global \--format='get(name)')
Generišite novog provajdera workload identity pool OIDC koji veruje github akcijama (po imenu organizacije/repozitorijuma u ovom scenariju):
attributeMappingScope=repository # could be sub (GitHub repository and branch) or repository_owner (GitHub organization)
gcloudiamworkload-identity-poolsproviderscreate-oidc $poolName \--location global \--workload-identity-pool $poolName \--display-name $poolName \--attribute-mapping "google.subject=assertion.${attributeMappingScope},attribute.actor=assertion.actor,attribute.aud=assertion.aud,attribute.repository=assertion.repository" \
--issuer-uri "https://token.actions.githubusercontent.com"providerId=$(gcloudiamworkload-identity-poolsprovidersdescribe $poolName \--location global \--workload-identity-pool $poolName \--format='get(name)')
Na kraju, omogućite glavnog subjekta od provajdera da koristi servisnog glavnog subjekta:
Primetite kako u prethodnom primeru specificiramo org-name/repo-name kao uslove za pristup servisnom nalogu (drugi parametri koji ga čine restriktivnijim, kao što je grana, takođe mogu biti korišćeni).
Međutim, takođe je moguće omogućiti pristup svim github korisnicima servisnom nalogu tako što ćemo kreirati provajdera koristeći zamenski znak (*):
U ovom slučaju bilo ko može pristupiti servisnom nalogu putem github akcija, stoga je važno uvek proveriti kako je definisan član.
Uvek bi trebalo da bude nešto poput ovoga: