upw

1 阅读6分钟

Upwind 数据地图 / Upwind Data Map

基于 packages/console 前端代码库梳理,2026-09-14。 所有"意义"与"UI 位置"均来自代码中的实际路由、枚举与产品文案,未标 ❓ 的部分可在前端找到依据。

Derived from the packages/console frontend codebase, 2026-09-14. Every "meaning" and "UI location" comes from actual routes, enums, or product copy in the code. Anything not marked ❓ is verifiable in the frontend.

图例 / Legend

标记含义Meaning
🚩feature flag 控制,默认不可见flag-gated, invisible by default
🧪BETABETA
未实现not implemented
前端无法确认上游,需问后端upstream unverifiable from the frontend

中文

主表

数据UI 在哪看谁采集怎么拿 / 何时拿这批数据的意义
进程 / 文件 / 网络流 / syscallThreats → Investigation → Runtime events 🚩SensoreBPF 挂内核,持续流式推机器上正在发生什么
网络拓扑Inventory → Runtime mapSensor从真实包还原通信关系,持续谁真的在跟谁通信(≠ 配置上允许通)
威胁检测Threats → Detections / StoriesSensor事件流 → policy-enforcer 匹配 → detection → 聚成 story有人正在干坏事
SSH 会话Threats → SSH sessions(或 Investigation 下)Sensor录制终端操作,持续人在机器上敲了什么,可回放
API 路由 + schemaInventory → APIsSensor从真实流量提取,持续到底存在哪些接口 —— 含影子 API
API 事件Threats → Investigation → API events 🚩Sensor流量记录,持续谁调了哪个接口
包是否被加载(in-use)Vulnerabilities 的 in-use 过滤器Sensor看进程有没有 load 这个包,持续漏洞包到底用没用 —— 几千条收敛到几十条
漏洞Vulnerabilities → FindingsCloud Scannerassume role → 起 EC2 ASG → 打快照拆包 → 比对漏洞库。每 N 小时 / 新实例启动 / 手动运行中的资产上装了什么有漏洞的包
敏感数据分类Data → Data classifications 🚩Cloud Scanner(接口路径就是 cloud-scanner/抽样读对象;连数据库读到表级(RDS 是它的扫描 scope)。每 N 小时哪个桶 / 哪张表里有 PII
环境里的 SecretsData → SecretsCloud Scanner扫磁盘快照,每 N 小时躺在服务器磁盘上的密钥
恶意软件并入资产 / 漏洞视图Cloud Scanner扫快照,每 N 小时资产上有没有恶意文件
资产清单Inventory → Catalog / Graph / Orgs & accountsassume role 后调云管理 API ❓跑在哪台机器上前端看不出DescribeInstances / ListBuckets 等,周期性我有什么 —— 所有百分比的分母
配置 / CSPMConfiguration → Findings同上 ❓拉配置元数据 → 每条 rule 跑一段 Rego → 落 finding。周期性 + 手动重评估这个资源违反了哪条合规规则
IAM / 权限结构Identities;Inventory → Identities同上 + Agentless K8s(集群 RBAC)拉 IAM role / SSO permission set / GCP SA / K8s ServiceAccount + RoleBinding,周期性谁能对什么做什么
集群配置 / 工作负载清单Inventory → Catalog(K8s 分组)Agentless K8s不装 Sensor,直连 EKS 控制面(公网或 SSM),周期性集群里有什么,不用装 agent
技术栈 / EOL / EOSInventory → Technologies / End of life 🚩资产盘点从清单推导,周期性哪些东西已停止支持 —— 审计必问,不需要 CVE
SBOM(包清单)Inventory → SBOM explorer资产盘点 ❓上游是 Sensor / agentless / 合并,看不出按云账号聚合,周期性哪些资源用了 log4j —— 但只覆盖已部署的
云操作审计Threats → Investigation → Cloud eventsIntegrations(出站拉)存厂商凭证 → 调 API 拉 CloudTrail / Azure Activity / Entra / GCP audit,周期性谁用什么云凭证做了什么操作
K8s 审计日志Threats → Investigation → Kubernetes events 🚩上游未确认 —— 可能是 Sensor、Agentless K8s,或经 CloudWatch 走云日志集成周期性谁在集群里改了什么
身份提供商数据IdentitiesIntegrations(出站拉:Okta / Entra / Google)OAuth2:clientSecret,或 private_key_jwt 现签断言,周期性组织里有哪些人、在哪些组
Snowflake 资产Inventory → Catalog / Graph;Posture → FindingsIntegrations 出站拉 🧪周期性数仓也算资产 —— database、warehouse 进清单,能被合规规则一起扫
Databricks 资产 + 数据权限Inventory → Catalog / GraphIntegrations 出站拉 🧪周期性workspace / catalog / compute 进清单,且每条数据权限能追回背后的云资源(更偏 CIEM,不是 DSPM)
IaC 配置错误Code → Reviews → IaCGit App(Integrations 的 version_control 渠道)装 Upwind App 拿仓库读权限 → 解析 Terraform / Helm / K8s YAML。PR / push / 定时 / 手动配置错误,在它变成真实资源之前
代码里的 SecretsCode → Findings → SecretsGit App扫仓库,同上时机被提交进 git 历史的密钥
SCA — 源码Code → Reviews → SCA(Source code)Git App解析 lockfile,同上时机依赖清单里的 CVE
SCA — 镜像Code → Reviews → SCA(Container images)CI/CD Scanner拆镜像层 + lockfile。构建那一刻。授权是入站推:拿 Upwind 发的 OAuth 凭证上报镜像里的 CVE,以及比上一版新增了哪些
SASTCode → Findings → SAST未实现,tab 是灰的(本该是:代码逻辑本身的缺陷)
准入拦截事件Threats focus → Admission controllerAdmission Webhook装在客户集群里,同步阻塞拦截kubectl apply 那一瞬间谁想往集群里放什么、拦没拦住
外部暴露验证Attack surface → FindingsASM Engine不观测,主动打。Playbook 有 READ / WRITE / EXECUTE 三档。按需触发,可从一条 posture finding 直接发起从公网到底能不能打进来 —— not_vulnerable 能正式关掉一批理论告警
API 漏洞测试APIs → Tests 🚩ASM Engine发真实测试请求,按需这个接口能不能被打穿

三种授权方式(横切上表)

方式谁在用本质
跨账号 assume roleCloud Scanner、云 API 拉取、Agentless K8sCloudFormation 建一套 IAM role(含 OrganizationServiceRoleArn,用来列出组织下所有成员账号),Upwind 去 assume。同一把钥匙,三种用法
出站:Upwind 存厂商凭证Okta、Snowflake、Databricks、GCP logsclientId + clientSecret,或 clientId + privateKey + kid(每次现签 JWT 断言)
入站:Upwind 发自己的凭证GitHub Actions、Slack、Audit LogsUpwind 作为授权服务器签发 OAuth2 client credentials,第三方拿着调 Upwind API。CI 那个 "Reported via API" 就是这个

Sensor / AI Endpoint Sensor 不走以上任何一种 —— 装在机器上,用自己的 sensor 凭证注册。 Auth0 跟以上都无关 —— 那是 Upwind 自己的用户登录 console 用的。

四条规律

  1. 只有 Sensor 是持续的。 其余全是周期性或事件触发。要实时,必须装 agent。
  2. 周期性采集器全都配"手动重扫"。 客户修完就想马上看到变绿。
  3. 同一种数据常有两条独立的路,产品价值在把它们拼起来。 密钥在代码里(Git)vs 磁盘上(Scanner);漏洞"有没有"(Scanner)vs"要不要紧"(Sensor)。
  4. 越往下越难拿越值钱。 上半张表"读一下就有",下半张要么得装 agent,要么得真动手打。

一条易错提醒

Integrations 的分类标签说的是"连的是什么系统",不是"数据落到哪一页"。 两个已证实的坑:

  • GitHub 归 version_control,但数据落 Code(新条目)或 Inventory(旧的 deprecated 条目)
  • Snowflake / Databricks 归 data_sources,但数据落 Inventory / Findings / Graph不是 Data 页

待后端确认(❓四处)

  1. 配置 / 清单的 API 轮询跑在哪 —— Cloud Scanner 上,还是 Upwind 后端?(Data 页接口是 cloud-scanner/,compliance 和 inventory 不是)
  2. K8s 审计日志的上游是谁
  3. SBOM 包数据是 Sensor、agentless,还是两者合并
  4. Admission Webhook 怎么装 —— console 里没有安装入口,只有文档链接

English

Main table

DataWhere in the UIWho collectsHow / whenWhat it means
Processes / files / flows / syscallsThreats → Investigation → Runtime events 🚩SensoreBPF in the kernel, continuous pushWhat is happening right now on a machine
Network topologyInventory → Runtime mapSensorReconstructed from real packets, continuousWho is actually talking to whom (≠ who's allowed to)
Threat detectionsThreats → Detections / StoriesSensorEvent stream → policy-enforcer → detection → aggregated into storiesSomeone is doing something bad right now
SSH sessionsThreats → SSH sessions (or under Investigation)SensorTerminal recording, continuousWhat a human typed on the box, replayable
API routes + schemasInventory → APIsSensorExtracted from live traffic, continuousWhich endpoints actually exist — including shadow APIs
API eventsThreats → Investigation → API events 🚩SensorTraffic records, continuousWho called which endpoint
Package in-useThe in-use filter on VulnerabilitiesSensorDid any process load it, continuousIs this vulnerable package actually used — thousands → dozens
VulnerabilitiesVulnerabilities → FindingsCloud Scannerassume role → EC2 ASG → snapshot, unpack, diff vuln DBs. Every N hours / new instance / manualWhat vulnerable packages are installed on running assets
Sensitive data classificationData → Data classifications 🚩Cloud Scanner (endpoints literally cloud-scanner/)Sample objects; connect to DBs down to table level (RDS is a scan scope). Every N hoursWhich bucket / which table holds PII
Secrets in the environmentData → SecretsCloud ScannerScan disk snapshots, every N hoursKeys sitting on server disks
MalwareFolded into asset / vuln viewsCloud ScannerScan snapshots, every N hoursAre there malicious files on the asset
Asset inventoryInventory → Catalog / Graph / Orgs & accountsCloud management API after assume-role ❓which compute runs it is invisibleDescribeInstances / ListBuckets etc., periodicWhat do I have — the denominator under every percentage
Configuration / CSPMPosture → FindingsSame ❓Pull config metadata → run each rule as Rego → emit findings. Periodic + manual re-evalWhich compliance rule this resource violates
IAM / permission structureIdentities; Inventory → IdentitiesSame + Agentless K8s (cluster RBAC)Pull IAM roles / SSO permission sets / GCP SAs / K8s ServiceAccounts + RoleBindings, periodicWho can do what to what
Cluster config / workload inventoryInventory → Catalog (K8s grouping)Agentless K8sNo Sensor; connect to the EKS control plane (internet or SSM), periodicWhat's in the cluster, with no agent
Tech stack / EOL / EOSInventory → Technologies / End of life 🚩Asset inventoryDerived from the inventory, periodicWhat has already lost support — audit always asks, no CVE needed
SBOM (package list)Inventory → SBOM explorerAsset inventory ❓Sensor / agentless / merged is invisibleAggregated by cloud account, periodicWhich resources use log4j — but only covers what's deployed
Cloud audit eventsThreats → Investigation → Cloud eventsIntegrations (outbound pull)Hold the vendor credential → pull CloudTrail / Azure Activity / Entra / GCP audit, periodicWho used which cloud credential to do what
K8s audit logsThreats → Investigation → Kubernetes events 🚩Upstream unconfirmed — Sensor, Agentless K8s, or CloudWatch via a cloud-logs integrationPeriodicWho changed what in the cluster
Identity provider dataIdentitiesIntegrations (outbound: Okta / Entra / Google)OAuth2: clientSecret, or private_key_jwt with a freshly signed assertion, periodicWho's in the org, in which groups
Snowflake assetsInventory → Catalog / Graph; Posture → FindingsIntegrations, outbound pull 🧪PeriodicThe warehouse counts as an asset — databases and warehouses enter the inventory and get swept by compliance rules
Databricks assets + data permissionsInventory → Catalog / GraphIntegrations, outbound pull 🧪PeriodicWorkspaces / catalogs / compute enter the inventory, and every data permission traces back to the cloud resource behind it (closer to CIEM than DSPM)
IaC misconfigurationsCode → Reviews → IaCGit App (the version_control channel in Integrations)Install the Upwind App for repo read access → parse Terraform / Helm / K8s YAML. PR / push / scheduled / manualMisconfigurations, before they become real resources
Secrets in codeCode → Findings → SecretsGit AppScan repos, same timingKeys committed into git history
SCA — sourceCode → Reviews → SCA (Source code)Git AppParse lockfiles, same timingCVEs in the dependency manifest
SCA — imagesCode → Reviews → SCA (Container images)CI/CD ScannerUnpack image layers + lockfiles. At build time. Authorization is inbound push with an Upwind-issued OAuth credentialCVEs in the image, and which are new vs the previous version
SASTCode → Findings → SASTNot implemented, tab greyed out(would be: defects in the code logic itself)
Admission eventsThreats focus → Admission controllerAdmission WebhookIn the customer's cluster, synchronous blocking interception. The kubectl apply instantWho tried to put what into the cluster, and was it stopped
External exposure validationAttack surface → FindingsASM EngineDoesn't observe — attacks. Playbooks have READ / WRITE / EXECUTE modes. On demand, fireable from a posture findingCan someone actually get in from the internetnot_vulnerable formally closes theoretical alerts
API vulnerability testsAPIs → Tests 🚩ASM EngineSends real test requests, on demandCan this endpoint actually be broken

Three authorization mechanisms (cutting across the table)

MechanismUsed byWhat it is
Cross-account assume-roleCloud Scanner, cloud API polling, Agentless K8sCloudFormation provisions IAM roles (including OrganizationServiceRoleArn, used to list every member account) that Upwind assumes. One key, three uses
Outbound: Upwind stores the vendor's credentialOkta, Snowflake, Databricks, GCP logsclientId + clientSecret, or clientId + privateKey + kid (a freshly signed JWT assertion each time)
Inbound: Upwind issues its own credentialGitHub Actions, Slack, Audit LogsUpwind acts as authorization server and issues OAuth2 client credentials; the third party calls Upwind's API. This is CI's "Reported via API"

The Sensor and AI Endpoint Sensor use none of these — they're installed on machines and enroll with their own sensor credentials. Auth0 is unrelated to all of this — it's how Upwind's own users log into the console.

Four patterns

  1. Only the Sensor is continuous. Everything else is periodic or event-triggered. Real-time requires an agent.
  2. Every periodic collector ships a manual rescan — customers fix something and want it green immediately.
  3. The same data type usually has two independent paths, and the value is stitching them. Secrets in code (Git) vs on disk (Scanner); "does the vuln exist" (Scanner) vs "does it matter" (Sensor).
  4. The further down, the harder to get and the more it's worth. The top half is "just read it." The bottom half needs an agent, or an actual attack.

One recurring trap

An integration's category label says what system it connects to, not which page the data lands on. Two confirmed cases:

  • GitHub is filed under version_control, but its data lands in Code (new entry) or Inventory (the old deprecated entry)
  • Snowflake / Databricks are filed under data_sources, but their data lands in Inventory / Findings / Graphnot the Data page

Open with the backend (the four ❓)

  1. Where the config / inventory API polling runs — the Cloud Scanner, or Upwind's backend? (Data's endpoints are cloud-scanner/; compliance and inventory are not)
  2. The upstream of K8s audit logs
  3. Whether SBOM package data is Sensor, agentless, or merged
  4. How the Admission Webhook is installed — no install surface in the console, only a doc link