Cloudflare
Статус: доступен · пакет wg-flow-plugin-cloudflare 0.1.1 · провайдер cloudflare · категория dns.
Плагин ходит в Cloudflare API v4 и отдаёт в инвентарь зоны, DNS, хранилища, базы и балансировщики. Нужен API Token. Global API Key плагин не принимает. Токен остаётся в YAML агента.
Права токена: Zone Read и DNS Read для зон. Для остальных продуктов — Account → Workers R2 Storage → Read, Workers KV Storage → Read, D1 → Read и Load Balancing → Read. Если права на продукт нет (часто 403 на R2), этот кусок пропускается, остальные ресурсы собираются.
Workers, Pages, Tunnels и Queues в 0.1.1 не эмитятся.
Установка
Агент должен быть подключён к API.
docker compose exec agent wg-flow-agent plugin install cloudflare
# или
wg-flow-agent plugin install cloudflareДальше — локальный UI → Connections → cloudflare или YAML.
Что попадает в инвентарь
| Объект Cloudflare | resource_type | Заметки |
|---|---|---|
| Зона | domain | apex, provider_resource_id = имя зоны. paused → stopped |
| Hostname из A / AAAA / CNAME | domain | дочерний FQDN, например www.example.com. Apex, * и _dmarc как домен не дублируются |
| DNS-запись | dns | provider_resource_id = dns:{record_id} |
| R2 bucket | storage | r2:{account_id}:{name} |
| Workers KV | storage | kv:{namespace_id} |
| D1 | database | d1:{uuid}, движок sqlite |
| Hyperdrive | database | hyperdrive:{id}, origin host и имя базы |
| Load balancer зоны | load_balancer | lb:{id}. enabled: false → stopped |
| Пул балансировщика | load_balancer | lb-pool:{id} |
В кабинете домены группируются по apex, как у SpaceWeb и Prometheus.
Куски сбора можно выключить отдельно: зоны, DNS, storage, databases, load balancers. Если зоны выключены, а DNS или LB включены, список зон всё равно запрашивается — чтобы обойти записи и балансировщики — но apex в инвентарь не пишется. Ошибка одной зоны или одного продукта не обрывает остальной сбор.
account_id пустой — все зоны и аккаунты, которые видит токен. Несколько аккаунтов Cloudflare — несколько sources.
YAML
plugins:
cloudflare:
enabled: true
sources:
- id: account
provider_account: "cf-main"
sync_interval_seconds: 300
url: "https://api.cloudflare.com/client/v4"
token: "…"
account_id: ""
collect_zones: true
collect_dns: true
collect_storage: true
collect_databases: true
collect_load_balancers: trueПоля source
| Поле | Обязательно | Описание |
|---|---|---|
id | да | Ключ в логах (cloudflare/account) |
provider_account | да | Метка аккаунта в инвентаре |
url | нет | По умолчанию https://api.cloudflare.com/client/v4 |
token | да | API Token; в UI маскируется |
account_id | нет | Ограничить одним аккаунтом |
collect_zones / collect_dns / collect_storage / collect_databases / collect_load_balancers | нет | true по умолчанию |
sync_interval_seconds | нет | Минимум 300 |
Проверка
wg-flow-agent status
wg-flow-agent dry-runВ JSON — provider: cloudflare. Health вызывает GET /user/tokens/verify и считает токен живым только при status=active. Сам токен в инвентарь не пишется.
Частые ошибки
| Симптом | Что проверить |
|---|---|
| 401 / 403 на зонах | API Token, не Global API Key; права Zone Read и DNS Read |
| 403 на R2, storage пустой | Account → Workers R2 Storage → Read |
| Token is not active | токен выключен в Cloudflare |
| Пустые зоны | account_id принадлежит этому токену; collect_zones не выключен |
| Нет поддоменов | collect_dns включён; запись A/AAAA/CNAME, не wildcard и не _label |
| Нет storage / database / LB | продукт реально есть в аккаунте; соответствующий collect_* включён; права токена |
Sync accepted>0, created=0, seen=0 | квота или read-only подписки на SaaS; зоны и DNS дошли до API, но upsert не создал строки |
| Дубли с SpaceWeb / Prometheus | разные provider — нормально; слияние в кабинете |