Skip to content

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.

bash
docker compose exec agent wg-flow-agent plugin install cloudflare
# или
wg-flow-agent plugin install cloudflare

Дальше — локальный UI → Connections → cloudflare или YAML.

Что попадает в инвентарь ​

Объект Cloudflareresource_typeЗаметки
Зонаdomainapex, provider_resource_id = имя зоны. paused → stopped
Hostname из A / AAAA / CNAMEdomainдочерний FQDN, например www.example.com. Apex, * и _dmarc как домен не дублируются
DNS-записьdnsprovider_resource_id = dns:{record_id}
R2 bucketstorager2:{account_id}:{name}
Workers KVstoragekv:{namespace_id}
D1databased1:{uuid}, движок sqlite
Hyperdrivedatabasehyperdrive:{id}, origin host и имя базы
Load balancer зоныload_balancerlb:{id}. enabled: false → stopped
Пул балансировщикаload_balancerlb-pool:{id}

В кабинете домены группируются по apex, как у SpaceWeb и Prometheus.

Куски сбора можно выключить отдельно: зоны, DNS, storage, databases, load balancers. Если зоны выключены, а DNS или LB включены, список зон всё равно запрашивается — чтобы обойти записи и балансировщики — но apex в инвентарь не пишется. Ошибка одной зоны или одного продукта не обрывает остальной сбор.

account_id пустой — все зоны и аккаунты, которые видит токен. Несколько аккаунтов Cloudflare — несколько sources.

YAML ​

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

Проверка ​

bash
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 — нормально; слияние в кабинете