Сергій передав повний security & cost audit GCP. VPS Claude не має gcloud встановленого → ці дії виконуються вручну через Cloud Console, або після інсталяції gcloud на VPS — автоматизуємо.
Передісторія: 14 квітня 2026 Antigravity вже робив повний аудит 22 GCP-проектів. Тоді знайдено DeltaProject з ключем 2018 (8 років без restrictions) + 9 «zombie» проектів. Прийнято рішення: НЕ видаляти, а Disable key / Disable Billing (session 2026-04-14, рядок 80).
Перевірив кожен проект з нинішнього аудиту проти VPS-side evidence: код, cron, systemd-сервіси, wiki, recent traffic.
| Проєкт | Liveness | Evidence | Дія |
|---|---|---|---|
ad-analytics-hub |
🟢 ALIVE prod | daily_delta_monitor cron (04:30 UTC) + Google Ads OAuth + App Engine app | IAM downgrade SA, ротація JSON-key, fix BQ Data Transfer |
menopace-project |
🟢 ALIVE prod | gemini-sandbox.key споживається arteggia-bot.service (active 6 days) + legal-advisor + case-builder. ❓ але ключ названий «Med detective» у Menopace = topology mismatch |
IP restriction → 31.131.26.203 на gemini_sandbox ключ. Прояснити «Med detective» ключ. |
Med detective (окремий project per wiki) |
🟢 ALIVE prod | med-detective.service + med-detective-menopace.service обидва active. У нинішньому аудиті НЕ з'явився як проблемний — мабуть restrictions вже стоять. |
Verify status у Console |
biogaia-storybook-dm1 (Firebase Hosting) |
🟢 ALIVE prod, ВЖЕ ЗАХИЩЕНИЙ | .firebaserc показує цей project як прод Story Maker. Antigravity 14.04: «✅ Виправлено: BioGaia Storybook (HTTP referrer додано)». У новому аудиті відсутній. |
Нічого, статус OK |
biogaia-story-maker (5 ключів у новому аудиті) |
🟡 ORPHAN / suspect | Firebase project ≠ цей. Нуль references на VPS на цей project_id. У списку Antigravity 14.04 цей вже значився як «незахищений» — значить існує мінімум місяць, з 5 ключами, без споживачів на VPS. | Disable all 5 keys (rollback ready: re-enable якщо щось зламається на клієнтських сайтах) |
gen-lang-client-0463685358 (Biogaia Carusle maker, 3 ключі) |
🟡 ORPHAN / suspect | Нуль references на VPS. Не у wiki. Можливо клієнтський веб-проект (карусель промо?). У 14.04 списку відсутній — означає створений після квітня. | Disable all 3 keys + питання Сергію: який це продукт? |
gen-lang-client-0153982687 (Zest Kids, 1 ключ) |
🟡 ORPHAN / suspect | Zest як продукт активний у Google Ads + CrewAI banner generation (квітень), але CrewAI використовує gemini-sandbox.key (правило routing у wiki). Сам project_id без VPS-references. Можливо клієнтський фронтенд. |
Disable key + питання: де працює цей ключ? |
OpenClaw (€100 budget, €0 spend) |
🔴 DEAD | У 14.04 списку «незахищених». €0 spend за місяць. Нуль references. Стара R&D-ідея. | Disable billing на проекті або archive |
BioGaia (Computer Use research key, per wiki) |
🟡 R&D / dormant | gemini-computer-use-research.key файл є, але споживачів немає, тільки заплановано (Heafolik captcha, Ads cookie-refresh) |
Не критично. IP restriction профілактично. |
banner-analytics-fluvir |
🟢 ALIVE, без ключів | Fluvir/Fluvyr продукт активний, GA4-аналітика | Нічого, статус OK |
Тільки 3 проекти потребують hardening як «живі з ключами»:
menopace-project → IP restriction на gemini_sandboxad-analytics-hub → IAM downgrade + key rotation + BQ Data Transfer fixMed detective → verify status (мабуть OK)5 проектів-кандидатів на Disable (за рішенням 14.04 «disable, не delete»):
biogaia-story-maker (5 ключів)gen-lang-client-0463685358 Carusle (3 ключі)gen-lang-client-0153982687 Zest Kids (1 ключ)OpenClaw (billing disable)Якщо щось зламається після disable — re-enable + restrictions. Це безпечніше і швидше ніж класифікувати кожен ключ окремо.
| Проєкт (ID) | Ключів | Recommended restriction | Чому |
|---|---|---|---|
gen-lang-client-0463685358 (Biogaia Carusle maker) |
3 | TODO classify (frontend/backend?) | Не у wiki — треба з'ясувати призначення |
gen-lang-client-0153982687 (Zest Kids) |
1 | TODO classify | Не у wiki |
menopace-project |
2 | IP restriction (VPS 31.131.26.203) | gemini-sandbox → server-side. Med detective ключ у Menopace project — невідповідність топології, перевірити. |
biogaia-story-maker |
5 | Mixed: див. нижче | Один ключ підтверджено захардкоджений у frontend JS |
Browser key / Biogaia story Prod / Gemini API Key — використовуються у script.js напряму з браузера клієнта (gemini-2.5-pro для генерації, gemini-2.5-flash-image × 12 для ілюстрацій). Підтвердження у /srv/wiki/biogaia-story/index.md рядок 19: «script.js викликає Gemini API НАПРЯМУ (key захардкожений у JS!)».
Restriction type: HTTP referrer на біогая-сторі домен. Це єдиний спосіб захистити frontend-ключ без переписування архітектури на серверну. Жертва — ключ далі публічний, але обмежений джерелом запиту.
Гнучкіше довгострокове рішення: перенести на Cloud Function/Run, тоді → IP/SA.
bsm3 — призначення невідоме (R&D?), перевірити перед restrictionGemini computer use — за wiki це gemini-computer-use-research.key, hostпроект BioGaia — це окремий project ID? Тоді це не Story Maker, треба rechecked.gemini_sandbox (= /srv/passepartout/google/gemini-sandbox.key) → server-side, споживачі: legal-advisor, case-builder, arteggia vision fallback, pediatric-news fallback, ad-hoc R&D. IP restriction на 31.131.26.203 (VPS).Med detective у проекті Menopace ❓ — за wiki Med Detective prod key мав хоститись у окремому Project Med detective. Невідповідність — питання Сергію.ad-analytics-hub@appspot.gserviceaccount.com має роль Editor → 11338 excess permissions. Потрібно знизити до мінімально необхідного набору. Кандидати на основі use-case'у (BQ pipeline):
BigQuery Data Viewer (читати датасети ad_data, tabletki)BigQuery Job User (запускати queries)Cloud Datastore User (якщо App Engine app пише у Datastore)master.digital.dm@gmail.com (Owner) → 12756/12852 excess. Це обліковка Сергія — рекомендую залишити Owner на одному проекті як emergency access, але робочі операції виконувати під separately scoped accounts. Не критично якщо це особистий акаунт без shared доступу.OpenClaw Monthly Budget €100 — не витрачаєтьсяДії:
ad-analytics-hub → BQ Data Transfer API: 1 запит, 100% errors. Ймовірно зламана scheduled transfer job (можливо для GA4 → BQ або Google Ads → BQ).
Дія: перевірити Data Transfer Jobs у Console → BigQuery → Data Transfers → подивитись який job failed і error message.
Key ID daa8c73..., створений 16 Mar 2026, останнє використання 16 Apr 2026.
Файли на VPS: /srv/passepartout/google/ad-pipeline-worker-sa.json та bigquery-sa.json (у wiki відмічено як можливий дубль — open question #2).
Дії:
/srv/services/ на нашому VPS, поза GCP). JSON key тут необхідний.Biogaia Carusle maker + Biogaia Story Maker — попередження. Якщо ці проекти не використовують OAuth (тільки API keys), достатньо просто заповнити мінімально необхідні поля у Testing mode.
banner-analytics-fluvir та ad-analytics-hub — API keys відсутні (тільки SA + OAuth)ad-pipeline-worker має мінімально необхідні ролі (BQ Data Editor/Viewer/Job User)| # | Що | Тип | Виконавець | Estimated effort |
|---|---|---|---|---|
| 1 | Restrict Gemini ключі Biogaia Story Maker (3 frontend) → HTTP referrer | Manual Console | Сергій | 10 хв |
| 2 | Restrict gemini-sandbox (Menopace) → IP 31.131.26.203 |
Manual Console | Сергій | 3 хв |
| 3 | З'ясувати призначення Biogaia Carusle (3) + Zest Kids (1) + bsm3 + Med detective у Menopace |
Discovery | Сергій + Claude | 15 хв |
| 4 | Знизити роль App Engine SA з Editor → BQ Data Viewer + Job User | Manual Console | Сергій | 5 хв (з ризиком зламати App Engine app — перевірити які API вона викликає) |
| 5 | BQ Data Transfer — глянути failed job, пофіксити чи видалити | Manual Console | Сергій | 10 хв |
| 6 | Ротація ad-pipeline-worker JSON ключа |
Mixed | Сергій + Claude (підстановка нового ключа у VPS) | 15 хв |
| 7 | Бюджетні alerts per-project (50/80/100%) + підвищити загальний до €25 | Manual Console | Сергій | 10 хв |
| 8 | OAuth consent screen — заповнити Testing mode у 2 Biogaia проектах | Manual Console | Сергій | 5 хв |
| 9 | Видалити дубль ad-pipeline-worker-sa.json vs bigquery-sa.json |
VPS | Claude | 5 хв (після підтвердження який живий) |
apt install google-cloud-cli)# Listing
gcloud projects list
gcloud iam service-accounts list --project=ad-analytics-hub
gcloud alpha services api-keys list --project=biogaia-story-maker
# Restrictions (приклад для referrer)
gcloud alpha services api-keys update KEY_ID \
--allowed-referrers="https://*.biogaia-story.example/*" \
--project=biogaia-story-maker
# IAM role downgrade
gcloud projects remove-iam-policy-binding ad-analytics-hub \
--member="serviceAccount:ad-analytics-hub@appspot.gserviceaccount.com" \
--role="roles/editor"
gcloud projects add-iam-policy-binding ad-analytics-hub \
--member="serviceAccount:ad-analytics-hub@appspot.gserviceaccount.com" \
--role="roles/bigquery.dataViewer"
gcloud projects add-iam-policy-binding ad-analytics-hub \
--member="serviceAccount:ad-analytics-hub@appspot.gserviceaccount.com" \
--role="roles/bigquery.jobUser"
Рекомендую встановити gcloud на VPS — тоді всі ці дії можна виконати з Claude session з логами і rollback-планом.
Biogaia Carusle maker (project gen-lang-client-0463685358) — це який продукт? Не у wiki. 3 ключі — frontend чи server-side?Zest Kids (project gen-lang-client-0153982687) — який сервіс споживач?Med detective ключ у menopace-project — чому не в окремому проекті Med detective як було по wiki?bsm3 у Biogaia Story Maker — призначення?gcloud на VPS і автоматизувати pp.1–6?/srv/wiki/integrations/google-cloud.md (треба оновити після audit)/srv/passepartout/google/ (5 Gemini ключів локально, 2 SA)ad-pipeline-worker-sa.json vs bigquery-sa.json»/srv/wiki/biogaia-story/index.md (frontend-only Gemini calls)