エンティティ (ABAC) の属性へのアクセスを許可します。 - Amazon Verified Permissions

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

エンティティ (ABAC) の属性へのアクセスを許可します。

属性ベースのアクセスコントロール (ABAC) は、属性に基づいて許可を定義する認可戦略です。Verified Permissionsでは、プリンシパル、アクション、リソースに属性を添付できます。すると、これらの属性は、リクエストのコンテキストを構成するプリンシパル、アクション、リソースの属性を評価するポリシーの when および unless 句内で参照できるようになります。

次の例では、Cedar ポリシー言語リファレンスガイドの「スキーマの例」セクションで PhotoFlash 説明されている という架空のアプリケーションで定義された属性を使用します。

この例では、ジョブ レベル 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) };