blob: a84dc5a451c66b2b55d99e0ec91f10e036d8011b [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
1. Introduction
Authorization APIs introduced in this module make it simpler for applications to use Apache Ranger to authorize
access to their resources. This document includes few examples of authorization requests and corresponding
responses. Libraries in Java and Python will be made available for easier integration in applications using
these languages. Support for other languages will be added later as needed.
2. Terminology
2.1. User
An actor who performs actions on resources. Each user is identified by an unique name. A user can belong
to multiple groups and can have multiple roles. A user can also have multiple attributes, like department
name, work location. Apache Ranger policies can be setup to grant access to resources based on any of the
following: user name, groups the user belongs to, roles the user is assigned to and user attributes.
2.2. Resource
Any object on which actions can be performed. Few examples of resources and actions performed on them:
- file: create, delete, write, read
- table: create, alter, drop, insert, select, delete
- topic: create, alter, delete, produce, consume
Resources are identified by their name, in format: "resource-type:resource-value". Few examples of resource
names:
- path:/warehouse/hive/mktg/visitors
- table:db1.tbl1
- object:s3a://mybucket/p1/p2/data.parquet
Resources can have attributes, like owner, createTime. Access to resources can be granted based on resource
attributes, like: owner of a resource should be allowed all actions.
Resources can have sub-resources, like columns of a table. This is useful in optimizing authorization for
access to a resource and several of its sub-resources in a single request.
2.3. Action
An action performed on a resource. Examples of actions include: query, list, read, write, delete. In the
context of authorization, the action given in the request is used only to record in audit log and does not
affect the authorization decision. The authorization decision is based on the permissions requested for the
resource.
2.4. Permission
A privilege necessary to perform an action on a resources. Apache Ranger policies are used to grant or deny
permissions to users. An action might require one or more permissions. Examples of permissions include:
select, insert, read, write, delete.
2.5. Context
Additional information about the request that can be used to make authorization decisions. Examples of
context information include: access time, client IP address, cluster name, cluster type.
2.6. Decision
The result of the authorization request. The decision can be either "ALLOWED" or "DENIED". The decision is
based on the policies defined in Apache Ranger and the user, resource, permissions and context information
provided in the request.
2.7. Row Filter
For resources that support rows, like tables, Apache Ranger policies can be setup to filter rows that a user
can access. Response from authorization request for such resources can include a row filter that should be
applied by the caller, to ensure that the user only accesses rows they are allowed to. For example, a row
filter can be defined to restrict access to rows in a table based on the department the user belongs to.
2.8. Data Mask
For resources that support data masking, like columns of a table, Apache Ranger policies can be setup to
mask (or transformation) values of columns having sensitive data. Response from authorization request for
such resources can include a data mask that should be applied by the caller, to ensure that the user only
has accesses to masked value of sensitive data. For example, a data mask can be defined on a column having
phone number, credit card number or social security number.
3. Examples
This section includes few examples of authorization requests and corresponding responses. The examples include
authorizing access to a single resource, authorizing access to a resource and sub-resources, authorizing access
to multiple resources in a single request, row-filter and data-mask information in the response.
3.1 Authorize access to a single resource - a path
request:
{
"requestId": "9198b532-a386-4464-9770-d61a8e8bc206",
"user": { "name": "gary.adams", "groups": [ "fte", "mktg" ], "roles": [ "analyst" ] },
"access": { "resource": { "name": ""path:/warehouse/hive/mktg/visitors", "attributes": { "OWNER": "nancy.boxer" } }, "action": "LIST", "permissions": [ "list" ] },
"context": { "serviceName": "s3", "accessTime": 1755543894, "clientIpAddress": "172.16.45.59", "additionalInfo": { "clusterName": "cl1", "clusterType": "onprem" } }
}
result:
{
"requestId": "9198b532-a386-4464-9770-d61a8e8bc206",
"decision": "ALLOWED",
"permissions": {
"list": { "access": { "result": "ALLOWED", "policy": { "id": 1, "version": 1 } }
}
}
}
3.2 Authorize access to a single resource and its sub-resources - a table and 3 columns
request:
{
"requestId": "0a4134c1-44af-42e1-8a27-f15f18e60850",
"user": { "name": "gary.adams", "groups": [ "fte", "mktg" ], "roles": [ "analyst" ] },
"access": { "resource": { "name": ""table:db1.tbl1", "subResources: [ "column:col1", "column:col2", "column:col3" ], "attributes": { "OWNER": "nancy.boxer" } }, "action": "QUERY", "permissions": [ "select" ] },
"context": { "serviceName": "hive", "accessTime": 1755543894, "clientIpAddress": "172.16.120.64", "additionalInfo": { "clientType": "beeline", "clusterName": "cl1", "clusterType": "onprem" } }
}
result:
{
"requestId": "0a4134c1-44af-42e1-8a27-f15f18e60850",
"decision": "ALLOWED",
"permissions": {
"select": {
"rowFilter": { "filterExpr": "dept = 'mktg'", "policy": { "id": 11, "version": 3 } }
"subResources": {
"column:col1": { "access": { "decision": "ALLOWED", "policy": { "id": 5, "version": 1 } },
"dataMask": { "maskType": "MASK_SHOW_LAST_4", "maskedValue": "mask_show_last_n({col}, 4, 'x', 'x', 'x', -1, '1')", "policy": { "id": 26, "version": 2 } } },
"column:col2": { "access": { "decision": "ALLOWED", "policy": { "id": 2, "version": 1 } },
"dataMask": { "maskType": "MASK_HASH", "maskedValue": "mask_hash({col})", "policy": { "id": 27, "version": 4 } } },
"column:col3": { "access": { "decision": "ALLOWED", "policy": { "id": 3, "version": 1 } },
"dataMask": { "maskType": "MASK_HASH", "maskedValue": "mask_hash({col})", "policy": { "id": 27, "version": 4 } } }
}
}
}
}
3.3: Authorize access to multiple resources - select on 2 tables and create on a table
request:
{
"requestId": "4aa68265-34f1-4115-b026-d88dff292669",
"user": { "name": "gary.adams", "groups": [ "fte", "mktg" ], "roles": [ "analyst" ] }
"accesses": [
{ "resource": { "name": "table:db1.tbl1", "attributes": { "OWNER": "nancy.boxer" } }, "action": "QUERY", "permissions": [ "select" ] },
{ "resource": { "name": "table:db1.tbl2", "attributes": { "OWNER": "nancy.boxer" } }, "action": "QUERY", "permissions": [ "select" ] },
{ "resource": { "name": "table:db1.vw1" }, "action": "CREATE", "permissions": [ "create" ] }
],
"context": { "serviceName": "hive", "accessTime": 1755543894, "clientIpAddress": "172.16.27.152", "additionalInfo": { "clientType": "jdbc", "clusterName": "cl1", "clusterType": "onprem" } }
}
result:
{
"requestId": "4aa68265-34f1-4115-b026-d88dff292669",
"decision": "DENIED",
"accesses": [
{
"decision": "ALLOWED",
"permissions": {
"select": {
"access": { "decision": "ALLOWED", "policy": { "id": 1, "version": 1 } },
"rowFilter": { "filterExpr": "dept = 'mktg'", "policy": { "id": 11, "version": 3 } }
}
}
},
{
"decision": "DENIED",
"permissions": {
"select": {
"access": { "decision": "DENIED", "policy": { "id": 21, "version": 1 } }
}
}
},
{
"decision": "ALLOWED",
"permissions": {
"create": {
"access": { "decision": "ALLOWED", "policy": { "id": 23, "version": 3 } }
}
}
}
]
}