Bir Github deposundan GCP hizmet hesabına Github Actions'a erişim vermek için aşağıdaki adımlar gereklidir:
İstenen izinlere sahip Github Actions'a erişmek için bir Hizmet Hesabı oluşturun:
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"
Yeni bir iş yükü kimlik havuzu oluşturun:
# Create a Workload Identity PoolpoolName=wi-poolgcloudiamworkload-identity-poolscreate $poolName \--location global \--display-name $poolNamepoolId=$(gcloudiamworkload-identity-poolsdescribe $poolName \--location global \--format='get(name)')
Yeni bir iş yükü kimlik havuzu OIDC sağlayıcısı oluşturun ve bu durumda github eylemlerine (org/repo adına göre) güvenin:
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)')
Son olarak, sağlayıcıdan hizmet sağlayıcısının kullanmasına izin verin:
Önceki üyede, servis hesabına erişmek için org-adı/repo-adı'yı koşullar olarak belirttiğimize dikkat edin (daha kısıtlayıcı olan şube gibi diğer parametreler de kullanılabilir).
Ancak, bir joker karakter kullanarak tüm github'ın servis hesabına erişmesine izin vermek de mümkündür. Aşağıdaki gibi bir sağlayıcı oluşturarak bunu yapabilirsiniz:
# Bir İş Yükü Kimlik Havuzu OluşturunpoolName=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 sağlayıcısı" \--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)')# JOKER KARAKTERİ KONTROL EDİNgcloudiamservice-accountsadd-iam-policy-binding"${saId}" \--project="${projectId}" \--role="roles/iam.workloadIdentityUser" \--member="principalSet://iam.googleapis.com/${poolId}/*"
Bu durumda, herhangi biri github actions üzerinden servis hesabına erişebilir, bu yüzden üyenin nasıl tanımlandığını her zaman kontrol etmek önemlidir.
Her zaman şuna benzer bir şey olmalıdır: