Abaixo está um passo-a-passo completo para configurar o GitHub Actions para usar o Workload Identity Federation (WIF) com o Google Cloud Platform (GCP) sem usar chaves longas de conta de serviço.
1) Configurar GCP (Workload Identity Federation)
a) Habilitar APIs necessárias
No seu projeto GCP, habilite pelo menos:
gcloud services enable iamcredentials.googleapis.com sts.googleapis.comIsto permite que o GCP aceite tokens federados e os troque por credenciais temporárias. (GitHub)
b) Criar um Workload Identity Pool
Um Workload Identity Pool é o container que permite confiar em identidades externas (como GitHub).
gcloud iam workload-identity-pools create github-pool \
--project=$PROJECT_ID \
--location="global" \
--display-name="Pool para GitHub Actions"Guarde o POOL_ID retornado. (Google Cloud)
c) Criar um Workload Identity Provider (OIDC)
Este provider diz ao GCP para confiar no OIDC do GitHub Actions.
gcloud iam workload-identity-pools providers create-oidc github-provider \
--project=$PROJECT_ID \
--location=global \
--workload-identity-pool=github-pool \
--display-name="GitHub Actions OIDC Provider" \
--issuer-uri="https://token.actions.githubusercontent.com" \
--attribute-mapping="google.subject=assertion.sub,attribute.repository=assertion.repository,attribute.repository_owner=assertion.repository_owner" \
--attribute-condition="attribute.repository=='minha-org/minha-repo'"Esse mapeamento cria atributos que permitem condições de segurança posteriores (ex.: restringir por repo). (Google Cloud)
d) Criar uma Conta de Serviço no GCP
Crie a conta de serviço que o GitHub Actions vai “impersonar”:
gcloud iam service-accounts create github-actions-sa \
--project=$PROJECT_ID \
--display-name="Service Account para GitHub Actions"e) Conceder Permissões para a Federação
Permita que o Workload Identity Pool impersonifique essa conta de serviço:
gcloud iam service-accounts add-iam-policy-binding github-actions-sa@${PROJECT_ID}.iam.gserviceaccount.com \
--project=$PROJECT_ID \
--role="roles/iam.workloadIdentityUser" \
--member="principalSet://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/github-pool/attribute.repository/${GITHUB_ORG}/${GITHUB_REPO}"Aqui:
PROJECT_NUMBERé o número do projeto GCP (não é o ID).${GITHUB_ORG}e${GITHUB_REPO}restringem o uso apenas ao repositório específico (melhora segurança). (firefly.ai)workloadIdentityPools/github-pool→ Nome do Workload Identity Pool (github-pool) criado previamente
f) Conceder Permissões à Conta de Serviço
Agora dê à conta de serviço os papéis necessários para acessar os recursos (por exemplo, Pub/Sub, Storage etc.):
gcloud projects add-iam-policy-binding $PROJECT_ID \
--role="roles/storage.admin" \
--member="serviceAccount:github-actions-sa@${PROJECT_ID}.iam.gserviceaccount.com"Ajuste o papel conforme sua necessidade.
2) Configurar o GitHub Actions
No repositório GitHub, crie ou edite seu workflow YAML:
name: Deploy no GCP
on:
push:
branches: ["main"]
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write # necessário para OIDC
steps:
- uses: actions/checkout@v4
- id: auth
uses: google-github-actions/auth@v3
with:
workload_identity_provider: "projects/${{ secrets.GCP_PROJECT_NUMBER }}/locations/global/workloadIdentityPools/github-pool/providers/github-provider"
service_account: "github-actions-sa@${{ secrets.GCP_PROJECT_ID }}.iam.gserviceaccount.com"
- name: Configura gcloud
uses: google-github-actions/setup-gcloud@v1
with:
project_id: ${{ secrets.GCP_PROJECT_ID }}
install_components: "beta"
- name: Exemplo comando GCP
run: |
gcloud config set project ${{ secrets.GCP_PROJECT_ID }}
gcloud storage buckets listImportante no workflow:
permissions → id-token: writeé obrigatório para permitir ao GitHub gerar um token OIDC.- O passo
google-github-actions/authtrocará o token OIDC por credenciais GCP temporárias. (GitHub)
3) Considerações de Segurança
- Evite expor chaves longas de contas de serviço no GitHub (WIF elimina essa necessidade). (Google Cloud)
- Use attribute mapping e condições para restringir acesso por repositório/branch.
- A conta de serviço deve ter apenas as permissões mínimas necessárias.
4) Resumo de como funciona a autenticação
- GitHub Actions solicita um token OIDC para a execução do workflow.
- GCP verifica esse token via o Workload Identity Provider.
- Se válido, GCP emite credenciais temporárias ligadas à conta de serviço.
- Ações subsequentes (ex.: gcloud) usam essas credenciais. (Google Cloud)