# Autenticação Segura no GCP ## ⚠️ NUNCA FAÇA ISSO ```json ❌ 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!** ```bash # Abrir: https://shell.cloud.google.com/ # Já está autenticado automaticamente gcloud compute instances list ``` ### 2. gcloud auth login (Desenvolvimento Local) ```bash # 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) ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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: ```yaml # .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 ```bash # 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 ```bash # 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! ```bash # 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!**