Amazon Verified Permissions と Cedar ポリシー言語の違い - Amazon Verified Permissions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Verified Permissions と Cedar ポリシー言語の違い

Amazon Verified Permissionsは、Cedar ポリシー言語エンジンを使用して認可タスクを実行します。ただし、ネイティブの Cedar 実装と「Verified Permissions」にある Cedar の実装にはいくつか違いがあります。このトピックでは、これらの違いについて説明します。

名前空間の定義

Cedar のVerified Permissions実装は、ネイティブの Cedar 実装と以下の違いがあります。

  • Verified Permissionsは、ポリシーストアで定義されたスキーマ内の名前空間1つだけをサポートします。

  • Verified Permissions では、空の文字列であるか、次の値を含む名前空間を作成することはできません: awsamazon、または cedar

ポリシーテンプレートのサポート

Verified Permissions と Cedar は両方とも、principalresource のスコープ内でのみプレースホルダーを許可します。ただし、Verified Permissions では、principalresource のどちらも制約されていないことも必要です。

以下のポリシーは Cedar では有効ですが、principalには制約がないためVerified Permissionsでは拒否されます。

permit(principal, action == Action::"view", resource == ?resource);

principalresourceの両方に制約があるため、以下の例はいずれも Cedar と Verified Permissionsの両方で有効です。

permit(principal == User::"alice", action == Action::"view", resource == ?resource);
permit(principal == ?principal, action == Action::"a", resource in ?resource);

スキーマのサポート

Verified Permissions では、すべてのスキーマJSONキー名を空でない文字列にする必要があります。Cedar は、プロパティや名前空間など、いくつかの場合に空の文字列を許可します。

拡張タイプのサポート

Verified Permissions は、ポリシーで Cedar 拡張タイプをサポートしていますが、Verified Permissions コンソールを介したスキーマの定義へのそれらの組み込みは現在サポートされていません。

拡張タイプには、固定小数点 (decimal) データ型と IP アドレス (ipaddr) データ型があります。

エンティティの Cedar JSON形式

現時点では、Verified Permissions では、EntityItem要素の配列である に定義された構造を使用してEntitiesDefinition、認証リクエストで考慮されるエンティティのリストを渡す必要があります。Verified Permissions は現在、Cedar JSON形式の認証リクエストで考慮されるエンティティのリストの渡すをサポートしていません。Verified Permissions で使用するエンティティのフォーマットに関する具体的な要件については、エンティティフォーマットを参照してください。

アクショングループの定義

Cedar の認可方法では、認可リクエストをポリシーと照らし合わせて評価する際に考慮すべきエンティティのリストが必要です。

アプリケーションが使用するアクションとアクショングループをスキーマで定義できます。ただし、Cedar は評価リクエストにスキーマを含めません。代わりに、Cedar は送信したポリシーとポリシーテンプレートの検証にのみスキーマを使用します。Cedar は評価リクエスト中にスキーマを参照しないため、スキーマにアクショングループを定義しても、承認APIオペレーションに渡す必要があるエンティティリストの一部としてアクショングループのリストを含める必要があります。

これはVerified Permissions によって自動的に行われます。スキーマで定義したアクショングループは、IsAuthorizedまたはIsAuthorizedWithTokenオペレーションのパラメータとして渡したエンティティリストに自動的に追加されます。

エンティティフォーマット

Verified Permissions のエンティティのJSONフォーマットは、以下の点で Cedar とは異なります。

  • Verified Permissions では、JSONオブジェクトのすべてのキーと値のペアが という名前のJSONオブジェクトでラップされている必要がありますRecord

  • Verified Permissions JSONのリストは、JSONキー名が Setで、値が Cedar の元のJSONリストであるキーと値のペアでラップする必要があります。

  • String、、LongBooleanタイプ名の場合、Cedar の各キーと値のペアは、Verified Permissions のJSONオブジェクトに置き換えられます。オブジェクトの名前は元のキー名です。JSON オブジェクト内には、キー名がスカラー値のタイプ名 (String、、または Boolean) でLong、値が Cedar エンティティの値であるキーと値のペアが 1 つあります。

  • Cedar エンティティと Verified Permissions エンティティの構文フォーマットは、以下の点で異なります。

    Cedar フォーマット Verified Permissions フォーマット
    uid Identifier
    type EntityType
    id EntityId
    attrs Attributes
    parents Parents
例 - リスト

次の例は、エンティティのリストがそれぞれ Cedar および Verified Permissions で表現される方法を示しています。

Cedar
[ { "number": 1 }, { "sentence": "Here is an example sentence" }, { "Question": false } ]
Verified Permissions
{ "Set": [ { "Record": { "number": { "Long": 1 } } }, { "Record": { "sentence": { "String": "Here is an example sentence" } } }, { "Record": { "question": { "Boolean": false } } } ] }
例 - ポリシー評価

次の例は、Cedar および Verified Permissions の認証リクエストでポリシーを評価するためにエンティティがどのようにフォーマットされているかを示しています。

Cedar
[ { "uid": { "type": "PhotoApp::User", "id": "alice" }, "attrs": { "age": 25, "name": "alice", "userId": "123456789012" }, "parents": [ { "type": "PhotoApp::UserGroup", "id": "alice_friends" }, { "type": "PhotoApp::UserGroup", "id": "AVTeam" } ] }, { "uid": { "type": "PhotoApp::Photo", "id": "vacationPhoto.jpg" }, "attrs": { "private": false, "account": { "__entity": { "type": "PhotoApp::Account", "id": "ahmad" } } }, "parents": [] }, { "uid": { "type": "PhotoApp::UserGroup", "id": "alice_friends" }, "attrs": {}, "parents": [] }, { "uid": { "type": "PhotoApp::UserGroup", "id": "AVTeam" }, "attrs": {}, "parents": [] } ]
Verified Permissions
[ { "Identifier": { "EntityType": "PhotoApp::User", "EntityId": "alice" }, "Attributes": { "age": { "Long": 25 }, "name": { "String": "alice" }, "userId": { "String": "123456789012" } }, "Parents": [ { "EntityType": "PhotoApp::UserGroup", "EntityId": "alice_friends" }, { "EntityType": "PhotoApp::UserGroup", "EntityId": "AVTeam" } ] }, { "Identifier": { "EntityType": "PhotoApp::Photo", "EntityId": "vacationPhoto.jpg" }, "Attributes": { "private": { "Boolean": false }, "account": { "EntityIdentifier": { "EntityType": "PhotoApp::Account", "EntityId": "ahmad" } } }, "Parents": [] }, { "Identifier": { "EntityType": "PhotoApp::UserGroup", "EntityId": "alice_friends" }, "Parents": [] }, { "Identifier": { "EntityType": "PhotoApp::UserGroup", "EntityId": "AVTeam" }, "Parents": [] } ]

長さとサイズの制限

Verified Permissionsは、スキーマ、ポリシー、ポリシーテンプレートを格納するためのポリシーストア形式のストレージをサポートします。このストレージが原因で、認証済みアクセス権限には Cedar に関係のない長さとサイズの制限が課されます。

オブジェクト Verified Permissionsの制限 (バイト単位) シダー制限
ポリシーのサイズ ¹ 10,000 なし
インラインポリシーの説明 150 Cedar には適用されません。
ポリシーテンプレートサイズ 10,000 なし
スキーマサイズ 100,000 なし
エンティティタイプ 200 なし
ポリシー ID 64 なし
ポリシーテンプレート ID 64 なし
エンティティ ID 200 なし
ポリシーストア ID 64 Cedarには適用されません。

¹ Verified Permissions では、ポリシーストアで作成されたポリシーのプリンシパル、アクション、リソースの合計サイズに基づいて、ポリシーストアごとのポリシーに制限があります。1 つのリソースに関連するすべてのポリシーの合計サイズは 200,000 バイトを超えることはできません。テンプレートにリンクされたポリシーの場合、ポリシーテンプレートのサイズに、テンプレートにリンクされた各ポリシーのインスタンス化に使用される各パラメータセットのサイズを加えたものが 1 回だけカウントされます。