翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Verified Permissions から Cedar 4 へのアップグレードに関するよくある質問
Amazon Verified Permissions は、使用する Cedar のバージョンをバージョン 2 からバージョン 4 にアップグレードしています。Cedar は、ポリシーストアでポリシー、ポリシーテンプレート、スキーマを記述するために使用するオープンソース言語です。Verified Permissions での Cedar 4 のサポートにより、is演算子タグやエンティティタグなどの新機能を使用して、より表現力の高いポリシーを記述できます。
Amazon Verified Permissions は、ポリシーストアを Cedar 4 に自動的にアップグレードします。ただし、Cedar 2 用に記述された一部のポリシー、スキーマ、認可リクエストは、Cedar 4 と互換性がありません。ポリシーストアの場合は、自動的にアップグレードされません。Cedar 4 にアップグレードする前に、ポリシー、ポリシーテンプレート、スキーマ、またはアプリケーションコードを変更する必要がある場合があります。
トピック
一部のポリシー、ポリシーテンプレート、スキーマが Cedar 4 と互換性がないのはなぜですか?
Cedar チームは、バグを修正し、言語を簡素化するために、Cedar 2 以降、下位互換性のないいくつかの変更を行いました。これらの変更には次の場合が含まれます。
ポリシー、ポリシーテンプレート、スキーマの構文の変更
より多くのエラーを検出する、より正確なポリシー検証ツール
などの組み込み関数の動作の変更
isInRange
下位互換性のない変更の完全なリストについては、Cedar 変更ログ(*)で とマークされた項目を探します。
ポリシーストアで Cedar 2 と Cedar 4 のどちらを使用しているかを確認するにはどうすればよいですか?
ポリシーストアが使用する Cedar のバージョンは、Amazon Verified Permissions コンソールまたは GetPolicyStoreオペレーションを使用して確認できます。
注記
同じ AWS アカウント とリージョンのすべてのポリシーストアは、同じバージョンの Cedar を使用します。
Cedar 4 にアップグレードするにはどうすればよいですか?
Amazon Verified Permissions は、ほとんどの顧客を Cedar 4 にアップグレード済みです。ポリシーストアを作成したことがない場合、作成した新しいポリシーストアは Cedar 4 を使用します。既存のお客様は、Cedar 4 にアップグレード済みである可能性があります。ポリシーストアが使用している Cedar のバージョンを確認するには ポリシーストアで Cedar 2 と Cedar 4 のどちらを使用しているかを確認するにはどうすればよいですか?、「」を参照してください。
アップグレードされていない場合、Verified Permissions は、Cedar 4 と互換性のないポリシーストアの 1 つでポリシー、ポリシーテンプレート、スキーマ、または認可リクエストを検出しました。2025 年後半に、互換性のないリソースについて説明する E メール通知が送信されます。より早くアップグレードするには、 でケースを開きます サポート。
重要
同じ のすべてのポリシーストアは、同じバージョンの Cedar AWS アカウント を使用します。アカウント内の 1 つのポリシーストアが Cedar 4 と互換性がない場合、そのアカウントのどのポリシーストアでも Cedar 4 を使用することはできません。
ポリシーストアを Cedar 4 から Cedar 2 にダウングレードできますか?
いいえ。ポリシーストアを Cedar 4 にアップグレードした後に問題が発生した場合は、 でケースを開きます サポート。
ポリシーストアが Cedar 2 に設定されているというエラーメッセージが表示されるのはなぜですか?
Amazon Verified Permissions の一部の機能は、Cedar 4 の新機能に依存しています。ポリシーストアで Cedar 4 が使用されていない場合、次の API フィールドは使用できません。
-
IsAuthorized、BatchIsAuthorized、IsAuthorizedWithTokenおよび BatchIsAuthorizedWithTokenオペレーションの場合:
datetime、decimalまたはattributescontextフィールドdurationの値
ポリシーストアがアップグレードされるまで、Cedar 2 の後に導入されたポリシー、ポリシーテンプレート、スキーマで構文またはデータ型を使用することはできません。
スキーマを Cedar 4 と互換性を持たせるにはどうすればよいですか?
Verified Permissions コンソールは、スキーマの互換性の問題を自動的に修正できます。スキーマを自動的に修正できない場合、コンソールに手動で修正するエラーのリストが表示されます。
重要
Amazon Verified Permissions コンソールのコードエディタには、ポリシーストアで Cedar 2 を使用している場合でも、常に Cedar 4 からのエラーと警告が表示されます。変更の保存ボタンまたは Verified Permissions API を使用して、Cedar 4 と互換性のないスキーマを引き続き更新できます。
コンソールを使用してスキーマを修正するには
-
にサインイン AWS マネジメントコンソール し、検証済みのアクセス許可
で Amazon Verified Permissions コンソールを開きます。 -
ナビゲーションペインで、ポリシーストアを選択し、確認するポリシーストアを選択します。
-
ナビゲーションペインでスキーマを選択します。
-
スキーマを自動的に修正できる場合は、「「修正」をクリックして互換性のあるバージョンをプレビューする」というバナーが表示されます。修正を選択します。
-
スキーマに加えられた変更を確認し、更新されたスキーマのプレビューをクリックします。
-
更新されたスキーマを確認し、変更の保存をクリックします。
スキーマを自動的に修正できない場合は、 コンソールで修正するエラーのリストを確認できます。
-
上記の説明に従ってスキーマの編集ページを開きます。
-
JSON モードを選択します。
-
コードエディタの左側にあるガーターの赤いエラーアイコンにカーソルを合わせます。エラーメッセージがツールヒントに表示されます。
発生する可能性のある一般的なエラーとその解決方法は次のとおりです。
- が JSON からスキーマを解析できませんでした:
`field-name` -
Cedar 2 では、Cedar スキーマの一部として意味がない場合でも、型定義などのスキーマの一部に任意のフィールドを含めることができます。Cedar 4 では、これは許可されなくなりました。このエラーを解決するには、JSON スキーマから
field-nameというフィールドを削除します。有効なスキーマフィールドのリストについては、Cedar のドキュメントを参照してください。 - 不明な拡張タイプ
`extension-name` -
Cedar 2 では、
typeが である属性を宣言するときにExtension、値が有効な拡張タイプ名であるかどうかにかかわらず、nameフィールドに任意の値を指定できます。これは Cedar 4 のエラーになりました。これを解決するには、extension-nameを有効な拡張タイプ名に置き換えます。有効な拡張タイプ名のリストは、Cedar ドキュメントで確認できます。
スキーマのエラーを解決する方法が不明な場合は、 にお問い合わせください。 サポート
ポリシーとテンプレートを Cedar 4 と互換性を持たせるにはどうすればよいですか?
Verified Permissions コンソールには、Cedar 4 と互換性のないポリシーまたはテンプレートのエラーが表示されます。
コンソールでポリシーまたはテンプレートのエラーを表示するには
-
にサインイン AWS マネジメントコンソール し、検証済みのアクセス許可
で Amazon Verified Permissions コンソールを開きます。 -
ナビゲーションペインで、ポリシーストアを選択し、確認するポリシーストアを選択します。
-
必要に応じて、ナビゲーションペインでポリシーまたはポリシーテンプレートを選択します。
-
互換性のないポリシーまたはテンプレートを選択します。
-
編集を選択する
-
コードエディタの左側にあるガーターの赤いエラーアイコンにカーソルを合わせます。エラーメッセージがツールヒントに表示されます。
発生する可能性のある一般的なエラーとその解決方法は次のとおりです。
- 空のセットリテラルは ポリシーで禁止されています
-
Cedar 2 では、 構文を使用して、セットが空かどうか
mySet == []を確認できます。Cedar 4 では、この構文を使用するポリシーはスキーマに対して検証されなくなりました。ポリシーmySet == []の を に置き換えますmySet.isEmpty()。