Om toegang te gee aan die Github Aksies van 'n Github-opberging na 'n GCP diensrekening, is die volgende stappe nodig:
Skep die Diensrekening om vanaf github aksies toegang te verkry met die gewenste toestemmings:
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"
Genereer 'n nuwe werkbelasting-identiteitspoel:
# Create a Workload Identity PoolpoolName=wi-poolgcloudiamworkload-identity-poolscreate $poolName \--location global \--display-name $poolNamepoolId=$(gcloudiamworkload-identity-poolsdescribe $poolName \--location global \--format='get(name)')
Genereer 'n nuwe workload identity pool OIDC-verskaffer wat vertroue in github-aksies (deur org/repo-naam in hierdie scenario):
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)')
Uiteindelik, laat die hoofgebruiker van die verskaffer toe om 'n diensprinsipaal te gebruik:
Let daarop hoe ons in die vorige lid die org-name/repo-name spesifiseer as voorwaardes om toegang tot die diensrekening te verkry (ander parameters wat dit beperkender maak, soos die tak, kan ook gebruik word).
Dit is egter ook moontlik om alle github-toegang toe te laat tot die diensrekening deur 'n verskaffer soos die volgende te skep deur gebruik te maak van 'n wild card:
# Skep 'n Werklas-identiteitspoelpoolName=wi-pool2gcloudiamworkload-identity-poolscreate $poolName \--location global \--display-name $poolNamepoolId=$(gcloudiamworkload-identity-poolsdescribe $poolName \--location global \--format='get(name)')gcloudiamworkload-identity-poolsproviderscreate-oidc $poolName \--project="${projectId}" \--location="global" \--workload-identity-pool="$poolName" \--display-name="Demo verskaffer" \--attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.aud=assertion.aud" \--issuer-uri="https://token.actions.githubusercontent.com"providerId=$(gcloudiamworkload-identity-poolsprovidersdescribe $poolName \--location global \--workload-identity-pool $poolName \--format='get(name)')# KONTROLEER DIE WILDCARDgcloudiamservice-accountsadd-iam-policy-binding"${saId}" \--project="${projectId}" \--role="roles/iam.workloadIdentityUser" \--member="principalSet://iam.googleapis.com/${poolId}/*"
In hierdie geval kan enigiemand toegang tot die diensrekening vanaf github-aksies verkry, dus is dit belangrik om altyd te kontroleer hoe die lid gedefinieer is.
Dit moet altyd iets soos hierdie wees: