

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

# Amazon Verified Permissions と Cedar ポリシー言語の違い
<a name="terminology-differences-avp-cedar"></a>

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

## 名前空間の定義
<a name="differences-namespaces"></a>

Cedar のVerified Permissions実装は、ネイティブの Cedar 実装と以下の違いがあります。
+ Verified Permissionsは、ポリシーストアで定義された[スキーマ内の名前空間](https://docs.cedarpolicy.com/schema/schema.html#namespace)1つだけをサポートします。
+ Verified Permissions では、空の文字列、または `aws`、、 `amazon`の値を含む[名前空間](https://docs.cedarpolicy.com/schema/schema.html#namespace)を作成することはできません`cedar`。

## ポリシーテンプレートのサポート
<a name="differences-schema"></a>

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

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

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

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

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

```
permit(principal == ?principal, action == Action::"a", resource in ?resource);
```

## スキーマのサポート
<a name="differences-templates"></a>

Verified Permissions では、すべてのスキーマ JSON キー名が空でない文字列である必要があります。Cedar では、プロパティや名前空間など、場合によっては空の文字列を使用できます。

## アクショングループの定義
<a name="differences-action-groups"></a>

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

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

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

## エンティティフォーマット
<a name="differences-entities"></a>

`entityList` パラメータを使用した Verified Permissions のエンティティの JSON 形式は、以下の点で Cedar とは異なります。
+ Verified Permissions では、JSON オブジェクトのすべてのキーと値のペアが、という名前の JSON オブジェクトでラップされている必要があります。`Record`
+ Verified Permissions の JSON リストは、キー名が `Set` で値が Cedar の元の JSON リストである JSON キーと値のペアでラップする必要があります。
+ `String`、`Long`、および `Boolean` タイプ名の場合、Cedar の各キーと値のペアは、Verified permissions の JSON オブジェクトに置き換えられます。オブジェクトの名前は元のキー名です。JSON オブジェクト内には、キーと値のペアが 1 つあり、キー名はスカラー値 (`String`、`Long`、または`Boolean`)の型名 で、値は Cedar エンティティの値です。
+ Cedar エンティティと Verified Permissions エンティティの構文フォーマットは、以下の点で異なります。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/verifiedpermissions/latest/userguide/terminology-differences-avp-cedar.html)

**Example - リスト**  
次の例は、エンティティのリストをそれぞれ Cedar と Verified Permissions で表現する方法を示しています。  

```
[
  {
    "number": 1
  },
  {
    "sentence": "Here is an example sentence"
  },
  {
    "Question": false
  }
]
```

```
{
  "Set": [
    {
      "Record": {
        "number": {
          "Long": 1
        }
      }
    },
    {
      "Record": {
        "sentence": {
          "String": "Here is an example sentence"
        }
      }
    },
    {
      "Record": {
        "question": {
          "Boolean": false
        }
      }
    }
  ]
}
```

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

```
[
    {
        "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": []
    }
]
```

```
[
    {
        "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": []
    }
]
```

## 長さとサイズの制限
<a name="differences-length-limits"></a>

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 回だけカウントされます。