Bir Github reposundan GCP hizmet hesabınaGithub Actions erişimi vermek için aşağıdaki adımlar gereklidir:
İstenilen izinlerle github actions'dan erişim sağlamak için 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 workload identity pool OIDC sağlayıcısı oluşturun ki bu güvenilir github actions (bu senaryoda org/repo adı ile):
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 yetkilendirilmiş kişiye bir hizmet yetkilisi kullanma izni verin:
Önceki üyede org-name/repo-name belirterek hizmet hesabına erişim sağlamak için koşullar belirttiğimize dikkat edin (daha kısıtlayıcı hale getiren diğer parametreler, örneğin dal da kullanılabilir).
Ancak, bir wildcard kullanarak hizmet hesabına tüm github'ın erişmesine izin vermek de mümkündür:
# Bir Workload Identity Pool oluşturpoolName=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 provider" \--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)')# WILDCARD'I KONTROL ETgcloudiamservice-accountsadd-iam-policy-binding"${saId}" \--project="${projectId}" \--role="roles/iam.workloadIdentityUser" \--member="principalSet://iam.googleapis.com/${poolId}/*"
Bu durumda, herkes github actions üzerinden hizmet hesabına erişebilir, bu yüzden her zaman üyenin nasıl tanımlandığını kontrol etmek önemlidir.
Her zaman şöyle bir şey olmalıdır:
${providerId} ve ${saId} değerlerini ilgili değerleriyle değiştirmeyi unutmayın:
name:Check GCP actionon:workflow_dispatch:pull_request:branches:- mainpermissions:id-token:writejobs:Get_OIDC_ID_token:runs-on:ubuntu-lateststeps:- id:'auth'name:'Authenticate to GCP'uses:'google-github-actions/auth@v2.1.3'with:create_credentials_file:'true'workload_identity_provider:'${providerId}'# In the providerId, the numerical project ID (12 digit number) should be usedservice_account:'${saId}'# instead of the alphanumeric project ID. ex:activate_credentials_file:true# projects/123123123123/locations/global/workloadIdentityPools/iam-lab-7-gh-pool/providers/iam-lab-7-gh-pool-oidc-provider'- id:'gcloud'name:'gcloud'run:|-gcloud config set project <project-id>gcloud config set account '${saId}'gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"gcloud auth listgcloud projects listgcloud secrets list