in Templates/kerberosSideCar/krb_side_car.py [0:0]
def main():
"""
Entrypoint of kerberos sidecar
:return: Will return only if there is error
:rtype: Exceptions on error
"""
env_vars = read_env()
username = None
password = None
for num_retries in range(5):
try:
username, password = get_secret(env_vars[REGION_NAME],
env_vars[SECRET_ARN])
break
except:
print("[%s] ERROR** JSON error while loading secrets from secrets "
"manager" % num_retries,
flush=True)
sys.exit(1)
if username is None or password is None:
"""
If Secrets Manager is not properly configured, the program will exit
"""
print("ERROR** Secret not available from Secrets Manager", flush=True)
sys.exit(1)
# AD Sanity check, these can be extended later
try:
execute_kinit_cmd(username, password, env_vars[DIRECTORY_NAME])
check_ldap_info(env_vars)
except:
print("Warning** LDAP access failed")
"""
Kerberos ticket refresh every KINIT_DELAY_IN_SECS
The grace period for Kerberos even if passwords change, is about an hour
KINIT_DELAY_IN_SECS is set to 45 minutes
"""
keytab_filename = env_vars[KRB_DIR] + "/" + KEYTAB_FILE_NAME
num_failures = 0
while True:
if num_failures > MAX_FAILURES_IN_ABOUT_A_DAY:
print("ERROR** Max failures reached, exiting", flush=True)
sys.exit(1)
try:
username_new, password_new = get_secret(env_vars[REGION_NAME],
env_vars[SECRET_ARN])
execute_kinit_cmd(username_new, password_new, env_vars[DIRECTORY_NAME])
if not os.path.isfile(keytab_filename):
create_keytab(username_new, password_new, env_vars[DIRECTORY_NAME],
env_vars[SERVICE_PRINCIPAL_NAME], keytab_filename)
if username_new != username or password_new != password:
print(
"Credentials change detected at " + str(datetime.now()) +
"creating a new keytab file", flush=True)
if os.path.isfile(keytab_filename):
os.remove(keytab_filename)
username = username_new
password = password_new
create_keytab(username, password, env_vars[DIRECTORY_NAME],
env_vars[SERVICE_PRINCIPAL_NAME], keytab_filename)
num_failures = 0
except:
num_failures = num_failures + 1
print("ERROR** JSON error while loading secrets from secrets manager",
flush=True)
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
traceback.print_exception(exc_type, exc_value, exc_traceback,
limit=5, file=sys.stdout)
traceback.print_exc(limit=5, file=sys.stdout)
time.sleep(env_vars[KRB_TICKET_REFRESH_PERIOD])