

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

# 例 3: OPA と Rego を使用した RBAC と ABAC のマルチテナントアクセスコントロール
<a name="opa-abac-rbac-examples"></a>

前のセクションの RBAC の例を強化するために、ユーザーに属性を追加できます。 

![OPA と Rego を使用した RBAC と ABAC](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa-example-3.png)


この例では、前の例と同じロールが含まれていますが、ユーザー属性 を追加します`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 ルールがアクセスを拒否するためです。