FRN 仕様

FlexGalaxy Resource Name (FRN) は、すべての DotID サービスで使用される汎用的な階層型リソース識別子です。AWS ARN をモデルとしています。

正規フォーマット

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

コロン区切りの 4 つのセグメント:

位置

セグメント

使用可能な文字

0

prefix

リテラル 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)

  • * はちょうど 1 つ のパスコンポーネントに一致します。

  • **0 個以上 のパスコンポーネントに一致します(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)/ で分割され、コンポーネントごとに照合されます:

    • * はちょうど 1 つのコンポーネントに一致します。

    • ** は残りの 0 個以上のコンポーネントに一致します(貪欲マッチ)。

    • その他の値は完全一致が必要です。

パターン

ターゲット

結果

frn:*:devices:device/*

frn:acc-1:devices:device/42

MATCH

frn:*:devices:device/*

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

NO MATCH

frn:*:devices:device/**

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

MATCH

frn:*:devices:**

frn:acc-1:devices:anything/here

MATCH

frn:acc-1:devices:device/42

frn:acc-1:devices:device/42

MATCH

frn:acc-1:devices:device/42

frn:acc-2:devices:device/42

NO MATCH

バリデーション

文字列が有効な FRN であるための必要十分条件は以下のとおりです:

  1. null または空白でないこと。

  2. コロン区切りでちょうど 4 つの部分に分割されること。

  3. パート 0 がリテラル文字列 frn であること。

  4. パート 1--2 がそれぞれ空でなく、^[a-zA-Z0-9_.*-]+$ に一致すること。

  5. パート 3 が空でなく、^[a-zA-Z0-9_./*-]+$ に一致すること。