FRN 规范

FlexGalaxy Resource Name (FRN) 是在所有 DotID 服务中使用的通用分层资源标识符。它以 AWS ARN 为原型设计。

规范格式

frn:{account-id}:{service}:{resource-path}

四个以冒号分隔的段:

位置

允许的字符

示例

0

前缀

字面量 frn

frn

1

account-id

[a-zA-Z0-9_.*-]+

acc-xxxxxxxxxxxx

2

service

[a-zA-Z0-9_.*-]+

devices

3

resource-path

[a-zA-Z0-9_./*-]+

device/42

完整示例:

frn:acc-xxxxxxxxxxxx:devices:device/42

通配符

通配符在 策略资源模式 中受支持(不可用于请求 FRN)。

第 1--2 段(account-id、service)

* 匹配该位置的任意单个值。

frn:*:devices:device/42
─── match any account-id

第 3 段(resource-path)

  • * 精确匹配 一个 路径组件。

  • ** 匹配 零个或多个 路径组件(glob 风格)。

frn:*:devices:device/*       ← matches device/42, device/abc
frn:*:devices:device/**      ← matches device/, device/42, device/a/b
frn:*:devices:**             ← matches any resource path

匹配规则

匹配由 FrnMatcher.matches(pattern, target) 执行:

  1. 第 1--2 段 逐个比较。模式段为 "*" 时匹配任意目标值;否则进行精确字符串匹配。

  2. 第 3 段(resource-path)/ 分割,逐组件匹配:

    • * 精确匹配一个组件。

    • ** 匹配零个或多个剩余组件(贪婪匹配)。

    • 其他值需要精确匹配。

示例

模式

目标

结果

frn:*:devices:device/*

frn:acc-1:devices:device/42

匹配

frn:*:devices:device/*

frn:acc-1:devices:device/a/b

不匹配

frn:*:devices:device/**

frn:acc-1:devices:device/a/b

匹配

frn:*:devices:**

frn:acc-1:devices:anything/here

匹配

frn:acc-1:devices:device/42

frn:acc-1:devices:device/42

匹配

frn:acc-1:devices:device/42

frn:acc-2:devices:device/42

不匹配

验证

当且仅当满足以下条件时,字符串才是有效的 FRN:

  1. 不为 null 且不为空白。

  2. 以冒号分隔后恰好为 4 个部分。

  3. 第 0 部分是字面量字符串 frn

  4. 第 1--2 部分均非空,且匹配 ^[a-zA-Z0-9_.*-]+$

  5. 第 3 部分非空,且匹配 ^[a-zA-Z0-9_./*-]+$