Autenticação Segura no GCP
⚠️ NUNCA FAÇA ISSO
❌ Compartilhar service account key publicamente
❌ Commitar credentials no git
❌ Enviar private key por mensagem/email
❌ Incluir em código fonte
✅ FORMAS SEGURAS
1. Cloud Shell (Melhor para Testes)
Não precisa de credenciais!
# Abrir: https://shell.cloud.google.com/
# Já está autenticado automaticamente
gcloud compute instances list
2. gcloud auth login (Desenvolvimento Local)
# Instalar gcloud
curl https://sdk.cloud.google.com | bash
# Login interativo (OAuth)
gcloud auth login
# Configurar projeto
gcloud config set project SEU_PROJECT_ID
# Usar normalmente
bash scripts/test/launch_gcp_spot.sh
3. Application Default Credentials (ADC)
# Para desenvolvimento local
gcloud auth application-default login
# Código Python automaticamente usa ADC
python scripts/test/launch_gcp_python.py
4. Service Account (Apenas CI/CD)
SOMENTE se realmente necessário para automação
Passo 1: Criar Service Account com Permissões Mínimas
# Console: https://console.cloud.google.com/iam-admin/serviceaccounts
# Criar service account
gcloud iam service-accounts create ensemble-test \
--display-name="Ensemble Testing (Limited)"
# Dar permissão APENAS para criar instâncias
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:ensemble-test@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.instanceAdmin.v1"
Passo 2: Criar Key e Proteger
# Criar key
gcloud iam service-accounts keys create key.json \
--iam-account=ensemble-test@PROJECT_ID.iam.gserviceaccount.com
# PROTEGER o arquivo
chmod 600 key.json
# NUNCA commitar no git
echo "key.json" >> .gitignore
echo "*.json" >> .gitignore
Passo 3: Usar via Variável de Ambiente
# Exportar (apenas na sua máquina local)
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
# Usar no código
python scripts/test/launch_gcp_python.py
Passo 4: DELETAR quando não precisar mais
# Listar keys
gcloud iam service-accounts keys list \
--iam-account=ensemble-test@PROJECT_ID.iam.gserviceaccount.com
# Deletar key
gcloud iam service-accounts keys delete KEY_ID \
--iam-account=ensemble-test@PROJECT_ID.iam.gserviceaccount.com
5. GitHub Actions / CI/CD
Para CI/CD, use GitHub Secrets:
# .github/workflows/test.yml
name: GCP Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Authenticate to GCP
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
- name: Run test
run: |
bash scripts/test/launch_gcp_spot.sh
Configurar secret:
- GitHub → Settings → Secrets → New secret
- Name:
GCP_CREDENTIALS - Value: Conteúdo do key.json
- NUNCA fazer commit do key.json
🔐 Checklist de Segurança
Antes de usar credenciais:
- Estou usando Cloud Shell? (Melhor opção)
- Estou usando
gcloud auth login? (Ótima opção) - Estou usando ADC? (Boa opção)
- Realmente preciso de service account? (Apenas CI/CD)
- Key tem permissões mínimas? (Principle of least privilege)
- Key está no .gitignore? (Nunca commitar)
- Key tem permissions 600? (chmod 600)
- Vou deletar a key depois? (Cleanup)
🚨 Se Você Expôs uma Chave
1. Revogar IMEDIATAMENTE
# Via gcloud
gcloud iam service-accounts keys delete KEY_ID \
--iam-account=SERVICE_ACCOUNT_EMAIL
# Via console
https://console.cloud.google.com/iam-admin/serviceaccounts
→ Selecionar SA → Keys → Delete
2. Verificar Uso Não Autorizado
# Ver logs de audit
gcloud logging read \
"protoPayload.authenticationInfo.principalEmail=SERVICE_ACCOUNT_EMAIL" \
--limit 50 \
--format json
3. Criar Nova Chave (se necessário)
Seguir passos seguros acima
4. Notificar Time de Segurança
Se for empresa/organização
💡 Recomendação Final
Para seu caso (teste do ensemble):
Use Cloud Shell ou gcloud auth login
Não precisa de service account!
# Opção mais simples e segura:
# 1. https://shell.cloud.google.com/
# 2. curl -O https://.../launch_gcp_spot.sh
# 3. chmod +x launch_gcp_spot.sh
# 4. ./launch_gcp_spot.sh
Zero configuração de credenciais necessária!