in hq/app/aws/iam/CredentialsReport.scala [83:124]
def parseCredentialsReport(contents: String): List[IAMCredential] = {
val iamCredentialsReport = CSVReader.open(new StringReader(contents)).allWithHeaders().map { row =>
IAMCredential(
user = row.getOrElse("user", "no username available"),
arn = row.getOrElse("arn", "no ARN available"),
creationTime = row.get("user_creation_time").flatMap(parseDateTimeOpt).get,
stack = None,
passwordEnabled = row.get("password_enabled").flatMap(parseBoolean),
passwordLastUsed = row.get("password_last_used").flatMap(parseDateTimeOpt),
passwordLastChanged = row.get("password_last_changed").flatMap(parseDateTimeOpt),
passwordNextRotation = row.get("password_next_rotation").flatMap(parseDateTimeOpt),
mfaActive = row.get("mfa_active").flatMap(parseBoolean).get,
accessKey1Active = row.get("access_key_1_active").flatMap(parseBoolean).get,
accessKey1LastRotated = row.get("access_key_1_last_rotated").flatMap(parseDateTimeOpt),
accessKey1LastUsedDate = row.get("access_key_1_last_used_date").flatMap(parseDateTimeOpt),
accessKey1LastUsedRegion = row.get("access_key_1_last_used_region").flatMap(parseRegionOpt),
accessKey1LastUsedService = row.get("access_key_1_last_used_service").flatMap(parseStrOpt),
accessKey2Active = row.get("access_key_2_active").flatMap(parseBoolean).get,
accessKey2LastRotated = row.get("access_key_2_last_rotated").flatMap(parseDateTimeOpt),
accessKey2LastUsedDate = row.get("access_key_2_last_used_date").flatMap(parseDateTimeOpt),
accessKey2LastUsedRegion = row.get("access_key_2_last_used_region").flatMap(parseRegionOpt),
accessKey2LastUsedService = row.get("access_key_2_last_used_service").flatMap(parseStrOpt),
cert1Active = row.get("cert_1_active").flatMap(parseBoolean).get,
cert1LastRotated = row.get("cert_1_last_rotated").flatMap(parseDateTimeOpt),
cert2Active = row.get("cert_2_active").flatMap(parseBoolean).get,
cert2LastRotated = row.get("cert_2_last_rotated").flatMap(parseDateTimeOpt)
)
}
iamCredentialsReport.filter(x => x.passwordEnabled.contains(true)).foreach(iamCred => {
val mandatoryMarkers = Map(
"User" -> iamCred.user,
"PasswordEnabled" -> iamCred.passwordEnabled.getOrElse(false),
"Arn" -> iamCred.arn
)
val markers = MarkerContext(appendEntries(mandatoryMarkers.asJava))
logger.info(s"${iamCred.user} user has non-Janus access to AWS: $iamCred")(markers)
})
iamCredentialsReport
}