blob: 1f4ed353a1cb8ad1517e07d55330ad662c8619d8 [file] [log] [blame]
#!/usr/bin/env python
#
# 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.
from apache_ranger.client.ranger_client import *
from apache_ranger.model.ranger_policy import *
from apache_ranger.model.ranger_service import *
from apache_ranger.model.ranger_service_resource import *
from apache_ranger.model.ranger_service_tags import *
from apache_ranger.model.ranger_tagdef import *
from apache_ranger.model.ranger_tag import *
from datetime import datetime
## create a client to connect to Apache Ranger admin server
ranger_url = 'http://localhost:6080'
ranger_auth = ('admin', 'rangerR0cks!')
# For Kerberos authentication
#
# from requests_kerberos import HTTPKerberosAuth
#
# ranger_auth = HTTPKerberosAuth()
print('Using Ranger at ' + ranger_url);
ranger = RangerClient(ranger_url, ranger_auth)
# to disable SSL certificate validation (not recommended for production use!)
#
# ranger.session.verify = False
print('Listing service-defs..')
service_defs = ranger.find_service_defs()
print(' ' + str(len(service_defs)) + ' service-defs found')
for service_def in service_defs:
print(' ' + 'id: ' + str(service_def.id) + ', name: ' + service_def.name)
now = datetime.now()
service_name = 'dev_hive-' + now.strftime('%Y%m%d-%H%M%S-%f')
print('Creating service: name=' + service_name)
service = RangerService({'name': service_name, 'type': 'hive'})
service.configs = {'username':'hive', 'password':'hive', 'jdbc.driverClassName': 'org.apache.hive.jdbc.HiveDriver', 'jdbc.url': 'jdbc:hive2://ranger-hadoop:10000', 'hadoop.security.authorization': 'true'}
created_service = ranger.create_service(service)
print(' created service: id: ' + str(created_service.id) + ', name: ' + created_service.name)
service_id = created_service.id
print('Retrieving service: id=' + str(service_id))
retrieved_service = ranger.get_service_by_id(service_id)
print(' retrieved service: id: ' + str(retrieved_service.id) + ', name: ' + retrieved_service.name)
print('Retrieving service: name=' + service_name)
retrieved_service = ranger.get_service(service_name)
print(' retrieved service: id: ' + str(retrieved_service.id) + ', name: ' + retrieved_service.name)
print('Updating service: id=' + str(service_id))
saved_value = created_service.displayName
created_service.displayName = service_name + '-UPDATE1'
updated_service1 = ranger.update_service_by_id(service_id, created_service)
print(' updated service: id: ' + str(updated_service1.id) + ', displayName: ' + saved_value + ', updatedDisplayName: ' + updated_service1.displayName)
print('Updating service: name=' + service_name)
saved_value = updated_service1.displayName
updated_service1.displayName = service_name + '-UPDATE2'
updated_service2 = ranger.update_service(service_name, updated_service1)
print(' updated service: id: ' + str(updated_service2.id) + ', displayName: ' + saved_value + ', updatedDisplayName: ' + updated_service2.displayName)
print('Listing services..')
services = ranger.find_services()
print(' ' + str(len(services)) + ' services found')
for svc in services:
print(' ' + 'id: ' + str(svc.id) + ', type: ' + svc.type + ', name: ' + svc.name)
print('Deleting service id=' + str(service_id))
ranger.delete_service_by_id(service_id)
print(' deleted service: id: ' + str(service_id) + ', name: ' + updated_service2.name)
print('Deleting service: name=' + service.name)
service_to_delete = ranger.create_service(service)
print(' created service: id: ' + str(service_to_delete.id) + ', name: ' + service_to_delete.name)
ranger.delete_service(service_to_delete.name)
print(' deleted service: id: ' + str(service_to_delete.id) + ', name: ' + service_to_delete.name)
print('Listing services..')
services = ranger.find_services()
print(' ' + str(len(services)) + ' services found')
for svc in services:
print(' ' + 'id: ' + str(svc.id) + ', type: ' + svc.type + ', name: ' + svc.name)
policy_name = 'test policy'
print('Creating policy: name=' + policy_name)
created_service = ranger.create_service(service)
print(' created service: id: ' + str(created_service.id) + ', name: ' + created_service.name)
service_id = created_service.id
service_name = created_service.name
policy = RangerPolicy()
policy.service = service_name
policy.name = policy_name
policy.description = 'test description'
policy.resources = { 'database': RangerPolicyResource({ 'values': ['test_db'] }),
'table': RangerPolicyResource({ 'values': ['test_tbl'] }),
'column': RangerPolicyResource({ 'values': ['*'] }) }
policy.add_resource({ 'database': RangerPolicyResource({ 'values': ['test_db1'] }),
'table': RangerPolicyResource({ 'values': ['test_tbl1'] }),
'column': RangerPolicyResource({ 'values': ['*'] }) })
policy.add_resource({ 'database': RangerPolicyResource({ 'values': ['test_db2'] }),
'table': RangerPolicyResource({ 'values': ['test_tbl2'] }),
'column': RangerPolicyResource({ 'values': ['*'] }) })
allowItem1 = RangerPolicyItem()
allowItem1.users = [ 'admin' ]
allowItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'create' }),
RangerPolicyItemAccess({ 'type': 'alter' }),
RangerPolicyItemAccess({ 'type': 'select' }) ]
denyItem1 = RangerPolicyItem()
denyItem1.users = [ 'admin' ]
denyItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'drop' }) ]
policy.policyItems = [ allowItem1 ]
policy.denyPolicyItems = [ denyItem1 ]
created_policy = ranger.create_policy(policy)
print(' created policy: id: ' + str(created_policy.id) + ', name: ' + created_policy.name)
policy_id = created_policy.id
data_mask_policy_name = 'test masking policy'
print('Creating data-masking policy: name=' + data_mask_policy_name)
data_mask_policy = RangerPolicy()
data_mask_policy.service = service_name
data_mask_policy.policyType = RangerPolicy.POLICY_TYPE_DATAMASK
data_mask_policy.name = data_mask_policy_name
data_mask_policy.description = 'test description'
data_mask_policy.resources = { 'database': RangerPolicyResource({ 'values': ['test_db'] }),
'table': RangerPolicyResource({ 'values': ['test_tbl'] }),
'column': RangerPolicyResource({ 'values': ['test_col'] }) }
policyItem1 = RangerDataMaskPolicyItem()
policyItem1.users = [ 'admin' ]
policyItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'select' }) ]
policyItem1.dataMaskInfo = RangerPolicyItemDataMaskInfo({ 'dataMaskType': 'MASK_SHOW_LAST_4' })
data_mask_policy.dataMaskPolicyItems = [ policyItem1 ]
created_data_mask_policy = ranger.create_policy(data_mask_policy)
print(' created data-masking policy: id: ' + str(created_data_mask_policy.id) + ', name: ' + created_data_mask_policy.name)
row_filter_policy_name = 'test row filter policy'
print('Creating row-filtering policy: name=' + row_filter_policy_name)
row_filter_policy = RangerPolicy()
row_filter_policy.service = service_name
row_filter_policy.policyType = RangerPolicy.POLICY_TYPE_ROWFILTER
row_filter_policy.name = row_filter_policy_name
row_filter_policy.description = 'test description'
row_filter_policy.resources = { 'database': RangerPolicyResource({ 'values': ['test_db'] }),
'table': RangerPolicyResource({ 'values': ['test_tbl'] }) }
policyItem1 = RangerRowFilterPolicyItem()
policyItem1.users = [ 'admin' ]
policyItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'select' }) ]
policyItem1.rowFilterInfo = RangerPolicyItemRowFilterInfo({ 'filterExpr': 'country_code = "US"' })
row_filter_policy.rowFilterPolicyItems = [ policyItem1 ]
create_row_filter_policy = ranger.create_policy(row_filter_policy)
print(' created row-filtering policy: id: ' + str(create_row_filter_policy.id) + ', name: ' + create_row_filter_policy.name)
print('Retrieving policy: id=' + str(policy_id))
retrieved_policy = ranger.get_policy_by_id(policy_id)
print(' retrieved policy: id: ' + str(retrieved_policy.id) + ', name: ' + retrieved_policy.name)
print('Retrieving policy: service_name=' + service_name + ', policy_name=' + data_mask_policy.name)
retrieved_policy = ranger.get_policy(service_name, data_mask_policy.name)
print(' retrieved policy: id: ' + str(retrieved_policy.id) + ', name: ' + retrieved_policy.name)
print('Retrieving policy: service_name=' + service_name + ', policy_name=' + row_filter_policy.name)
retrieved_policy = ranger.get_policy(service_name, row_filter_policy.name)
print(' retrieved policy: id: ' + str(retrieved_policy.id) + ', name: ' + retrieved_policy.name)
print('Retrieving policies in service ' + created_policy.service + '..')
policies = ranger.get_policies_in_service(created_policy.service)
print(' ' + str(len(policies)) + ' policies found')
for plcy in policies:
print(' id: ' + str(plcy.id) + ', service: ' + plcy.service + ', name: ' + plcy.name)
print('Updating policy: id=' + str(policy_id))
saved_value = created_policy.description
created_policy.description = 'updated description - #1'
updated_policy1 = ranger.update_policy_by_id(policy_id, created_policy)
print(' updated policy: id: ' + str(updated_policy1.id) + ', description: ' + saved_value + ', updatedDescription: ' + updated_policy1.description)
print('Updating policy: service_name=' + service_name + ', policy_name=' + policy_name)
saved_value = updated_policy1.description
updated_policy1.description = 'updated description - #2'
updated_policy2 = ranger.update_policy(service_name, policy_name, updated_policy1)
print(' updated policy: id: ' + str(updated_policy2.id) + ', description: ' + saved_value + ', updatedDescription: ' + updated_policy2.description)
tagdef_test1 = RangerTagDef({'name': 'test1', 'attributeDefs': [ RangerTagAttributeDef({'name': 'attr1', 'type': 'string'}) ]})
tagdef_test2 = RangerTagDef({'name' : 'test2'})
tag_test1_val1 = RangerTag({'type': 'test1', 'attributes': {'attr1': 'val1'}})
tag_test1_val2 = RangerTag({'type': 'test1', 'attributes': {'attr1': 'val2'}})
tag_test2 = RangerTag({'type': 'test2'})
db1 = RangerServiceResource({'id': 1, 'serviceName': service_name})
db1.resourceElements = { 'database': RangerPolicyResource({ 'values': [ 'db1' ]})}
db2 = RangerServiceResource({'id': 2, 'serviceName': service_name})
db2.resourceElements = { 'database': RangerPolicyResource({ 'values': [ 'db2' ]})}
tags = RangerServiceTags({'serviceName': service_name})
tags.op = RangerServiceTags.OP_SET
tags.tagDefinitions = { 0: tagdef_test1, 1: tagdef_test2 }
tags.tags = { 0: tag_test1_val1, 1: tag_test1_val2, 2: tag_test2 }
tags.serviceResources = [ db1, db2 ]
tags.resourceToTagIds = { 1: [ 0, 2 ], 2: [ 1, 2 ]}
print('Importing tags: ' + str(tags))
ranger.import_service_tags(service_name, tags)
service_tags = ranger.get_service_tags(service_name)
print('Imported tags: ' + str(service_tags))
tags.op = RangerServiceTags.OP_DELETE
tags.tagDefinitions = None
tags.tags = None
tags.resourceToTagIds = None
print('Deleting tags: ' + str(tags))
ranger.import_service_tags(service_name, tags)
service_tags = ranger.get_service_tags(service_name)
print('Service tags after delete: ' + str(service_tags))
print('Deleting policy: id=' + str(policy_id))
ranger.delete_policy_by_id(policy_id)
print(' deleted policy: id: ' + str(policy_id) + ', name: ' + updated_policy2.name)
print('Deleting policy: service_name=' + data_mask_policy.service + ', policy_name=' + data_mask_policy.name)
ranger.delete_policy(data_mask_policy.service, data_mask_policy.name)
print(' deleted policy: id: ' + str(data_mask_policy.id) + ', name: ' + data_mask_policy.name)
print('Deleting policy: service_name=' + row_filter_policy.service + ', policy_name=' + row_filter_policy.name)
ranger.delete_policy(row_filter_policy.service, row_filter_policy.name)
print(' deleted policy: id: ' + str(row_filter_policy.id) + ', name: ' + row_filter_policy.name)
ranger.delete_service_by_id(service_id)
print('Listing policies..')
policies = ranger.find_policies()
print(' ' + str(len(policies)) + ' policies found')
for policy in policies:
print(' id: ' + str(policy.id) + ', service: ' + policy.service + ', name: ' + policy.name)
print('Listing security zones..')
security_zones = ranger.find_security_zones()
print(' ' + str(len(security_zones)) + ' security zones found')
for security_zone in security_zones:
print(' id: ' + str(security_zone.id) + ', name: ' + security_zone.name)
print('Listing roles..')
roles = ranger.find_roles()
print(' ' + str(len(roles)) + ' roles found')
for role in roles:
print(' id: ' + str(role.id) + ', name: ' + role.name)