Fala, pessoal da comunidade! 👋
Um dos maiores riscos de segurança em ambientes de nuvem é o uso de chaves estáticas de Service Accounts (arquivos .json) salvas em segredos do GitHub, GitLab ou Bitbucket. Se uma chave dessas vaza, o estrago pode ser grande.
Para resolver isso de forma elegante e segura, a boa prática recomendada no Google Cloud é usar o Workload Identity Federation (WIF). Com ele, seu pipeline se autentica no GCP usando tokens temporários de curta duração, respeitando o Princípio do Menor Privilégio (IAM).
Montei este guia prático de como configurar essa arquitetura de forma segura.
🏗️ Como Funciona a Arquitetura
Em vez de salvar uma senha/chave fixa no seu CI/CD:
O repositório (ex: GitHub) gera um token OpenID Connect (OIDC).
O GCP valida esse token através do Workload Identity Pool.
O GCP concede um acesso temporário à Service Account vinculada, permitindo apenas as ações estritamente necessárias.
💻 Passo 1: Configurando o GCP (Infraestrutura / IAM)
Você pode rodar os comandos no seu Cloud Shell (lembre-se de substituir SEU_PROJECT_ID e SEU_REPOSITORIO):
Bash
# 1. Definir variáveis de ambiente
export PROJECT_ID="SEU_PROJECT_ID"
export REPO="usuario/meu-repositorio" # Exemplo: gdg-br/app-exemplo
# 2. Criar a Service Account exclusiva para o Pipeline
gcloud iam service-accounts create sa-github-actions \
--display-name="SA para GitHub Actions CI/CD"
# 3. Aplicar o Princípio do Menor Privilégio (exemplo: deploy no Cloud Run)
# Conceda APENAS as roles necessárias, NUNCA roles/editor ou roles/owner!
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:sa-github-actions@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.developer"
# 4. Criar o Workload Identity Pool
gcloud iam workload-identity-pools create "github-pool" \
--location="global" \
--display-name="GitHub Actions Pool"
# 5. Criar o Provider de Autenticação OIDC
gcloud iam workload-identity-pools providers create-oidc "github-provider" \
--location="global" \
--workload-identity-pool="github-pool" \
--display-name="GitHub Provider" \
--attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository" \
--issuer-uri="https://token.actions.githubusercontent.com"
# 6. Permitir que APENAS o seu repositório específico assuma a Service Account
gcloud iam service-accounts add-iam-policy-binding \
"sa-github-actions@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/iam.workloadIdentityUser" \
--member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/github-pool/attribute.repository/${REPO}"
⚙️ Passo 2: Configurando o Pipeline no GitHub Actions
No seu repositório, adicione as permissões de id-token e use a Action oficial do Google para realizar a autenticação:
YAML
name: Deploy Seguro para GCP
on:
push:
branches:
- main
# OBRIGATÓRIO: Permite que o GitHub gere o token OIDC
permissions:
contents: read
id-token: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout do código
uses: actions/checkout@v4
# Autenticação Segura via Workload Identity Federation
- id: auth
name: Autenticar no Google Cloud
uses: google-github-actions/auth@v2
with:
workload_identity_provider: 'projects/1234567890/locations/global/workloadIdentityPools/github-pool/providers/github-provider'
service_account: 'sa-github-actions@SEU_PROJECT_ID.iam.gserviceaccount.com'
# Exemplo de passo utilizando a CLI do gcloud autenticada
- name: Testar Conexão com GCP
run: |
gcloud run services list
🔒 Dicas de Otimização e Segurança (Checklist)
🎯 Apenas as permissões necessárias: Troque a permissão
roles/run.developerpela role exata da sua ferramenta (GKE, App Engine, Cloud Storage, etc.).🛑 Restrição por Branch: Se quiser limitar ainda mais, você pode configurar o
attribute-mappingno GCP para aceitar apenas envios vindo da branchmain.🔑 Zero Chaves Baixadas: Nenhuma chave
.jsonprecisou ser gerada ou salva nos Secrets do GitHub!
Espero que esse modelo ajude quem está buscando melhorar a postura de segurança dos seus pipelines! Se alguém tiver dúvidas sobre como ajustar as regras de IAM para outros serviços, manda aqui nos comentários! 🚀
#GoogleCloud #DevOps #Security #IAM #GDG #GitHubActions