in source/lambda/deploy_es/index.py [0:0]
def upsert_role_mapping(es_endpoint, role_name, es_app_data=None,
added_user=None, added_role=None, added_host=None):
awsauth = auth_aes(es_endpoint)
logger.info('role_name: ' + role_name)
path = '_opendistro/_security/api/rolesmapping/' + role_name
res = query_aes(es_endpoint, awsauth, 'GET', path)
if res.status_code == 404:
logger.info('Create new role/mapping')
# create role
path_roles = '_opendistro/_security/api/roles/' + role_name
payload = json.loads(es_app_data['security']['role_es_loader'])
logger.debug(json.dumps(payload, default=json_serial))
res_new = query_aes(es_endpoint, awsauth, 'PATCH', path_roles, payload)
logger.info(output_message('role_' + role_name, res_new))
time.sleep(3)
# role mapping for new role
payload = {'backend_roles': [es_loader_role, ]}
res = query_aes(es_endpoint, awsauth, 'PATCH', path, payload)
logger.info(output_message('role_mapping_' + role_name, res))
return True
elif (res.status_code == 200
and role_name not in ('all_access', 'security_manager')):
logger.info('Update role')
path_roles = '_opendistro/_security/api/roles/' + role_name
payload = json.loads(es_app_data['security']['role_es_loader'])
logger.debug(json.dumps(payload, default=json_serial))
res_new = query_aes(es_endpoint, awsauth, 'PATCH', path_roles, payload)
logger.info(output_message('role_' + role_name, res_new))
logger.debug('Current Configration: ' + res.text)
res_json = json.loads(res.text)
current_conf = res_json[role_name]
need_updating = 0
if added_user and (added_user not in current_conf['users']):
current_conf['users'].append(added_user)
current_conf['users'] = list(sorted(set(current_conf['users'])))
need_updating += 1
if added_role and (added_role not in current_conf['backend_roles']):
current_conf['backend_roles'].append(added_role)
current_conf['backend_roles'] = list(
sorted(set(current_conf['backend_roles'])))
need_updating += 1
if added_host and (added_host in current_conf['hosts']):
current_conf['hosts'].append(added_host)
current_conf['hosts'] = list(sorted(set(current_conf['hosts'])))
need_updating += 1
if need_updating:
if 'hidden' in current_conf:
del current_conf['hidden']
if 'reserved' in current_conf:
del current_conf['reserved']
logger.info('New configuration ' + json.dumps(current_conf))
res = query_aes(es_endpoint, awsauth, 'PATCH', path, current_conf)
logger.info(output_message('role_apping_' + role_name, res))
else:
logger.debug("no updating opendistro's role mapping")