{
 "subtemas": [],
 "tarjetas": [
  {
   "sub": "IAM y seguridad",
   "q": "Anatomía de una IAM policy binding",
   "a": "bindings: [{role: roles/run.invoker, members: [serviceAccount:sa@p.iam..., group:equipo@x.com, user:ana@x.com]}]\nAplica sobre un recurso (proyecto, bucket, servicio) y SE HEREDA hacia abajo.\nAuditoría: getIamPolicy; modificar con etag (optimistic concurrency).\nDeny policies (nuevo): reglas explícitas de denegación que SIEMPRE ganan sobre allow.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Roles predefinidos más usados que debes reconocer",
   "a": "roles/viewer, roles/editor, roles/owner (básicos — evitar en prod).\nPor servicio: roles/run.invoker (invocar), roles/run.admin, roles/storage.objectViewer/objectAdmin, roles/cloudsql.client, roles/secretmanager.secretAccessor, roles/pubsub.publisher/subscriber, roles/logging.logWriter.\nElije el mínimo que cumpla la tarea.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Custom roles: cuándo valen la pena",
   "a": "Cuando un predefinido es muy amplio y necesitas solo un subconjunto: roles/custom.verOnlyRun = compute.instances.get + list...\nLímite 300 custom por org; mantenerlos documentados y revisados.\nAlternativa moderna: reusar predefinidos pequeños en vez de crear custom por equipo (gobernanza más simple).",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "IAM Conditions: permisos temporales o por recurso",
   "a": "Condición CEL en el binding: resource.name.startsWith(\"projects/_/buckets/logs-prod\"), request.time < timestamp(\"2025-12-31T00:00:00Z\") (acceso temporal automático).\nCasos: acceso solo a un bucket, contractor con fecha de expiración, entornos por sufijo de nombre.\nOjo: condiciones solo en algunos niveles (proyecto y recursos que soportan conditions).",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Workload Identity Federation: autenticar CI/CD SIN claves",
   "a": "GitHub Actions/Azure/Okta asume una identidad externa → intercambio por token GCP temporal vía provider (pool + provider con mapping de claims).\nCero JSON keys descargadas, sin rotación manual, audit trail.\nConfig: gcloud iam workload-identity-pools create + add-azure/github provider + bind SA con roles/iam.workloadIdentityUser.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Service Account Hierarchy: user-managed vs default SAs",
   "a": "Default SAs (compute@..., run-invoker): permisos amplios (editor) — riesgo.\nPráctica: una SA POR SERVICIO con permisos mínimos (api-sa@proj.iam), attach al deploy, y deshabilitar/restringir default SAs vía org policy.\nNomenclatura: nombre corto + entorno (pedidos-prod@...).",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "actAs y impersonation: delegar sin dar tus permisos",
   "a": "roles/iam.serviceAccountTokenCreator sobre una SA permite GENERAR tokens como ella (gcloud auth impersonate-credentials, SDK Option.withCredentials).\nHumanos con acceso a CLI operan 'como' la SA sin conocer sus claves.\nTodo queda auditado como el token impersonado + el actor.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Cloud KMS y CMEK: claves de cifrado propias",
   "a": "Por default Google cifra at-rest con claves de Google (Google-managed).\nCMEK: TU keyring/clave en Cloud KMS protege Cloud SQL, GCS, BigQuery, Pub/Sub, disks... — se puede deshabilitar la clave y los datos quedan inaccesibles (kill switch).\nRotación programada; HSM protection level para compliance alto.\nCosto por clave + versión.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "VPC Service Controls: el perímetro anti-exfiltración",
   "a": "Perímetro lógico alrededor de servicios (GCS, BigQuery, Secret Manager...): solo tráfico desde proyectos/redes del perímetro.\nBloquea copiar data a un bucket externo aunque IAM lo permita.\nDry-run primero (audit) para no romper, luego enforce.\nConcepto clave para compliance de datos sensibles.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Cloud Armor: WAF y anti-DDoS en el edge",
   "a": "Security policies adjuntas al backend service del LB: reglas preconfiguradas (XSS, SQLi, LFI), rate-based bans (N req/min por IP), geo-restricciones, allow/deny/redirect.\nAdaptive Protection (ML) contra ataques volumétricos L3/L4 en Cloud Armor Enterprise.\nReglas en yaml/terraform versionadas.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Identity-Aware Proxy (IAP): acceso administrativo sin VPN",
   "a": "IAP delante de apps internas/admin: el usuario pasa por Google login y el LB inyecta el header X-Goog-Authenticated-User — solo members con roles/iap.httpsResourceAccessor pasan.\nPara SSH/RDP a VMs: IAP Desktop Tunneling sin IP externa ni bastión.\nZero-trust interno: identidad por request.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Security Command Center: el dashboard de seguridad",
   "a": "SCC: inventario y hallazgos (findings) de vulnerabilidades (VM vulnerable, bucket público, SA con clave vieja), threat detection (anomalías), posture management (compliance CIS).\nIntegración con Pub/Sub para automatizar remediación.\nStandard vs Premium/Enterprise (más detectores y SIA).",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Audit logs: qué registra GCP por ti",
   "a": "Admin Activity (siempre, quién creó/modificó qué) + Data Access (lecturas de datos, opt-in por servicio) + System Event + Policy Denied.\nExportar a BigQuery para búsquedas tipo 'quién descargó el bucket X en marzo'.\nRetención default 400 días (admin), configurable a más con bucket lock.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Claves de Service Account: por qué evitarlas y qué hacer si son inevitables",
   "a": "Riesgo: credencial larga que puede filtrarse (git, image, laptop), rotación manual, sin origen.\nAlternativas: ADC/workload attached SA (GCP), Workload Identity Federation (externos), impersonation (CLI).\nSi inevitable: org policy permite bloquear creación, Secret Manager para guardar, rotación <90 días, scope mínimo, detección de uso (SCC anomaly).",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Binary Authorization: solo imágenes firmadas se despliegan",
   "a": "Policy que exige attestations (firma del pipeline de CI) antes de permitir deploy en GKE/Cloud Run.\nChainguard/Sigstore cosign para firmar; provenance de Cloud Build como attestor.\nBloquea supply chain attacks (imagen 'cualquiera' en producción).\nDry-run mode para calibrar sin romper.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "IAM y seguridad",
   "q": "Cloud Data Loss Prevention (Sensitive Data Protection): para qué sirve",
   "a": "Detectar y clasificar PII en texto/imagenes/tablas: emails, tarjetas, DNI, nombres.\nDe-identify: masking, tokenización, hashing (format-preserving).\nCasos: escanear buckets/BigQuery en busca de datos sensibles expuestos, anonimizar logs antes de guardar, minimizar datos en analítica.\nAPI por contenido o job scan programado.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "VPC global vs subredes regionales: entendiendo el modelo GCP",
   "a": "Una VPC es GLOBAL (abarca todas las regiones); las SUBREDES son regionales con CIDR propio.\nDentro de la VPC, tráfico inter-región viaja por el backbone de Google (cifrado en tránsito).\nComparado con AWS (VPC por región): menos piezas para conectar multi-región.\nAuto-mode VPC crea subredes default — para prod usa custom mode.",
   "nivel": "avanzado",
   "clave": true
  },
  {
   "sub": "Redes",
   "q": "Firewall rules: campos y orden de evaluación",
   "a": "Reglas stateful: direction (ingress/egress), source/dest (CIDR, tags, service accounts), protocolo/puerto, action allow/deny, PRIORITY (0-65535, MENOR gana), disabled.\nDefault: deny all ingress, allow all egress.\nTargeting por tags de red o por service account (más preciso).\nLogs de firewall activables por regla.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Cloud NAT: por qué casi todo backend lo necesita",
   "a": "VMs/GKE con SOLO IP privada necesitan salir a internet (actualizar paquetes, llamar APIs externas): Cloud NAT provee egress NAT gestionado (IPs estáticas de salida).\nBeneficios: sin IPs públicas (superficie de ataque), IP fija para allowlists del tercero.\nSe asocia por router/subred; ports por VM ajustables para muchas conexiones.",
   "nivel": "avanzado",
   "clave": true
  },
  {
   "sub": "Redes",
   "q": "Shared VPC vs VPC Peering: cuándo cada uno",
   "a": "Shared VPC: UNA red central administrada por el equipo de plataforma (host project) donde los proyectos de servicio despliegan sin tocar red — control centralizado estricto.\nPeering: conecta VPCs independientes 1:1 (transitividad NO incluida) — equipos autónomos.\nEnterprise: Shared VPC para prod; peering para integraciones puntuales.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Cloud Load Balancing: mapa de tipos",
   "a": "Global externo: HTTPS LB (L7, anycast, Cloud Armor/CDN), SSL Proxy/TCP Proxy (L4 no-HTTP), External passthrough Network LB (UDP/TCP directo).\nRegional: internal HTTP(S), internal passthrough (entre servicios de la VPC).\nServerless NEG: LB delante de Cloud Run/Functions con dominio propio.\nComponentes: forwarding rule → target proxy → URL map → backend service → NEG/MIG.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Health checks del LB: por qué tu 200 vale menos de lo crees",
   "a": "El health check del backend service determina si la instancia recibe tráfico — debe chequear un endpoint REAL (ping a DB ligero ok, pero pesado = cascada de reinicios).\nFirewall: permitir 35.191.0.0/16 y 130.211.0.0/22 (rangos del LB).\nPeligro: health check que depende de una dependencia lenta → app sana marcada DOWN → outage por diseño.",
   "nivel": "avanzado",
   "clave": true
  },
  {
   "sub": "Redes",
   "q": "Cloud DNS y dominios: gestión básica",
   "a": "Zones públicas (tu dominio) y privadas (nombres internos svc.internal → IPs privadas).\nDNS peering/forwarding para resolver hacia on-prem u otras VPCs.\nDNSSEC activable; TTL bajo (60s) antes de migraciones.\nRouting policies: geolocation/failover — DNS como primer nivel de DR.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Cloud Interconnect vs Cloud VPN: conectividad híbrida",
   "a": "VPN (HA VPN): túneles IPsec sobre internet — días de setup, costo bajo, 99.99% con 2 interfaces; para inicio de híbrido.\nDedicated/Partner Interconnect: circuito físico privado (10/100Gbps o partner) — latencia estable, más caro, para workloads serios.\nRouter Cloud (BGP) intercambia rutas en ambos.\nPatrón: empezar VPN, migrar a Interconnect al crecer.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Network tiers y egress: cómo se cobra la salida de datos",
   "a": "Premium tier: sale por backbone de Google (óptimo global).\nStandard tier: sale por ISP regional — más barato, latencia variable.\nEgress es el costo invisible que crece: streaming de archivos/videos a usuarios lejanos = dinero.\nCDN + caché reduce egress drásticamente; medir en Billing por SKU.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Private Google Access y Private Service Connect: APIs sin internet",
   "a": "PGA: subred con ruta a 'private.googleapis.com' → las apps llaman APIs de Google (GCS, Secret Manager) por IP PRIVADA sin NAT ni internet.\nPSC: endpoints privados para servicios específicos (incluye terceros en Marketplace y tu propio servicio detrás de un LB interno).\nEstricto zero-internet: ambos + Cloud NAT solo si es indispensable.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Serverless VPC Access connector: puente Cloud Run → VPC",
   "a": "El connector (red por región, rango /28) permite que Cloud Run/Functions alcancen recursos de VPC privada: VMs, Memorystore, Cloud SQL con IP interna.\nCosto por instancia del connector + throughput; dimensionar (2-10 instancias min/max según tráfico).\nDirect VPC egress (nuevo, mejor): sin connector, salida directa por subred.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Redes",
   "q": "Packet Mirroring y Flow Logs: depuración de red",
   "a": "VPC Flow Logs: metadatos de conexiones (5-tuple, bytes, aceptado/denegado) exportables a BigQuery — responder '¿quién habla con quién y cuánto?'.\nFirewall rules logging: qué regla bloqueó qué.\nPacket Mirroring: copia completa de paquetes a un collector (IDS/IPS como Suricata) para análisis profundo.\nAnte 'no conecta': flow logs primero, mirroring después.",
   "nivel": "avanzado",
   "clave": false
  }
 ]
}