update last_used for access keys
This commit is contained in:
parent
2f2d6dc3fe
commit
35fde06381
@ -187,7 +187,7 @@ def iso_8601_datetime_with_milliseconds(datetime):
|
|||||||
|
|
||||||
|
|
||||||
def iso_8601_datetime_without_milliseconds(datetime):
|
def iso_8601_datetime_without_milliseconds(datetime):
|
||||||
return datetime.strftime("%Y-%m-%dT%H:%M:%S") + "Z"
|
return None if datetime is None else datetime.strftime("%Y-%m-%dT%H:%M:%S") + "Z"
|
||||||
|
|
||||||
|
|
||||||
RFC1123 = "%a, %d %b %Y %H:%M:%S GMT"
|
RFC1123 = "%a, %d %b %Y %H:%M:%S GMT"
|
||||||
|
@ -464,7 +464,7 @@ class AccessKey(BaseModel):
|
|||||||
self.secret_access_key = random_alphanumeric(40)
|
self.secret_access_key = random_alphanumeric(40)
|
||||||
self.status = "Active"
|
self.status = "Active"
|
||||||
self.create_date = datetime.utcnow()
|
self.create_date = datetime.utcnow()
|
||||||
self.last_used = datetime.utcnow()
|
self.last_used = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def created_iso_8601(self):
|
def created_iso_8601(self):
|
||||||
@ -683,6 +683,11 @@ class User(BaseModel):
|
|||||||
access_key_1_last_rotated = self.access_keys[0].create_date.strftime(
|
access_key_1_last_rotated = self.access_keys[0].create_date.strftime(
|
||||||
date_format
|
date_format
|
||||||
)
|
)
|
||||||
|
access_key_2_last_rotated = (
|
||||||
|
"N/A"
|
||||||
|
if self.access_key[0].last_used is None
|
||||||
|
else self.access_key[0].last_used.strftime(date_format)
|
||||||
|
)
|
||||||
access_key_2_active = "false"
|
access_key_2_active = "false"
|
||||||
access_key_2_last_rotated = "N/A"
|
access_key_2_last_rotated = "N/A"
|
||||||
else:
|
else:
|
||||||
@ -690,12 +695,22 @@ class User(BaseModel):
|
|||||||
access_key_1_last_rotated = self.access_keys[0].create_date.strftime(
|
access_key_1_last_rotated = self.access_keys[0].create_date.strftime(
|
||||||
date_format
|
date_format
|
||||||
)
|
)
|
||||||
|
access_key_1_last_used = (
|
||||||
|
"N/A"
|
||||||
|
if self.access_key[0].last_used is None
|
||||||
|
else self.access_key[0].last_used.strftime(date_format)
|
||||||
|
)
|
||||||
access_key_2_active = "true"
|
access_key_2_active = "true"
|
||||||
access_key_2_last_rotated = self.access_keys[1].create_date.strftime(
|
access_key_2_last_rotated = self.access_keys[1].create_date.strftime(
|
||||||
date_format
|
date_format
|
||||||
)
|
)
|
||||||
|
access_key_2_last_used = (
|
||||||
|
"N/A"
|
||||||
|
if self.access_key[1].last_used is None
|
||||||
|
else self.access_key[1].last_used.strftime(date_format)
|
||||||
|
)
|
||||||
|
|
||||||
return "{0},{1},{2},{3},{4},{5},not_supported,false,{6},{7},{8},{9},false,N/A,false,N/A".format(
|
return "{0},{1},{2},{3},{4},{5},not_supported,false,{6},{7},{8},not_supported,not_supported,{9},{10},{11},false,N/A,false,N/A".format(
|
||||||
self.name,
|
self.name,
|
||||||
self.arn,
|
self.arn,
|
||||||
date_created.strftime(date_format),
|
date_created.strftime(date_format),
|
||||||
@ -704,8 +719,10 @@ class User(BaseModel):
|
|||||||
date_created.strftime(date_format),
|
date_created.strftime(date_format),
|
||||||
access_key_1_active,
|
access_key_1_active,
|
||||||
access_key_1_last_rotated,
|
access_key_1_last_rotated,
|
||||||
|
access_key_1_last_used,
|
||||||
access_key_2_active,
|
access_key_2_active,
|
||||||
access_key_2_last_rotated,
|
access_key_2_last_rotated,
|
||||||
|
access_key_2_last_used,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1805,7 +1822,7 @@ class IAMBackend(BaseBackend):
|
|||||||
def get_credential_report(self):
|
def get_credential_report(self):
|
||||||
if not self.credential_report:
|
if not self.credential_report:
|
||||||
raise IAMReportNotPresentException("Credential report not present")
|
raise IAMReportNotPresentException("Credential report not present")
|
||||||
report = "user,arn,user_creation_time,password_enabled,password_last_used,password_last_changed,password_next_rotation,mfa_active,access_key_1_active,access_key_1_last_rotated,access_key_2_active,access_key_2_last_rotated,cert_1_active,cert_1_last_rotated,cert_2_active,cert_2_last_rotated\n"
|
report = "user,arn,user_creation_time,password_enabled,password_last_used,password_last_changed,password_next_rotation,mfa_active,access_key_1_active,access_key_1_last_rotated,access_key_1_last_used_date,access_key_1_last_used_region,access_key_1_last_used_service,access_key_2_active,access_key_2_last_rotated,access_key_2_last_used_date,access_key_2_last_used_region,access_key_2_last_used_service,cert_1_active,cert_1_last_rotated,cert_2_active,cert_2_last_rotated\n"
|
||||||
for user in self.users:
|
for user in self.users:
|
||||||
report += self.users[user].to_csv()
|
report += self.users[user].to_csv()
|
||||||
return base64.b64encode(report.encode("ascii")).decode("ascii")
|
return base64.b64encode(report.encode("ascii")).decode("ascii")
|
||||||
|
@ -1779,7 +1779,12 @@ GET_ACCESS_KEY_LAST_USED_TEMPLATE = """
|
|||||||
<GetAccessKeyLastUsedResult>
|
<GetAccessKeyLastUsedResult>
|
||||||
<UserName>{{ user_name }}</UserName>
|
<UserName>{{ user_name }}</UserName>
|
||||||
<AccessKeyLastUsed>
|
<AccessKeyLastUsed>
|
||||||
|
{{% if last_used % }}
|
||||||
<LastUsedDate>{{ last_used }}</LastUsedDate>
|
<LastUsedDate>{{ last_used }}</LastUsedDate>
|
||||||
|
{{% else % }}
|
||||||
|
<ServiceName>N/A</ServiceName>
|
||||||
|
<Region>N/A</Region>
|
||||||
|
{{% endif %}}
|
||||||
</AccessKeyLastUsed>
|
</AccessKeyLastUsed>
|
||||||
</GetAccessKeyLastUsedResult>
|
</GetAccessKeyLastUsedResult>
|
||||||
</GetAccessKeyLastUsedResponse>
|
</GetAccessKeyLastUsedResponse>
|
||||||
|
Loading…
Reference in New Issue
Block a user