from enum import Enum
class LANGUAGE_CODE(Enum):
ENGLISH = "ENG"
KOREAN = "KOR"
def translation(module_name, language):
if module_name == "main":
return MainLan(language=language)
elif module_name == "account_level_bucket_public_access":
return AccountLevelBucketPUblicAccess(language=language)
elif module_name == "alternate_contacts":
return AlternateContact(language=language)
elif module_name == "bucket_public_access":
return BucketPublicAccess(language=language)
elif module_name == "cloudwatch_alarm_configuation":
return CloudWatchAlarmConfiguration(language=language)
elif module_name == "direct_attached_policy":
return IAMDirectedAttachedPolicy(language=language)
elif module_name == "guardduty_enabled":
return GuardDutyEnabled(language=language)
elif module_name == "iam_password_policy":
return IAMPasswordPolicy(language=language)
elif module_name == "iam_user_mfa":
return IAMUserMFASetting(language=language)
elif module_name == "multi_region_instance_usage":
return MultiRegionInstanceUsage(language=language)
elif module_name == "multi_region_trail":
return MultiRegionTrail(language=language)
elif module_name == "root_mfa":
return RootMFASetting(language=language)
elif module_name == "root_usage_check":
return RootUsage(language=language)
elif module_name == "root_access_key":
return RootAccessKey(language=language)
elif module_name == "trail_enabled":
return TrailEnabled(language=language)
elif module_name == "trusted_advisor":
return TrustedAdvisor(language=language)
class MainLan():
def __init__(self, language):
self.language = language
def invalid_iam_entity(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "This IAM Entity is not supported. Please use IAM user profile."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "지원하지 않는 IAM Entity입니다. IAM 사용자 Profile을 사용해 주세요."
def start_test(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Execute the Test"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 점검을 시작합니다"
def generate_result_report(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "\n >>> Report Generating..."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "\n >>> 결과 리포트 생성 중..."
def request_credential_report(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">> Getting Credential Report"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">> Credential Report를 가져오는 중"
class AccountLevelBucketPUblicAccess():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking Account-Level S3 Bucket Public Access"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 계정 수준의 S3 Bucket Public Access 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Account-Level S3 Bucket Public Access Settings"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "계정 수준 S3 Bucket Public Access 설정"
def no_such_public_access_block_config(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "No Such Public Access Block Configuration"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "계정의 기본 S3 Bucket Public Access Block 정책이 설정되어 있지 않습니다."
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Account-Level S3 Bucket Public Access is All Blocked"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "계정의 기본 S3 Bucket Public Access 정책이 모두 차단되어 있습니다."
def warning(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Some Account-Level S3 Bucket Public Access are Allowed."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "계정의 기본 S3 Bucket Public Access 정책이 일부 허용되어 있습니다."
def danger(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Account-Level S3 Bucket Public Access are all Allowed."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "계정의 기본 S3 Bucket Public Access 정책이 모두 허용되어 있습니다."
class AlternateContact():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking Alternate Contacts"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 대체 연락처 등록을 확인하는 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Alternate Contacts are Registered"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "대체 연락처 등록 확인"
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "All types of alternate contacts have been registered. Please check if those are correct information."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "모든 유형의 대체 연락처가 등록되어 있습니다. 정확한 정보인지 확인해주세요."
def warning(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Some alternate contacts have not been registered."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "연락처가 등록되지 않은 대체 연락처 유형이 있습니다."
class BucketPublicAccess():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking Bucket Public Access"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 개별 S3 Bucket의 Public Access 설정 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Bucket-Level S3 Bucket Public Access Settings"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "Bucket-Level의 S3 Bucket Public Access 설정 확인"
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "S3 Bucket has blocked all public access."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "S3 Bucket의 모든 public access 정책이 차단되어 있습니다."
def warning(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "S3 Bucket has allowed some public access policy."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "S3 Bucket의 public access 정책이 일부 허용되어 있습니다."
def danger(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "S3 Bucket has allowed all public access policy."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "S3 Bucket의 모든 public access 정책이 모두 허용되어 있습니다."
def bucket_limit_warning(self, maximum_number_of_bucket_limit) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Maximum testable bucket count({MAXIMUM_NUMBER_OF_BUCKET_LIMIT}) exceeded. Please check manual or use AWS Trusted Advisor".format(MAXIMUM_NUMBER_OF_BUCKET_LIMIT=maximum_number_of_bucket_limit)
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "점검 가능한 최대 버킷 수({MAXIMUM_NUMBER_OF_BUCKET_LIMIT}) 초과. 수동으로 점검을 진행하거나 AWS Trusted Advisor를 이용해주세요.".format(MAXIMUM_NUMBER_OF_BUCKET_LIMIT=maximum_number_of_bucket_limit)
class CloudWatchAlarmConfiguration():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking CloudWatch Alarm"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> CloudWatch 알람 설정 확인"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Cloudwatch Alarm Configuration for Significant Event."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "중요 이벤트에 대한 Cloudwatch 알람 설정"
def alarm_exist(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Cloudwatch Alarm has been configured. Please check there are significant alarm configurations such as billing, root activities about those alarms by manual."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "Cloudwatch 알림이 구성되어 있습니다. 비용 알림, 루트 계정 활동 알림과 같은 중요 알림 구성 여부를 수동으로 확인해주세요."
def alarm_not_exist(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return '''Cloudwatch Alarm has not been configured. Please try this  workshop to know how to set alarm for significant events such as billing, root activities.'''
elif self.language == LANGUAGE_CODE.KOREAN.value:
return '''CloudWatch 알림이 구성되어 있지 않습니다.  워크샵을 통해 비용 알림, 루트 계정 활동 알림을 설정방법을 확인해보세요.'''
class IAMDirectedAttachedPolicy():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking Directly Attached Policy for IAM User"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> IAM 사용자에게 직접 연결된 Policy 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Directly Attached Policy to IAM User"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 사용자에게 직접 연결된 정책 확인"
def no_user(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "There is no IAM User"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 사용자가 없습니다."
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Policies for all IAM users are being managed efficiently without direct-attached policies."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 사용자에게 직접 연결된 IAM 정책이 없습니다. 모든 IAM 사용자의 권한이 효율적으로 관리되고 있습니다."
def warning(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "A policy exists that is directly attached to the IAM user."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 사용자에게 직접 연결된 정책이 존재합니다."
class GuardDutyEnabled():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking GuardDuty Setting"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> GuardDuty 설정 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "GuardDuty Setting"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "GuardDuty 설정"
def is_activated(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "GuardDuty has been activated in more than one region"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "GuardDuty가 한개 이상의 리전에서 활성화 되어 있습니다."
def is_not_activated(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "GuardDuty has not been activated any region."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "GuardDuty가 활성화 되어있는 리전이 없습니다."
class IAMPasswordPolicy():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking IAM Password Policy"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> IAM 비밀번호 정책 설정을 확인하는 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "IAM Password Policy Setting"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 비밀번호 정책 설정"
def warning(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "IAM Password Policy has not been set. If you use any other credential such as IAM Role rather than root, you could ignore this warning."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 비밀번호 정책이 설정되어 있지 않습니다. 만약 root 대신 IAM Role과 같은 다른 자격증명을 사용하는 경우 이 경고를 무시해도 됩니다."
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "IAM Password Policy has been set."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 비밀번호 정책이 설정되어 있습니다."
class IAMUserMFASetting():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking MFA Setting for IAM User"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> IAM 사용자의 MFA 설정을 확인하는 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "MFA Setting for IAM User"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 사용자의 MFA 설정"
def no_iam_user(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "IAM user is not existed. If you use any other credential such as IAM Role rather than root, you could ignore this warning."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "IAM 사용자가 없습니다. 만약 root 대신 IAM Role과 같은 다른 자격증명을 사용하는 경우 이 경고를 무시해도 됩니다."
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "All IAM User are using MFA."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "모든 IAM 사용자가 MFA를 사용중입니다."
def danger(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "There are IAM users who have not set up MFA."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "MFA를 설정하지 않은 IAM 사용자가 있습니다."
class MultiRegionInstanceUsage():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking EC2 instance usage in multi-region"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 여러 리전에서의 EC2 인스턴스 사용 여부 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Number of instance usages by region"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "리전 별 사용중인 EC2 인스턴스 수"
def info_msg(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return '''Please check your instance usage by region. You can also use  EC2 Global View to check more details.'''
elif self.language == LANGUAGE_CODE.KOREAN.value:
return '''리전 별 인스턴스 사용량을 확인해주세요.  EC2 Global View 를 이용하여 자세한 내용을 확인할 수 있습니다.'''
class MultiRegionTrail():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking Multi-Region Logging Setting"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> Multi-Region Logging 설정 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Multi-Region Logging for CloudTrail Event Log"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "CloudTrail 이벤트 로그의 Multi-Region Logging"
def no_trail(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return '''There is no trail created. Please create trail. (How to create trail)'''
elif self.language == LANGUAGE_CODE.KOREAN.value:
return '''생성된 trail이 없습니다. Trail을 생성해 주세요. (Trail 생성방법)'''
def danger(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "The multi-region logging has been disabled for all trail."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "모든 Trail의 multi-region logging이 비활성화 되어 있습니다."
def warning(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Some trails have been disabled multi-region logging."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "일부 trail에서 multi-region logging이 비활성화 되어있습니다."
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "The multi-region logging has been enabled for all trail."
class RootMFASetting():
def __init__(self, language):
self.language = language
def checking(self):
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking MFA for Root"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 루트 계정에 대한 MFA 설정 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "MFA for Root Account"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "루트 계정에 대한 MFA 설정"
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Root account enabled MFA"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "루트 계정에 대한 MFA가 설정되어 있습니다."
def danger(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return '''Root account disabled MFA.  Please check how to set MFA to root account via this link'''
elif self.language == LANGUAGE_CODE.KOREAN.value:
return '''루트 계정에 설정된 MFA가 없습니다. 링크를 눌러 설정방법을 확인해주세요.'''
class RootUsage():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking root usage for recent 7 days."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 최근 7일동안의 루트 계정 사용여부를 확인하는 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Root Access"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "루트 계정 Access"
def success(self, root_access_days_standard) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "No root access history for last {standard_root_access_date} days.".format(standard_root_access_date=str(root_access_days_standard))
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "최근 {standard_root_access_date} 일 간 루트 계정 접속 기록이 없습니다.".format(standard_root_access_date=str(root_access_days_standard))
def access_today(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Root usage history exists for today. Please use AWS service with another credentials."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "오늘 날짜의 루트 계정 사용이력이 존재합니다. 다른 자격증명으로 AWS 서비스를 이용해주세요."
def danger(self, last_access_days) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Root usage history exists for last {last_access_days}. Please use AWS service with another credentials.".format(last_access_days=str(last_access_days))
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "최근 {last_access_days} 이내에 루트 계정 사용이력이 존재합니다. 다른 자격증명으로 AWS 서비스를 이용해주세요.".format(last_access_days=str(last_access_days))
class RootAccessKey():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking Generated Access Key for Root"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> 루트 계정의 Access Key 생성 여부를 확인하는 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Generated Access Key for Root"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "루트 계정의 Access Key 생성 여부를 확인하는 중"
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "No Access Key for Root"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "루트 계정의 Access Key가 없습니다."
def danger(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return '''The root access key is in use. It is safe not to use the root access key. (How to delete access key)'''
elif self.language == LANGUAGE_CODE.KOREAN.value:
return '''루트계정에서 Access Key를 사용중입니다. 루트 계정의 Access Key는 사용하지 않는 것이 안전합니다. (Access Key 삭제방법)'''
class TrailEnabled():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking Trail setting on CloudTrail"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> CloudTrail의 추적 설정 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Enable Trail on CloudTrail"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "CloudTrail의 Trail 설정 확인"
def no_trail(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return '''There is no Trail on CloudTrail. Please create Trail. (How to create Trail)'''
elif self.language == LANGUAGE_CODE.KOREAN.value:
return '''생성된 Trail이 없습니다. Trail을 생성 해주세요. (Trail 생성방법)'''
def danger(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Logging is disabled for all Trails. Please enable logging."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "모든 Trail의 Logging 설정이 비활성화 되어있습니다. Logging을 활성화 해주세요."
def warning(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Logging is disabled for some Trails. Please enable logging."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "일부 Trail의 Logging 설정이 비활성화 되어있습니다. Logging을 활성화 해주세요."
def success(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Logging is enabled for all Trails."
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "모든 Trail의 Logging 설정이 활성화 되어있습니다."
class TrustedAdvisor():
def __init__(self, language):
self.language = language
def checking(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return ">>> Checking TrustedAdvisor Setting"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return ">>> TrustedAdvisor 설정 확인 중"
def title(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return "Enable Trusted Advisor"
elif self.language == LANGUAGE_CODE.KOREAN.value:
return "Trusted Advisor를 사용하도록 설정했는지 확인"
def info(self) -> str:
if self.language == LANGUAGE_CODE.ENGLISH.value:
return '''Please check the Trusted Advisor is enabled in your AWS account.'''
elif self.language == LANGUAGE_CODE.KOREAN.value:
return '''현재 계정의 Trusted Advisor 설정을 확인하세요.'''