编程 Shadow Account 有两种含义:Entra B2B 里故意建的 AD 影子账号,和 IAM 管不到的孤儿凭据

2026-09-25 00:04:12

Shadow Account 有两种含义:Entra B2B 里故意建的 AD 影子账号,和 IAM 管不到的孤儿凭据

Shadow Account(影子账户)这个词在两类完全不同的语境里出现。一类是 Entra ID B2B 访客接入本地 AD 时,脚本故意创建、有命名规则的 AD 账号;另一类是 IAM 生命周期管不到、没人认领的凭据——个人 API key、外包建的云身份、共享脚本里的 token。前者是设计产物,后者是治理漏洞。下面就分开写。

一、定义与边界

按 NHIMG 词汇表及 Dark Reading、JumpCloud 的用法,shadow account 指用于干活、但不受组织正常身份生命周期管控的身份。它可能没有经过审批的 MFA、没有日志、没有保留期、没有吊销流程,实质上形成一条平行的信任通道(parallel trust zone)。

关键区分不在于这个身份是人还是机器(NHI),而在于它是否落在正常控制面(control plane)之外。所以它和两类东西不同:

  • 规范配置的 break-glass 应急账户——仍然被监控,有使用记录。
  • 经过正式审批的例外——仍然有归属和时间限制。

最常见的误用是把任何"不方便的遗留旧凭据"都叫成 shadow account。判断依据是:这个身份是否被正式审批、被监控、可被吊销。

二、典型例子

  • 开发在已审批的服务账号失去权限后,自己建个人 API key 让流水线继续跑。
  • 外包/合同工因企业账号权限不够,另建一个云身份访问生产数据。
  • 集成团队把凭据放进共享脚本或配置文件,绕过 secrets manager。
  • 运维组为周末变更维护一个从未 review 的应急账户,密码不轮换,也不记录理由。
  • 第三方自动化工具拿到的不是集中治理的身份,而是本地临时签发的 token。
  • Shadow SaaS account:SaaS 里匹配不到组织任何已知身份的用户账号,常见为个人邮箱、外部协作者、无归属人的服务账号。绕过 SSO/MFA 和自动离职销号,可在人员离职后长期存活,而很多 SaaS 根本不记录用户操作。
  • 服务器本地账号、数据库直连账号:为绕过集中管控而创建,权限过宽、凭据不轮换。

三、风险与审计盲区

shadow account 会同时破坏 NHI 的核心控制项:归属、监控、轮换、吊销、证据留存。身份一旦落在治理之外,出事时无法确信"访问能否被追踪、权限能否快速移除"。

具体表现:

  • 事故响应者面对日志盲点、归属不明、离职销号延迟。
  • 零信任假设被削弱——信任被授予了一个从未真正纳入控制模型的身份。
  • NHI 数量常是人类身份的 25x–50x(NHIMG 引用数据)。

框架映射上,它对应 OWASP Non-Human Identity Top 10 的 NHI-01(未纳管身份规避生命周期与归属控制)、NIST CSF 2.0 PR.AC-4(权限须被授权、复核、可追踪),以及 NIST SP 800-207 的持续验证要求——shadow account 恰好绕过这一条。

代表案例是 CircleCI(2022-12-22):第三方系统环境变量、密钥、token 泄露;事后企业无法确定被盗密钥是否已被用于攻击云账户,因为无法盘点这些密钥的归属与使用。

四、发现与治理

扩大发现范围

不要只看已纳管端点和 IdP。同时扫:云基础设施(SaaS/PaaS/IaaS)里的未纳管身份;用 secrets detection 扫 Git、日志、文件和容器;审计 Google Workspace/M365/Slack 里的 OAuth/SAML 集成;接 PAM 把未纳管特权纳入治理;用 ITDR 识别与可疑身份相关的行为和认证请求。

本机账号可以先做粗比对(需自行验证):

# /etc/shadow 中存在、但 getent passwd 中查不到的名字
comm -23
- Dark Reading "Shadow Identities":
- JumpCloud shadow SaaS accounts:
- Azure-Samples/B2B-to-AD-Sync:
- 深思影子系统:

推荐文章

程序员茄子在线接单