| # 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!** | |