ポリシードキュメント形式

Policy エンティティには、PostgreSQL jsonb として保存される document フィールドが含まれます。このページでは、そのドキュメントのスキーマと評価セマンティクスについて説明します。

スキーマ

{
  "Version": "2024-01-01",
  "Statement": [
    {
      "Sid":        "<optional statement identifier>",
      "Effect":     "Allow | Deny",
      "Action":     ["<service>:<Action>", ...],
      "Resource":   ["<FRN pattern>", ...],
      "Condition":  {
        "<Operator>": {
          "<condition-key>": "<value> | [<values>]"
        }
      }
    }
  ]
}

フィールド

Version

省略可能なポリシードキュメントのバージョン文字列です(例:"2024-01-01")。将来のスキーマ変更のために予約されています。

Statement

必須のトップレベル配列です。存在しないか空の場合、ポリシーはマッチを生成せず、実質的に何も行いません。

Sid

省略可能な人間が読みやすいステートメント識別子です。トレーサビリティのため、認可レスポンスで matchedStatement として返されます。

Effect

必須。"Allow" または "Deny" でなければなりません(大文字・小文字を区別します)。

  • "Deny" ステートメントは最初に評価され、"Allow" ステートメントに対して 常に優先 されます。

  • どのステートメントにも一致しない場合、結果は デフォルト拒否 になります。

Action

必須。単一のアクション文字列またはアクション文字列の配列です。各エントリは service:Action 規約を使用します。マッチングルール:

パターン

マッチ対象

"devices:Read"

アクション devices:Read のみに完全一致

"devices:*"

devices: で始まるすべてのアクション

"*"

すべてのアクション

Resource

必須。単一の FRN 文字列/パターンまたは FRN 文字列/パターンの配列です。ワイルドカードとマッチングルールの詳細については FRN 仕様 を参照してください。

特殊なケース:単一要素の配列 ["*"] または文字列 "*"すべての リソースに一致します。

Condition

省略可能なオブジェクトです。存在する場合、ステートメントが一致するにはすべてのオペレーターが通過する必要があります(オペレーター間の AND ロジック)。

各オペレーターは条件キーを期待値にマッピングします。値は単一の文字列または文字列の配列です。

サポートされるオペレーター

オペレーター

セマンティクス

StringEquals

実際のコンテキスト値が期待値リストに含まれている必要があります(完全一致)。

StringNotEquals

実際のコンテキスト値が期待値リストに含まれていては なりません

StringLike

実際の値が少なくとも 1 つの glob パターンに一致する必要があります(* は正規表現マッチングのために .* に変換されます)。

Bool

actual.toString() が期待値リストに含まれている必要があります(例:"true" または "false")。

条件キーには dotid: プレフィックスを付けることができ、コンテキスト検索前に除去されます。コンテキストキーは snake_case 形式でも検索されます(例:principalTypeprincipal_type としても検索されます)。

未知のオペレーターは false と評価され、警告ログが出力されます。

以下のポリシーは、ユーザープリンシパルに対してデバイスの読み取りと一覧表示を許可しつつ、すべてのデバイスの削除を明示的に拒否します:

{
  "Version": "2024-01-01",
  "Statement": [
    {
      "Sid": "AllowDeviceRead",
      "Effect": "Allow",
      "Action": ["devices:Read", "devices:List"],
      "Resource": ["frn:*:devices:device/*"],
      "Condition": {
        "StringEquals": {
          "dotid:principalType": "user"
        }
      }
    },
    {
      "Sid": "DenyDeviceDelete",
      "Effect": "Deny",
      "Action": ["devices:Delete"],
      "Resource": ["frn:*:devices:device/*"]
    }
  ]
}

このポリシーの評価順序:

  1. DenyDeviceDelete ステートメントが最初にチェックされます(拒否パス)。要求されたアクションが任意のデバイス FRN に対する devices:Delete である場合、結果は即座に DENY になります。

  2. 次に AllowDeviceRead ステートメントがチェックされます(許可パス)。アクションが任意のデバイス FRN に対する devices:Read または devices:List であり、かつ ** コンテキストに ``principalType = "user"`` が含まれている場合、結果は **ALLOW になります。

  3. その他のアクション/リソースの組み合わせは デフォルト DENY (一致なし)となります。