Jesum Yip
12/15/2021, 2:50 AM---
apiVersion: "api.cerbos.dev/v1"
description: "Dynamic role to determine if this is a HM employee."
derivedRoles:
name: hm_employee
definitions:
- name: internal_user
parentRoles: ["valid_user"]
condition:
match:
expr: request.aux_data.jwt.is_hm_employee == "TRUE"
---
apiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "1"
importDerivedRoles:
- hm_employee
resource: "businessassets"
rules:
- actions: ['read']
effect: EFFECT_ALLOW
derivedRoles:
- internal_user
Jesum Yip
12/15/2021, 2:51 AMAnd then my code calls /api/check with the following JSON
{
"requestId": "xxxxxxx",
"actions": ["read"],
"resource": {
"policyVersion": "1",
"kind": "businessassets",
},
"principal": {
"id": "user01",
"policyVersion": "1",
"roles": ["valid_user"],
},
"includeMeta": true,
"auxData": {
"jwt": {
"token": "xxx.yyy.zzz",
}
}
}
Jesum Yip
12/15/2021, 2:52 AMJesum Yip
12/15/2021, 2:52 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 2:52 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 2:53 AMDennis (Cerbos)
Dennis (Cerbos)
Jesum Yip
12/15/2021, 2:53 AMJesum Yip
12/15/2021, 2:54 AMJesum Yip
12/15/2021, 2:54 AMJesum Yip
12/15/2021, 2:55 AM{
"requestId": "xxxxxxx",
"actions": ["read"],
"resource": {
"policyVersion": "1",
"kind": "businessassets",
},
"principal": {
"id": "user01",
"policyVersion": "1",
"roles": ["valid_user"],
},
"includeMeta": true,
"auxData": {
"jwt": {
"token": "xxx.yyy.zzz",
}
}
}
with the json policy above, would i get EFFECT_ALLOW response if i have this resource policy:
apiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "1"
resource: "businessassets"
rules:
- actions: ['read']
effect: EFFECT_ALLOW
roles:
- valid_user
Dennis (Cerbos)
apiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "1"
importDerivedRoles:
- hm_employee
resource: "businessassets"
rules:
- actions: ['read']
effect: EFFECT_ALLOW
derivedRoles:
- internal_user
This is your resource policy, right?Jesum Yip
12/15/2021, 2:56 AMapiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "1"
resource: "businessassets"
rules:
- actions: ['read']
effect: EFFECT_ALLOW
roles:
- valid_user
Jesum Yip
12/15/2021, 2:56 AMDennis (Cerbos)
Dennis (Cerbos)
expr: request.aux_data.jwt.is_hm_employee == "TRUE"
Jesum Yip
12/15/2021, 2:58 AMJesum Yip
12/15/2021, 2:58 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 2:59 AMJesum Yip
12/15/2021, 2:59 AMJesum Yip
12/15/2021, 2:59 AMapiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "1"
resource: "businessassets"
rules:
- actions: ['read']
effect: EFFECT_ALLOW
roles:
- valid_user
Jesum Yip
12/15/2021, 3:00 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:00 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:01 AMJesum Yip
12/15/2021, 3:01 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:03 AMDennis (Cerbos)
Dennis (Cerbos)
Jesum Yip
12/15/2021, 3:06 AMJesum Yip
12/15/2021, 3:06 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:15 AMJesum Yip
12/15/2021, 3:15 AMcurl -POST -H "Content-type: application/json" -d '{
"requestId": "1",
"actions": ["read"],
"resource": {
"policyVersion": "1",
"kind": "businessassets",
},
"principal": {
"id": "user01",
"policyVersion": "1",
"roles": ["valid_user"],
},
"includeMeta": true,
"auxData": {
"jwt": {
"token": "xxx.yyy.zzz",
}
}
}' '<https://mycerbosurl/api/check>'
Jesum Yip
12/15/2021, 3:15 AMJesum Yip
12/15/2021, 3:16 AM{
"code": 3,
"message": "invalid character '}' looking for beginning of object key string",
"details": []
}
Jesum Yip
12/15/2021, 3:17 AMDennis (Cerbos)
auxData
from the request and try again?Jesum Yip
12/15/2021, 3:18 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:18 AMJesum Yip
12/15/2021, 3:18 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:19 AMJesum Yip
12/15/2021, 3:20 AMJesum Yip
12/15/2021, 3:21 AMDennis (Cerbos)
{
"requestId": "1",
"actions": [
"read"
],
"resource": {
"policyVersion": "1",
"kind": "businessassets"
},
"principal": {
"id": "user01",
"policyVersion": "1",
"roles": [
"valid_user"
]
},
"includeMeta": true
}
Dennis (Cerbos)
Jesum Yip
12/15/2021, 3:23 AMJesum Yip
12/15/2021, 3:24 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:24 AMJesum Yip
12/15/2021, 3:25 AM{
"code": 3,
"message": "invalid CheckResourceSetRequest.Resource: embedded message failed validation | caused by: invalid ResourceSet.Instances: value must contain between 1 and 20 pairs, inclusive",
"details": []
}
Jesum Yip
12/15/2021, 3:25 AMJesum Yip
12/15/2021, 3:25 AMDennis (Cerbos)
resource
field should have a dictionary of resource instances that we are checking access to.
Please refer to https://docs.cerbos.dev/cerbos/latest/api/index.html#_checkresourceset_apicheck (callout 6)Jesum Yip
12/15/2021, 3:29 AMDennis (Cerbos)
{
"requestId": "1",
"actions": [
"read"
],
"resource": {
"policyVersion": "1",
"kind": "businessassets",
"instances": {
"id001": {}
}
},
"principal": {
"id": "user01",
"policyVersion": "1",
"roles": [
"valid_user"
]
},
"includeMeta": true
}
Jesum Yip
12/15/2021, 3:32 AMJesum Yip
12/15/2021, 3:33 AMJesum Yip
12/15/2021, 3:33 AMJesum Yip
12/15/2021, 3:33 AMJesum Yip
12/15/2021, 3:33 AMDennis (Cerbos)
{
Jesum Yip
12/15/2021, 3:35 AMJesum Yip
12/15/2021, 3:35 AMJesum Yip
12/15/2021, 3:35 AM{
"requestId": "1",
"resourceInstances": {
"businessassets": {
"actions": {
"read": "EFFECT_DENY"
}
}
},
"meta": {
"resourceInstances": {
"businessassets": {
"actions": {
"read": {
"matchedPolicy": "NO_MATCH"
}
},
"effectiveDerivedRoles": []
}
}
}
}
Jesum Yip
12/15/2021, 3:35 AMJesum Yip
12/15/2021, 3:36 AMJesum Yip
12/15/2021, 3:36 AMJesum Yip
12/15/2021, 3:36 AMJesum Yip
12/15/2021, 3:36 AMJesum Yip
12/15/2021, 3:37 AMJesum Yip
12/15/2021, 3:37 AMJesum Yip
12/15/2021, 3:38 AMDennis (Cerbos)
resource
means resource kind.Jesum Yip
12/15/2021, 3:39 AMJesum Yip
12/15/2021, 3:39 AMJesum Yip
12/15/2021, 3:40 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:41 AMJesum Yip
12/15/2021, 3:41 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:43 AMJesum Yip
12/15/2021, 3:43 AMDennis (Cerbos)
Jesum Yip
12/15/2021, 3:44 AMDennis (Cerbos)
Dennis (Cerbos)
but because line 55 is needed for the json payload, i just have to put some meaningless data in it.an extra comment about this. The response is given per a key in this
instances
object.