翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
エンティティ (ABAC) の属性へのアクセスを許可します。
属性ベースのアクセスコントロール (ABAC) は、属性に基づいて許可を定義する認可戦略です。Verified Permissionsでは、プリンシパル、アクション、リソースに属性を添付できます。すると、これらの属性は、リクエストのコンテキストを構成するプリンシパル、アクション、リソースの属性を評価するポリシーの when
および unless
句内で参照できるようになります。
次の例では、Cedar ポリシー言語リファレンスガイドの「スキーマの例
この例では、ジョブ レベル 5 以上の HardwareEngineering
部門のプリンシパルに、アルバム device_prototypes
内の写真の表示と一覧表示を許可するポリシーを作成する方法を示します。
permit( principal, action in [Action::"listPhotos", Action::"view"], resource in Album::"device_prototypes" ) when { principal.department == "HardwareEngineering" && principal.jobLevel >= 5 };
この例では、ユーザーalice
がファイルタイプJPEG
の任意のリソースの表示をすることを許可するポリシーの作成方法を示します。
permit( principal == User::"alice", action == Action::"view", resource ) when { resource.fileType == "JPEG" };
アクションにはコンテキスト属性 があります。これらの属性は、認証リクエストcontext
の で渡す必要があります。この例では、ユーザーがalice
任意のreadOnly
アクションを実行できるようにするポリシーを作成する方法を示します。スキーマ内のアクションに appliesTo
プロパティを設定することもできます。これは、例えば、ユーザーがタイプ のリソースに対してのみ認証を試みることができるようにする場合に、リソースViewPhoto
に対して有効なアクションを指定しますPhotoFlash::Photo
。
permit( principal == PhotoFlash::User::"alice", action, resource ) when { context has readOnly && context.readOnly == true };
ただし、スキーマ内のアクションのプロパティを設定するよりよい方法は、アクションを機能アクショングループに配置することです。例えば、 という名前のアクションReadOnlyPhotoAccess
を作成し、 PhotoFlash::Action::"ViewPhoto"
をアクショングループReadOnlyPhotoAccess
として のメンバーに設定できます。この例では、Alice にそのグループ内の読み取り専用アクションへのアクセスを許可するポリシーを作成する方法を示します。
permit( principal == PhotoFlash::User::"alice", action, resource ) when { action in PhotoFlash::Action::"ReadOnlyPhotoAccess" };
この例では、すべてのプリンシパルがowner
属性を持つリソースに対して任意のアクションを実行することを許可するポリシーを作成する方法を示します。
permit( principal, action, resource ) when { principal == resource.owner };
この例では、プリンシパルのdepartment
属性がリソースのdepartment
属性と一致する場合に、プリンシパルに任意のリソースの表示を許すポリシーを作成する方法を示します。
注記
ポリシー条件に指定された属性がないエンティティは、承認決定時にポリシーが無視され、そのエンティティではそのポリシーの評価が失敗します。たとえば、department
属性を持たないプリンシパルには、このポリシーではどのリソースへのアクセスも許可されません。
permit( principal, action == Action::"view", resource ) when { principal.department == resource.owner.department };
この例では、プリンシパルがリソースの owner
である場合、またはプリンシパルがリソースの admins
グループの一部である場合に、プリンシパルがリソースに対して任意のアクションを実行できるようにするポリシーを作成する方法を示します。
permit( principal, action, resource, ) when { principal == resource.owner | resource.admins.contains(principal) };