marcosremar
✅ GCP Spot Instance Test Completed Successfully
0e1ff69

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:

  1. GitHub → Settings → Secrets → New secret
  2. Name: GCP_CREDENTIALS
  3. Value: Conteúdo do key.json
  4. 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!