翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 3: OPA と Rego を使用した RBAC と ABAC のマルチテナントアクセスコントロール
前のセクションの RBAC の例を強化するために、ユーザーに属性を追加できます。
この例では、前の例と同じロールが含まれていますが、ユーザー属性 を追加しますaccount_lockout_flag。これは、特定のロールに関連付けられていないユーザー固有の属性です。この例で以前に使用したものと同じ RBAC 外部データを使用できます。
{ "roles": { "tenant_a": { "all_access_role": ["viewData", "updateData"] }, "tenant_b": { "update_data_role": ["updateData"], "view_data_role": ["viewData"] } } }
account_lockout_flag ユーザー属性は、ユーザー Bob /viewData/tenant_aの の OPA クエリへの入力の一部としてデータサービスに渡すことができます。
{ "tenant_id": "tenant_a", "role": "all_access_role", "path": ["viewData", "tenant_a"], "method": "GET", "account_lockout_flag": "true" }
アクセス決定のためにクエリされるルールは、前の例と似ていますが、 account_lockout_flag 属性をチェックするための追加の行が含まれています。
default allowViewData = false allowViewData = true { input.method == "GET" input.path = ["viewData", tenant_id] input.tenant_id == tenant_id role_permissions := data.roles[input.tenant_id][input.role][_] contains(role_permissions, "viewData") input.account_lockout_flag == "false" }
このクエリは、 の承認決定を返しますfalse。これは、 account_lockout_flag attributeが Bob true用であり、Bob allowViewData に正しいロールとテナントがあるにもかかわらず、Rego ルールがアクセスを拒否するためです。