From b9be18f281c91bb7bb2d23f1119e5c99a3456801 Mon Sep 17 00:00:00 2001 From: sayali Date: Wed, 27 Jan 2021 19:10:13 -0800 Subject: [PATCH 01/20] Role and User update logs --- lemur/auth/views.py | 7 ++++--- lemur/logs/service.py | 15 ++++++++++++++- lemur/roles/service.py | 11 ++++++++++- lemur/users/service.py | 6 ++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/lemur/auth/views.py b/lemur/auth/views.py index eaed419d..fe3b8cf5 100644 --- a/lemur/auth/views.py +++ b/lemur/auth/views.py @@ -20,6 +20,7 @@ from lemur.common.utils import get_psuedo_random_string from lemur.users import service as user_service from lemur.roles import service as role_service +from lemur.logs import service as log_service from lemur.auth.service import create_token, fetch_token_header, get_rsa_public_key from lemur.auth import ldap @@ -184,8 +185,6 @@ def create_user_roles(profile): current_app.config["LEMUR_DEFAULT_ROLE"], description="This is the default Lemur role.", ) - if not default.third_party: - role_service.set_third_party(default.id, third_party_status=True) roles.append(default) return roles @@ -198,7 +197,7 @@ def update_user(user, profile, roles): :param profile: :param roles: """ - + log_service.audit_log("TEST", user.name, "Edit role") # if we get an sso user create them an account if not user: user = user_service.create( @@ -215,6 +214,8 @@ def update_user(user, profile, roles): for ur in user.roles: if not ur.third_party: roles.append(ur) + else: + log_service.audit_log("unassign_role", ur.name, f"Un-assigning the role for {user.name}") # update any changes to the user user_service.update( diff --git a/lemur/logs/service.py b/lemur/logs/service.py index f4949911..96b4b14f 100644 --- a/lemur/logs/service.py +++ b/lemur/logs/service.py @@ -7,7 +7,7 @@ :license: Apache, see LICENSE for more details. .. moduleauthor:: Kevin Glisson """ -from flask import current_app +from flask import current_app, g from lemur import database from lemur.logs.models import Log @@ -34,6 +34,19 @@ def create(user, type, certificate=None): database.commit() +def audit_log(action, entity, message): + """ + Logs given action + :param action: The action being logged e.g. assign_role, create_role etc + :param entity: The entity undergoing the action e.g. name of the role + :param message: Additional info e.g. Role being assigned to user X + :return: + """ + current_app.logger.info( + f"[lemur-audit] action: {action}, user: {g.current_user.email}, entity: {entity} [{message}]" + ) + + def get_all(): """ Retrieve all logs from the database. diff --git a/lemur/roles/service.py b/lemur/roles/service.py index fa4c9c97..cb733d40 100644 --- a/lemur/roles/service.py +++ b/lemur/roles/service.py @@ -12,6 +12,7 @@ from lemur import database from lemur.roles.models import Role from lemur.users.models import User +from lemur.logs import service as log_service def update(role_id, name, description, users): @@ -29,6 +30,8 @@ def update(role_id, name, description, users): role.description = description role.users = users database.update(role) + + log_service.audit_log("update_role", name, f"Role with id {role_id} updated") return role @@ -44,6 +47,8 @@ def set_third_party(role_id, third_party_status=False): role = get(role_id) role.third_party = third_party_status database.update(role) + + log_service.audit_log("update_role", role.name, f"Updated third_party_status={third_party_status}") return role @@ -71,6 +76,7 @@ def create( if users: role.users = users + log_service.audit_log("create_role", name, "Creating new role") return database.create(role) @@ -101,7 +107,10 @@ def delete(role_id): :param role_id: :return: """ - return database.delete(get(role_id)) + + role = get(role_id) + log_service.audit_log("delete_role", role.name, "Deleting role") + return database.delete(role) def render(args): diff --git a/lemur/users/service.py b/lemur/users/service.py index 8fb91aa3..a67f0262 100644 --- a/lemur/users/service.py +++ b/lemur/users/service.py @@ -8,6 +8,7 @@ .. moduleauthor:: Kevin Glisson """ from lemur import database +from lemur.logs import service as log_service from lemur.users.models import User @@ -31,6 +32,7 @@ def create(username, password, email, active, profile_picture, roles): profile_picture=profile_picture, ) user.roles = roles + log_service.audit_log("create_user", username, f"Creating new user") return database.create(user) @@ -52,6 +54,8 @@ def update(user_id, username, email, active, profile_picture, roles): user.active = active user.profile_picture = profile_picture update_roles(user, roles) + + log_service.audit_log("update_user", username, f"Updating user with id {user_id}") return database.update(user) @@ -70,6 +74,7 @@ def update_roles(user, roles): break else: user.roles.remove(ur) + log_service.audit_log("unassign_role", ur.name, f"Un-assigning the role for user {user.username}") for r in roles: for ur in user.roles: @@ -77,6 +82,7 @@ def update_roles(user, roles): break else: user.roles.append(r) + log_service.audit_log("assign_role", ur.name, f"Assigning the role to user {user.username}") def get(user_id): From f14a236739853c70ed426bb2f0fdc2b05a7082f7 Mon Sep 17 00:00:00 2001 From: sayali Date: Wed, 27 Jan 2021 22:57:33 -0800 Subject: [PATCH 02/20] lint fix --- lemur/users/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lemur/users/service.py b/lemur/users/service.py index a67f0262..293288ce 100644 --- a/lemur/users/service.py +++ b/lemur/users/service.py @@ -32,7 +32,7 @@ def create(username, password, email, active, profile_picture, roles): profile_picture=profile_picture, ) user.roles = roles - log_service.audit_log("create_user", username, f"Creating new user") + log_service.audit_log("create_user", username, "Creating new user") return database.create(user) From fe2fc0eadd2ff3e4d46210b9c2ed7a3951ee5a4e Mon Sep 17 00:00:00 2001 From: sayali Date: Thu, 28 Jan 2021 11:19:47 -0800 Subject: [PATCH 03/20] PR comments --- lemur/auth/views.py | 1 - lemur/users/service.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lemur/auth/views.py b/lemur/auth/views.py index fe3b8cf5..5bf80201 100644 --- a/lemur/auth/views.py +++ b/lemur/auth/views.py @@ -197,7 +197,6 @@ def update_user(user, profile, roles): :param profile: :param roles: """ - log_service.audit_log("TEST", user.name, "Edit role") # if we get an sso user create them an account if not user: user = user_service.create( diff --git a/lemur/users/service.py b/lemur/users/service.py index 293288ce..ffc81f5c 100644 --- a/lemur/users/service.py +++ b/lemur/users/service.py @@ -82,7 +82,7 @@ def update_roles(user, roles): break else: user.roles.append(r) - log_service.audit_log("assign_role", ur.name, f"Assigning the role to user {user.username}") + log_service.audit_log("assign_role", r.name, f"Assigning the role to user {user.username}") def get(user_id): From ed57a5a45af148734b0fb037af5daf85c65e176f Mon Sep 17 00:00:00 2001 From: sayali Date: Thu, 28 Jan 2021 13:43:25 -0800 Subject: [PATCH 04/20] Keep default role third-party (old code) --- lemur/auth/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lemur/auth/views.py b/lemur/auth/views.py index 5bf80201..f9eb11d0 100644 --- a/lemur/auth/views.py +++ b/lemur/auth/views.py @@ -185,6 +185,8 @@ def create_user_roles(profile): current_app.config["LEMUR_DEFAULT_ROLE"], description="This is the default Lemur role.", ) + if not default.third_party: + role_service.set_third_party(default.id, third_party_status=True) roles.append(default) return roles From b9b3ae2286d9486c2657e8f6e69cc7fb4395996d Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:38:59 -0800 Subject: [PATCH 05/20] better exception handling --- lemur/certificates/cli.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 4b4b22e9..8f4d9ca7 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -119,6 +119,11 @@ def request_rotation(endpoint, certificate, message, commit): status = SUCCESS_METRIC_STATUS except Exception as e: + sentry.captureException(extra={"certificate_name": str(certificate.name), + "endpoint": str(endpoint.dnsname)}) + current_app.logger.exception( + f"Error rotating certificate: {certificate.name}", exc_info=True + ) print( "[!] Failed to rotate endpoint {0} to certificate {1} reason: {2}".format( endpoint.name, certificate.name, e From c26db968d2c504eae8a1e8f2f674d8c8abb0768e Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:43:21 -0800 Subject: [PATCH 06/20] better logging --- lemur/certificates/cli.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 8f4d9ca7..2bf0a152 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -130,7 +130,9 @@ def request_rotation(endpoint, certificate, message, commit): ) ) - metrics.send("endpoint_rotation", "counter", 1, metric_tags={"status": status}) + metrics.send("endpoint_rotation", "counter", 1, metric_tags={"status": status, + "certificate_name": str(certificate.name), + "endpoint": str(endpoint.dnsname)}) def request_reissue(certificate, commit): From de762d2e535429d78194e97a233f76b746ee3932 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:43:59 -0800 Subject: [PATCH 07/20] better logging --- lemur/certificates/cli.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 2bf0a152..24f8f59a 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -231,7 +231,7 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c print( f"[+] Rotating endpoint: {endpoint.name} to certificate {new_cert.name}" ) - log_data["message"] = "Rotating endpoint" + log_data["message"] = "Rotating one endpoint" log_data["endpoint"] = endpoint.dnsname log_data["certificate"] = new_cert.name request_rotation(endpoint, new_cert, message, commit) @@ -425,7 +425,6 @@ def rotate_region(endpoint_name, new_certificate_name, old_certificate_name, mes 1, metric_tags={ "region": region, - "old_certificate_name": str(old_cert), "new_certificate_name": str(endpoint.certificate.replaced[0].name), "endpoint_name": str(endpoint.dnsname), }, @@ -450,7 +449,6 @@ def rotate_region(endpoint_name, new_certificate_name, old_certificate_name, mes 1, metric_tags={ "status": FAILURE_METRIC_STATUS, - "old_certificate_name": str(old_cert), "new_certificate_name": str(endpoint.certificate.replaced[0].name), "endpoint_name": str(endpoint.dnsname), "message": str(message), From 92dabe5d43bcf0b57285de280ca98eaa9b4fed20 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:44:10 -0800 Subject: [PATCH 08/20] ineffective line --- lemur/certificates/cli.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 24f8f59a..b1b84492 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -239,8 +239,6 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c elif old_cert and new_cert: print(f"[+] Rotating all endpoints from {old_cert.name} to {new_cert.name}") - - log_data["message"] = "Rotating all endpoints" log_data["certificate"] = new_cert.name log_data["certificate_old"] = old_cert.name log_data["message"] = "Rotating endpoint from old to new cert" From 80f83efec2055dc037332a7e0eba22f9ba8f37c5 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:44:19 -0800 Subject: [PATCH 09/20] todo --- lemur/certificates/cli.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index b1b84492..56dd9260 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -374,6 +374,7 @@ def rotate_region(endpoint_name, new_certificate_name, old_certificate_name, mes :param message: Send a rotation notification to the certificates owner. :param commit: Persist changes. :param region: Region in which to rotate the endpoint. + #todo: merge this method with rotate() """ if commit: print("[!] Running in COMMIT mode.") From 089796a84957961a36ef66e285f9eab90e97fea2 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:47:41 -0800 Subject: [PATCH 10/20] bug, intention was to skip a region --- lemur/certificates/cli.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 56dd9260..85b62c41 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -428,6 +428,7 @@ def rotate_region(endpoint_name, new_certificate_name, old_certificate_name, mes "endpoint_name": str(endpoint.dnsname), }, ) + continue if len(endpoint.certificate.replaced) == 1: log_data["certificate"] = endpoint.certificate.replaced[0].name From e250a613444d5a9b7d3aa9f83ccb6ca6dc4b89d1 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:48:39 -0800 Subject: [PATCH 11/20] fixing the message bug --- lemur/certificates/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 85b62c41..e3ce99f6 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -250,7 +250,6 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c else: print("[+] Rotating all endpoints that have new certificates available") - log_data["message"] = "Rotating all endpoints that have new certificates available" for endpoint in endpoint_service.get_all_pending_rotation(): log_data["endpoint"] = endpoint.dnsname if len(endpoint.certificate.replaced) == 1: @@ -284,6 +283,7 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c f"[!] Failed to rotate endpoint {endpoint.name} reason: " "Multiple replacement certificates found." ) + log_data["message"] = "Rotating endpoint from old to new cert" status = SUCCESS_METRIC_STATUS print("[+] Done!") From 0d7e8d77e48bb48d76c28b869876a8073b84f348 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:49:00 -0800 Subject: [PATCH 12/20] comments --- lemur/certificates/cli.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index e3ce99f6..52bcae3a 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -249,6 +249,8 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c current_app.logger.info(log_data) else: + # no certificate name or endpoint was provided, so we will now fetch all endpoints, + # which have are attached to a certificate that has been replaced print("[+] Rotating all endpoints that have new certificates available") for endpoint in endpoint_service.get_all_pending_rotation(): log_data["endpoint"] = endpoint.dnsname From 63e9fdd0e19621788bf3581fa9902c7eb2964e00 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:50:02 -0800 Subject: [PATCH 13/20] rotate also in case of multiple certificates replacing the old one, just select the first one! --- lemur/certificates/cli.py | 43 +++++++++++---------------------------- 1 file changed, 12 insertions(+), 31 deletions(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 52bcae3a..a4c10808 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -253,39 +253,20 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c # which have are attached to a certificate that has been replaced print("[+] Rotating all endpoints that have new certificates available") for endpoint in endpoint_service.get_all_pending_rotation(): - log_data["endpoint"] = endpoint.dnsname - if len(endpoint.certificate.replaced) == 1: - print( - f"[+] Rotating {endpoint.name} to {endpoint.certificate.replaced[0].name}" - ) - log_data["certificate"] = endpoint.certificate.replaced[0].name - request_rotation( - endpoint, endpoint.certificate.replaced[0], message, commit - ) - current_app.logger.info(log_data) - else: - log_data["message"] = "Failed to rotate endpoint due to Multiple replacement certificates found" - print(log_data) - metrics.send( - "endpoint_rotation", - "counter", - 1, - metric_tags={ - "status": FAILURE_METRIC_STATUS, - "old_certificate_name": str(old_cert), - "new_certificate_name": str( - endpoint.certificate.replaced[0].name - ), - "endpoint_name": str(endpoint.name), - "message": str(message), - }, - ) - print( - f"[!] Failed to rotate endpoint {endpoint.name} reason: " - "Multiple replacement certificates found." - ) log_data["message"] = "Rotating endpoint from old to new cert" + if len(endpoint.certificate.replaced) > 1: + log_data["message"] = f"Multiple replacement certificates found, going with the first one out of " \ + f"{len(endpoint.certificate.replaced)}" + + log_data["endpoint"] = endpoint.dnsname + log_data["certificate"] = endpoint.certificate.replaced[0].name + request_rotation(endpoint, endpoint.certificate.replaced[0], message, commit) + print(log_data) + print( + f"[+] Rotating {endpoint.name} to {endpoint.certificate.replaced[0].name}" + ) + current_app.logger.info(log_data) status = SUCCESS_METRIC_STATUS print("[+] Done!") From b80b6d0959a1652f80f34b86878d6a74a983fb2d Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:50:16 -0800 Subject: [PATCH 14/20] same change for rotate region --- lemur/certificates/cli.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index a4c10808..0fee8fc2 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -413,18 +413,15 @@ def rotate_region(endpoint_name, new_certificate_name, old_certificate_name, mes ) continue - if len(endpoint.certificate.replaced) == 1: - log_data["certificate"] = endpoint.certificate.replaced[0].name - log_data["message"] = "Rotating all endpoints in region" - print(log_data) - current_app.logger.info(log_data) - request_rotation(endpoint, endpoint.certificate.replaced[0], message, commit) - status = SUCCESS_METRIC_STATUS - else: - status = FAILURE_METRIC_STATUS - log_data["message"] = "Failed to rotate endpoint due to Multiple replacement certificates found" - print(log_data) - current_app.logger.info(log_data) + log_data["certificate"] = endpoint.certificate.replaced[0].name + log_data["message"] = "Rotating all endpoints in region" + if len(endpoint.certificate.replaced) > 1: + log_data["message"] = f"Multiple replacement certificates found, going with the first one out of " \ + f"{len(endpoint.certificate.replaced)}" + + request_rotation(endpoint, endpoint.certificate.replaced[0], message, commit) + print(log_data) + current_app.logger.info(log_data) metrics.send( "endpoint_rotation_region", From 895d5e6ec72604ca9daae68d7f8d05e0a07dab61 Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Thu, 28 Jan 2021 15:58:01 -0800 Subject: [PATCH 15/20] lint --- lemur/certificates/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index 0fee8fc2..dac7680d 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -131,7 +131,7 @@ def request_rotation(endpoint, certificate, message, commit): ) metrics.send("endpoint_rotation", "counter", 1, metric_tags={"status": status, - "certificate_name": str(certificate.name), + "certificate_name": str(certificate.name), "endpoint": str(endpoint.dnsname)}) From 20792dfe3a3fe6754f2a4810fa4b18b6aeeea9e1 Mon Sep 17 00:00:00 2001 From: sayali Date: Thu, 28 Jan 2021 15:58:12 -0800 Subject: [PATCH 16/20] Club role assignment logs --- lemur/auth/views.py | 8 ++++++-- lemur/users/service.py | 12 ++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lemur/auth/views.py b/lemur/auth/views.py index f9eb11d0..85a8f636 100644 --- a/lemur/auth/views.py +++ b/lemur/auth/views.py @@ -212,12 +212,16 @@ def update_user(user, profile, roles): else: # we add 'lemur' specific roles, so they do not get marked as removed + removed_roles = [] for ur in user.roles: if not ur.third_party: roles.append(ur) - else: - log_service.audit_log("unassign_role", ur.name, f"Un-assigning the role for {user.name}") + elif ur not in roles: + # This is a role assigned in lemur, but not returned by sso during current login + removed_roles.append(ur.name) + if removed_roles: + log_service.audit_log("unassign_role", user.name, f"Un-assigning roles {removed_roles}") # update any changes to the user user_service.update( user.id, diff --git a/lemur/users/service.py b/lemur/users/service.py index ffc81f5c..d708d295 100644 --- a/lemur/users/service.py +++ b/lemur/users/service.py @@ -68,21 +68,29 @@ def update_roles(user, roles): :param user: :param roles: """ + removed_roles = [] for ur in user.roles: for r in roles: if r.id == ur.id: break else: user.roles.remove(ur) - log_service.audit_log("unassign_role", ur.name, f"Un-assigning the role for user {user.username}") + removed_roles.append(ur.name) + if removed_roles: + log_service.audit_log("unassign_role", user.username, f"Un-assigning roles {removed_roles}") + + added_roles = [] for r in roles: for ur in user.roles: if r.id == ur.id: break else: user.roles.append(r) - log_service.audit_log("assign_role", r.name, f"Assigning the role to user {user.username}") + added_roles.append(r.name) + + if added_roles: + log_service.audit_log("assign_role", user.username, f"Assigning roles {added_roles}") def get(user_id): From 77a50e0abfa749874cede765dc774d4fb3b628e8 Mon Sep 17 00:00:00 2001 From: sayali Date: Thu, 28 Jan 2021 17:56:12 -0800 Subject: [PATCH 17/20] API Key logs --- lemur/api_keys/service.py | 9 ++++++++- lemur/logs/service.py | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lemur/api_keys/service.py b/lemur/api_keys/service.py index ea681a62..3cb896aa 100644 --- a/lemur/api_keys/service.py +++ b/lemur/api_keys/service.py @@ -7,6 +7,7 @@ """ from lemur import database from lemur.api_keys.models import ApiKey +from lemur.logs import service as log_service def get(aid): @@ -24,6 +25,7 @@ def delete(access_key): :param access_key: :return: """ + log_service.audit_log("delete_api_key", access_key.name, "Deleting the API key") database.delete(access_key) @@ -34,8 +36,9 @@ def revoke(aid): :return: """ api_key = get(aid) - setattr(api_key, "revoked", False) + setattr(api_key, "revoked", True) + log_service.audit_log("revoke_api_key", api_key.name, "Revoking API key") return database.update(api_key) @@ -55,6 +58,9 @@ def create(**kwargs): :return: """ api_key = ApiKey(**kwargs) + # this logs only metadata about the api key + log_service.audit_log("create_api_key", api_key.name, f"Creating the API key {api_key}") + database.create(api_key) return api_key @@ -69,6 +75,7 @@ def update(api_key, **kwargs): for key, value in kwargs.items(): setattr(api_key, key, value) + log_service.audit_log("update_api_key", api_key.name, f"Update summary - {kwargs}") return database.update(api_key) diff --git a/lemur/logs/service.py b/lemur/logs/service.py index 96b4b14f..f569a05d 100644 --- a/lemur/logs/service.py +++ b/lemur/logs/service.py @@ -42,8 +42,9 @@ def audit_log(action, entity, message): :param message: Additional info e.g. Role being assigned to user X :return: """ + user = g.current_user.email if hasattr(g, 'current_user') else "LEMUR" current_app.logger.info( - f"[lemur-audit] action: {action}, user: {g.current_user.email}, entity: {entity} [{message}]" + f"[lemur-audit] action: {action}, user: {user}, entity: {entity}, details:{message}" ) From 38fc80fb470a2edb7374c7289ebf734a7e67891b Mon Sep 17 00:00:00 2001 From: sayali Date: Thu, 28 Jan 2021 17:59:35 -0800 Subject: [PATCH 18/20] space --- lemur/logs/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lemur/logs/service.py b/lemur/logs/service.py index f569a05d..5e5f30db 100644 --- a/lemur/logs/service.py +++ b/lemur/logs/service.py @@ -44,7 +44,7 @@ def audit_log(action, entity, message): """ user = g.current_user.email if hasattr(g, 'current_user') else "LEMUR" current_app.logger.info( - f"[lemur-audit] action: {action}, user: {user}, entity: {entity}, details:{message}" + f"[lemur-audit] action: {action}, user: {user}, entity: {entity}, details: {message}" ) From d5f678f70cc8976fc711034bf16ba8ffd9d5385b Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Fri, 29 Jan 2021 10:46:58 -0800 Subject: [PATCH 19/20] language --- lemur/certificates/cli.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index dac7680d..f881b9b6 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -249,8 +249,8 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c current_app.logger.info(log_data) else: - # no certificate name or endpoint was provided, so we will now fetch all endpoints, - # which have are attached to a certificate that has been replaced + # No certificate name or endpoint is provided. We will now fetch all endpoints, + # which are associated with a certificate that has been replaced print("[+] Rotating all endpoints that have new certificates available") for endpoint in endpoint_service.get_all_pending_rotation(): From 6df1b2985c4e12b8c42280c527911e422e687a3f Mon Sep 17 00:00:00 2001 From: Hossein Shafagh Date: Fri, 29 Jan 2021 10:49:18 -0800 Subject: [PATCH 20/20] removing duplicate print --- lemur/certificates/cli.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lemur/certificates/cli.py b/lemur/certificates/cli.py index f881b9b6..e00f6ea7 100644 --- a/lemur/certificates/cli.py +++ b/lemur/certificates/cli.py @@ -262,7 +262,6 @@ def rotate(endpoint_name, new_certificate_name, old_certificate_name, message, c log_data["endpoint"] = endpoint.dnsname log_data["certificate"] = endpoint.certificate.replaced[0].name request_rotation(endpoint, endpoint.certificate.replaced[0], message, commit) - print(log_data) print( f"[+] Rotating {endpoint.name} to {endpoint.certificate.replaced[0].name}" ) @@ -420,7 +419,6 @@ def rotate_region(endpoint_name, new_certificate_name, old_certificate_name, mes f"{len(endpoint.certificate.replaced)}" request_rotation(endpoint, endpoint.certificate.replaced[0], message, commit) - print(log_data) current_app.logger.info(log_data) metrics.send(