ACL 机制与策略结构

Tailscale ACL(Access Control Lists)在 tailnet policy file(huJSON)中定义,采用声明式 deny-by-default 模式。所有设备间连接均需显式授权。ACL 语法核心为 src(来源)和 dst(目标)规则,授权粒度精确到用户、组、标签和 CIDR。

基础语法结构

" ] a c { l s " " a : c t [ i o n " : " a c c e p t " , " s r c " : [ " u s e r : a l i c e @ e x a m p l e . c o m " ] , " d s t " : [ " t a g : s e r v e r : 2 2 " ] }
  • actionaccept(允许)或 drop(拒绝,隐式 deny)。
  • src/dst:支持 user:group:tag:autogroup:*
  • 端口协议dst 格式为 [identity]:[port]/[proto],如 tag:prod:443/tcp

Tags:服务节点身份体系

Tags(标签)是非用户设备专用身份标识,解决传统 IP-based ACL 的动态性问题。

Tag 创建与授权

" } t a " " g t t O a a w g g n : : e s p r e r s r o " v d : e " r : { " : [ " [ g " r u o s u e p r : : p a l d a m t i f n o @ r e m x - a t m e p a l m e " . ] c o m " ] ,
  • 节点申请 Tag:tailscale up --advertise-tags=tag:server
  • ACL 引用:"dst": ["tag:server:22"],仅 tag 所有者可广告该 tag。

Tag 层次与继承

  • Tag 可嵌套(部署自动化场景),但 ACL 中直接引用具体 tag。
  • 推荐命名:tag:prodtag:stagingtag:ci-runner

Groups:用户组管理

Groups 将用户批量授权,简化大规模用户管理。

" } g r " " o g g u r r p o o s u u " p p : : : d s { e r v e " " : : [ [ " " u u s s e e r r : : a c l a i r c o e l @ @ e e x x a a m m p p l l e e . . c c o o m m " " , ] " u s e r : b o b @ e x a m p l e . c o m " ] ,
  • ACL 引用:"src": ["group:dev"]
  • Autogroups:系统内置 autogroup:internet(所有用户)、autogroup:member(已认证用户)、autogroup:nonroot

Grants:新代 ACL 语法

Grants(授权 Grants)是 ACL 的超集,简化了复杂的跨域授权。

与传统 ACL 差异

  • ACL"grants" 直接写在规则里。
  • Grants:独立 grants 块,支持更丰富的条件(attr:、持续时间)。
" ] g r { } a n " " " t s d a s r s p " c t p : " " s : : " [ : [ [ " " [ u t " s a s e g s r : h : d " a a ] l t i a c b e a @ s e e x " a ] m , p l e . c o m " ] ,

OIDC 集成

Tailscale 支持 OIDC(OpenID Connect)实现 SSO,将外部身份提供商(IdP)与 tailnet 用户自动同步。

配置要点

  • IdP(如 Google Workspace、Okta)配置 redirect URI 为 https://login.tailscale.com/oidc/callback.
  • ACL 中用户引用自动映射自 IdP 声明(email、groups)。
  • 离职即失活:OIDC 用户离 IdP 后自动失去 tailnet 访问权限(fail-close)。

ACL 测试与调试

dry-run 验证

Tailscale 提供 ACL Policy Test 功能(在 admin console),可编写测试用例:

" ] t e { } s t " " " " s s d d e " r s p x : c t o p " " r e [ : : t c " t " " : e u t d s a 2 " e g 2 : r : , : s " a e a l r c i v c c e e e r p @ : t e 2 " x 2 a " m , p l e . c o m " ,

实时调试命令

t t t a a a i i i l l l s s s c c c a a a l l l e e e s a p t c i a l n t g u d s e b u g # # # A C L

常见陷阱与最佳实践

陷阱 说明 缓解
* 过度授权 "src": ["*"] 开放全网 最小权限原则,精确到 tag/user
规则顺序 ACL 按从上到下评估 将最精确规则置顶
Tag 泄露 tagOwner 缺失导致任意用户可广告 严格定义 tagOwners
忽略 autogroup 依赖 IP 而非身份 优先使用 user:/group:/tag:
无测试用例 上线后才发现阻断 Policy Test 覆盖关键场景

与 OIDC/SSO 深度集成

OIDC 用户自动映射到 ACL,组信息来自 IdP claims。建议:

  • 分组策略:IdP Groups → Tailscale Groups → ACL Grants。
  • 设备信任:结合设备认证(Mobile Device Management 条件访问)。
  • 审计:Event Logs 记录所有 ACL 变更与连接尝试。

参考:ACL 文档TagsOIDC