例 4: OPA と Rego による UI フィルタリング - AWS 規範ガイダンス

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

例 4: OPA と Rego による UI フィルタリング

OPA と Rego の柔軟性は、UI 要素をフィルタリングする機能をサポートします。次の例は、OPA 部分ルールが RBAC を使用して UI に表示する要素について承認を決定する方法を示しています。このメソッドは、OPA で UI 要素をフィルタリングできるさまざまな方法の 1 つです。

OPA と Rego による UI フィルタリング

この例では、単一ページのウェブアプリケーションには 4 つのボタンがあります。Bob の 、Shirley の 、Alice の UI をフィルタリングして、ロールに対応するボタンのみを表示したいとします。UI はユーザーからリクエストを受け取ると、OPA 部分ルールをクエリして、UI に表示するボタンを決定します。Bob (ロール 付きviewer) が UI にリクエストを行うと、クエリは OPA に入力として以下を渡します。

{ "role": "viewer" }

OPA は、RBAC 用に構造化された外部データを使用してアクセスを決定します。

{ "roles": { "viewer": ["viewUsers", "viewData"], "dataViewOnly": ["viewData"], "admin": ["viewUsers", "viewData", "updateUsers", "updateData"] } }

OPA 部分ルールは、外部データと入力の両方を使用して、許可されたアクションのリストを生成します。

user_permissions[permissions] { permissions := data.roles[input.role][_] }

部分ルールでは、OPA はクエリの一部としてinput.role指定された を使用して、表示するボタンを決定します。Bob にはロール がありviewer、外部データはビューワーに viewUsersと の 2 つのアクセス許可があることを指定しますviewData。したがって、Bob (およびビューワーロールを持つ他のユーザー) のこのルールの出力は次のとおりです。

{ "user_permissions": [ "viewData", "viewUsers" ] }

dataViewOnly ロールを持つ Shirley の出力には、アクセス許可ボタン が含まれますviewDataadmin ロールを持つ Alice の出力には、これらのアクセス許可がすべて含まれます。これらのレスポンスは、OPA が に対してクエリされたときに UI に返されますuser_permissions。その後、アプリケーションはこのレスポンスを使用して、viewUsersButton、、updateUsersButton、および viewDataButtonを非表示または表示できますupdateDataButton