ポリシードキュメント形式¶
各 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 規約を使用します。マッチングルール:
パターン |
マッチ対象 |
|---|---|
|
アクション |
|
|
|
すべてのアクション |
Resource¶
必須。単一の FRN 文字列/パターンまたは FRN 文字列/パターンの配列です。ワイルドカードとマッチングルールの詳細については FRN 仕様 を参照してください。
特殊なケース:単一要素の配列 ["*"] または文字列 "*" は すべての リソースに一致します。
Condition¶
省略可能なオブジェクトです。存在する場合、ステートメントが一致するにはすべてのオペレーターが通過する必要があります(オペレーター間の AND ロジック)。
各オペレーターは条件キーを期待値にマッピングします。値は単一の文字列または文字列の配列です。
オペレーター |
セマンティクス |
|---|---|
|
実際のコンテキスト値が期待値リストに含まれている必要があります(完全一致)。 |
|
実際のコンテキスト値が期待値リストに含まれていては なりません 。 |
|
実際の値が少なくとも 1 つの glob パターンに一致する必要があります( |
|
|
条件キーには dotid: プレフィックスを付けることができ、コンテキスト検索前に除去されます。コンテキストキーは snake_case 形式でも検索されます(例:principalType は principal_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/*"]
}
]
}
このポリシーの評価順序:
DenyDeviceDeleteステートメントが最初にチェックされます(拒否パス)。要求されたアクションが任意のデバイス FRN に対するdevices:Deleteである場合、結果は即座に DENY になります。次に
AllowDeviceReadステートメントがチェックされます(許可パス)。アクションが任意のデバイス FRN に対するdevices:Readまたはdevices:Listであり、かつ ** コンテキストに ``principalType = "user"`` が含まれている場合、結果は **ALLOW になります。その他のアクション/リソースの組み合わせは デフォルト DENY (一致なし)となります。