runbooks 0.1.7__py3-none-any.whl → 0.1.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. runbooks/__init__.py +1 -1
  2. runbooks/aws/__init__.py +58 -0
  3. runbooks/aws/dynamodb_operations.py +231 -0
  4. runbooks/aws/ec2_copy_image_cross-region.py +195 -0
  5. runbooks/aws/ec2_describe_instances.py +202 -0
  6. runbooks/aws/ec2_ebs_snapshots_delete.py +186 -0
  7. runbooks/aws/ec2_run_instances.py +207 -0
  8. runbooks/aws/ec2_start_stop_instances.py +199 -0
  9. runbooks/aws/ec2_terminate_instances.py +143 -0
  10. runbooks/aws/ec2_unused_eips.py +196 -0
  11. runbooks/aws/ec2_unused_volumes.py +184 -0
  12. runbooks/aws/s3_create_bucket.py +140 -0
  13. runbooks/aws/s3_list_buckets.py +152 -0
  14. runbooks/aws/s3_list_objects.py +151 -0
  15. runbooks/aws/s3_object_operations.py +183 -0
  16. runbooks/aws/tagging_lambda_handler.py +172 -0
  17. runbooks/python101/calculator.py +34 -0
  18. runbooks/python101/config.py +1 -0
  19. runbooks/python101/exceptions.py +16 -0
  20. runbooks/python101/file_manager.py +218 -0
  21. runbooks/python101/toolkit.py +153 -0
  22. runbooks/security_baseline/__init__.py +0 -0
  23. runbooks/security_baseline/checklist/__init__.py +17 -0
  24. runbooks/security_baseline/checklist/account_level_bucket_public_access.py +86 -0
  25. runbooks/security_baseline/checklist/alternate_contacts.py +65 -0
  26. runbooks/security_baseline/checklist/bucket_public_access.py +82 -0
  27. runbooks/security_baseline/checklist/cloudwatch_alarm_configuration.py +66 -0
  28. runbooks/security_baseline/checklist/direct_attached_policy.py +69 -0
  29. runbooks/security_baseline/checklist/guardduty_enabled.py +71 -0
  30. runbooks/security_baseline/checklist/iam_password_policy.py +43 -0
  31. runbooks/security_baseline/checklist/iam_user_mfa.py +39 -0
  32. runbooks/security_baseline/checklist/multi_region_instance_usage.py +55 -0
  33. runbooks/security_baseline/checklist/multi_region_trail.py +64 -0
  34. runbooks/security_baseline/checklist/root_access_key.py +72 -0
  35. runbooks/security_baseline/checklist/root_mfa.py +39 -0
  36. runbooks/security_baseline/checklist/root_usage.py +128 -0
  37. runbooks/security_baseline/checklist/trail_enabled.py +68 -0
  38. runbooks/security_baseline/checklist/trusted_advisor.py +24 -0
  39. runbooks/security_baseline/report_generator.py +149 -0
  40. runbooks/security_baseline/run_script.py +76 -0
  41. runbooks/security_baseline/security_baseline_tester.py +179 -0
  42. runbooks/security_baseline/utils/__init__.py +1 -0
  43. runbooks/security_baseline/utils/common.py +109 -0
  44. runbooks/security_baseline/utils/enums.py +44 -0
  45. runbooks/security_baseline/utils/language.py +762 -0
  46. runbooks/security_baseline/utils/level_const.py +5 -0
  47. runbooks/security_baseline/utils/permission_list.py +26 -0
  48. runbooks/utils/__init__.py +0 -0
  49. runbooks/utils/logger.py +36 -0
  50. {runbooks-0.1.7.dist-info → runbooks-0.1.8.dist-info}/METADATA +2 -2
  51. runbooks-0.1.8.dist-info/RECORD +54 -0
  52. runbooks-0.1.7.dist-info/RECORD +0 -6
  53. {runbooks-0.1.7.dist-info → runbooks-0.1.8.dist-info}/WHEEL +0 -0
  54. {runbooks-0.1.7.dist-info → runbooks-0.1.8.dist-info}/entry_points.txt +0 -0
  55. {runbooks-0.1.7.dist-info → runbooks-0.1.8.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,762 @@
1
+ from abc import ABC, abstractmethod
2
+ from enum import Enum
3
+
4
+
5
+ class LanguageCode(Enum):
6
+ ENGLISH = "EN"
7
+ JAPANESE = "JP"
8
+ KOREAN = "KR"
9
+ VIETNAMESE = "VN"
10
+
11
+
12
+ class BaseTranslator(ABC):
13
+ def __init__(self, language):
14
+ self.language = language
15
+
16
+ @abstractmethod
17
+ def translate(self, key):
18
+ pass
19
+
20
+
21
+ class MainTranslator(BaseTranslator):
22
+ def translate(self, key):
23
+ translations = {
24
+ "invalid_iam_entity": {
25
+ LanguageCode.ENGLISH.value: "This IAM entity is not supported. Please use an IAM user profile.",
26
+ LanguageCode.VIETNAMESE.value: "Thực thể IAM này không được hỗ trợ. Vui lòng sử dụng hồ sơ IAM user.",
27
+ LanguageCode.KOREAN.value: "지원하지 않는 IAM Entity입니다. IAM 사용자 Profile을 사용해 주세요.",
28
+ LanguageCode.JAPANESE.value: "このIAMエンティティはサポートされていません。IAMユーザープロファイルを使用してください。",
29
+ },
30
+ "start_test": {
31
+ LanguageCode.ENGLISH.value: ">>> Starting the security baseline test",
32
+ LanguageCode.VIETNAMESE.value: ">>> Bắt đầu bài kiểm tra baseline bảo mật",
33
+ LanguageCode.KOREAN.value: ">>> 점검을 시작합니다",
34
+ LanguageCode.JAPANESE.value: ">>> セキュリティベースラインテストを開始します",
35
+ },
36
+ "generate_result_report": {
37
+ LanguageCode.ENGLISH.value: ">>> Generating the result report...",
38
+ LanguageCode.VIETNAMESE.value: ">>> Đang tạo báo cáo kết quả...",
39
+ LanguageCode.KOREAN.value: ">>> 결과 리포트 생성 중...",
40
+ LanguageCode.JAPANESE.value: ">>> 結果レポートを生成中...",
41
+ },
42
+ "request_credential_report": {
43
+ LanguageCode.ENGLISH.value: ">>> Retrieving the credential report...",
44
+ LanguageCode.VIETNAMESE.value: ">>> Đang lấy báo cáo thông tin đăng nhập...",
45
+ LanguageCode.KOREAN.value: ">>> Credential Report를 가져오는 중...",
46
+ LanguageCode.JAPANESE.value: ">>> 認証情報レポートを取得中...",
47
+ },
48
+ "test_completed": {
49
+ LanguageCode.ENGLISH.value: ">>> All inspection items were successfully checked.",
50
+ LanguageCode.VIETNAMESE.value: ">>> Tất cả các mục kiểm tra đã được xác minh thành công.",
51
+ LanguageCode.KOREAN.value: ">>> 모든 점검 항목이 성공적으로 검사되었습니다.",
52
+ LanguageCode.JAPANESE.value: ">>> すべての検査項目が正常に確認されました。",
53
+ },
54
+ "results_folder_created": {
55
+ LanguageCode.ENGLISH.value: "'results' folder has been created.",
56
+ LanguageCode.VIETNAMESE.value: "Thư mục 'results' đã được tạo.",
57
+ LanguageCode.KOREAN.value: "'results' 폴더가 생성되었습니다.",
58
+ LanguageCode.JAPANESE.value: "'results' フォルダーが作成されました。",
59
+ },
60
+ "results_folder_already_exists": {
61
+ LanguageCode.ENGLISH.value: "'results' folder already exists.",
62
+ LanguageCode.VIETNAMESE.value: "Thư mục 'results' đã tồn tại.",
63
+ LanguageCode.KOREAN.value: "'results' 폴더가 이미 존재합니다.",
64
+ LanguageCode.JAPANESE.value: "'results' フォルダーはすでに存在します。",
65
+ },
66
+ }
67
+ return translations.get(key, {}).get(self.language, "Translation not available")
68
+
69
+
70
+ class AccountLevelBucketPublicAccessTranslator(BaseTranslator):
71
+ def translate(self, key):
72
+ translations = {
73
+ "checking": {
74
+ LanguageCode.ENGLISH.value: ">>> Checking account-level S3 bucket public access settings",
75
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt quyền truy cập công khai của S3 bucket ở cấp độ tài khoản",
76
+ LanguageCode.KOREAN.value: ">>> 계정 수준의 S3 Bucket Public Access 확인 중",
77
+ LanguageCode.JAPANESE.value: ">>> アカウントレベルのS3バケットパブリックアクセス設定を確認中",
78
+ },
79
+ "title": {
80
+ LanguageCode.ENGLISH.value: "Account-Level S3 Bucket Public Access Settings",
81
+ LanguageCode.VIETNAMESE.value: "Cài đặt quyền truy cập công khai S3 bucket ở cấp độ tài khoản",
82
+ LanguageCode.KOREAN.value: "계정 수준 S3 Bucket Public Access 설정",
83
+ LanguageCode.JAPANESE.value: "アカウントレベルのS3バケットパブリックアクセス設定",
84
+ },
85
+ "no_such_public_access_block_config": {
86
+ LanguageCode.ENGLISH.value: "No public access block configuration found at the account level.",
87
+ LanguageCode.VIETNAMESE.value: "Không tìm thấy cấu hình chặn truy cập công khai ở cấp độ tài khoản.",
88
+ LanguageCode.KOREAN.value: "계정의 기본 S3 Bucket Public Access Block 정책이 설정되어 있지 않습니다.",
89
+ LanguageCode.JAPANESE.value: "アカウントレベルのパブリックアクセスブロック設定が見つかりません。",
90
+ },
91
+ "success": {
92
+ LanguageCode.ENGLISH.value: "All account-level S3 bucket public access settings are blocked.",
93
+ LanguageCode.VIETNAMESE.value: "Mọi cài đặt quyền truy cập công khai của S3 bucket ở cấp độ tài khoản đều đã bị chặn.",
94
+ LanguageCode.KOREAN.value: "계정의 기본 S3 Bucket Public Access 정책이 모두 차단되어 있습니다.",
95
+ LanguageCode.JAPANESE.value: "アカウントレベルのS3バケットパブリックアクセス設定がすべてブロックされています。",
96
+ },
97
+ "warning": {
98
+ LanguageCode.ENGLISH.value: "Some account-level S3 bucket public access settings are allowed.",
99
+ LanguageCode.VIETNAMESE.value: "Một số cài đặt quyền truy cập công khai của S3 bucket ở cấp độ tài khoản được cho phép.",
100
+ LanguageCode.KOREAN.value: "계정의 기본 S3 Bucket Public Access 정책이 일부 허용되어 있습니다.",
101
+ LanguageCode.JAPANESE.value: "一部のアカウントレベルS3バケットパブリックアクセス設定が許可されています。",
102
+ },
103
+ "danger": {
104
+ LanguageCode.ENGLISH.value: "All account-level S3 bucket public access settings are allowed.",
105
+ LanguageCode.VIETNAMESE.value: "Tất cả cài đặt quyền truy cập công khai của S3 bucket ở cấp độ tài khoản đều được cho phép.",
106
+ LanguageCode.KOREAN.value: "계정의 기본 S3 Bucket Public Access 정책이 모두 허용되어 있습니다.",
107
+ LanguageCode.JAPANESE.value: "すべてのアカウントレベルS3バケットパブリックアクセス設定が許可されています。",
108
+ },
109
+ "unexpected_error": {
110
+ LanguageCode.ENGLISH.value: "An unexpected error occurred.",
111
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi không mong muốn.",
112
+ LanguageCode.KOREAN.value: "예기치 않은 오류가 발생했습니다.",
113
+ LanguageCode.JAPANESE.value: "予期せぬエラーが発生しました。",
114
+ },
115
+ "aws_api_error": {
116
+ LanguageCode.ENGLISH.value: "An AWS API error occurred.",
117
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi AWS API.",
118
+ LanguageCode.KOREAN.value: "AWS API 오류가 발생했습니다.",
119
+ LanguageCode.JAPANESE.value: "AWS APIエラーが発生しました。",
120
+ },
121
+ "boto3_error": {
122
+ LanguageCode.ENGLISH.value: "A Boto3 error occurred.",
123
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi Boto3.",
124
+ LanguageCode.KOREAN.value: "Boto3 오류가 발생했습니다.",
125
+ LanguageCode.JAPANESE.value: "Boto3エラーが発生しました。",
126
+ },
127
+ }
128
+ return translations.get(key, {}).get(self.language, "Translation not available")
129
+
130
+
131
+ class AlternateContactTranslator(BaseTranslator):
132
+ def translate(self, key):
133
+ translations = {
134
+ "checking": {
135
+ LanguageCode.ENGLISH.value: ">>> Checking alternate contacts",
136
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra liên hệ thay thế",
137
+ LanguageCode.KOREAN.value: ">>> 대체 연락처 등록을 확인하는 중",
138
+ LanguageCode.JAPANESE.value: ">>> 代替連絡先の登録を確認中",
139
+ },
140
+ "title": {
141
+ LanguageCode.ENGLISH.value: "Alternate Contacts Registration",
142
+ LanguageCode.VIETNAMESE.value: "Đăng ký thông tin liên hệ thay thế",
143
+ LanguageCode.KOREAN.value: "대체 연락처 등록 확인",
144
+ LanguageCode.JAPANESE.value: "代替連絡先の登録確認",
145
+ },
146
+ "success": {
147
+ LanguageCode.ENGLISH.value: "All types of alternate contacts have been registered. Please verify if the information is correct.",
148
+ LanguageCode.VIETNAMESE.value: "Tất cả loại liên hệ thay thế đã được đăng ký. Vui lòng xác minh thông tin có chính xác không.",
149
+ LanguageCode.KOREAN.value: "모든 유형의 대체 연락처가 등록되어 있습니다. 정확한 정보인지 확인해주세요.",
150
+ LanguageCode.JAPANESE.value: "すべてのタイプの代替連絡先が登録されています。情報が正確であるか確認してください。",
151
+ },
152
+ "warning": {
153
+ LanguageCode.ENGLISH.value: "Some types of alternate contacts have not been registered.",
154
+ LanguageCode.VIETNAMESE.value: "Có một số loại liên hệ thay thế chưa được đăng ký.",
155
+ LanguageCode.KOREAN.value: "연락처가 등록되지 않은 대체 연락처 유형이 있습니다.",
156
+ LanguageCode.JAPANESE.value: "登録されていない代替連絡先のタイプがあります。",
157
+ },
158
+ }
159
+ return translations.get(key, {}).get(self.language, "Translation not available")
160
+
161
+
162
+ class BucketPublicAccessTranslator(BaseTranslator):
163
+ def translate(self, key):
164
+ translations = {
165
+ "checking": {
166
+ LanguageCode.ENGLISH.value: ">>> Checking individual S3 bucket public access settings",
167
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt quyền truy cập công khai từng S3 bucket",
168
+ LanguageCode.KOREAN.value: ">>> 개별 S3 Bucket의 Public Access 설정 확인 중",
169
+ LanguageCode.JAPANESE.value: ">>> 個々のS3バケットのパブリックアクセス設定を確認中",
170
+ },
171
+ "title": {
172
+ LanguageCode.ENGLISH.value: "Individual S3 Bucket Public Access Settings",
173
+ LanguageCode.VIETNAMESE.value: "Cài đặt quyền truy cập công khai cho từng S3 bucket",
174
+ LanguageCode.KOREAN.value: "Bucket-Level의 S3 Bucket Public Access 설정 확인",
175
+ LanguageCode.JAPANESE.value: "個別S3バケットのパブリックアクセス設定",
176
+ },
177
+ "success": {
178
+ LanguageCode.ENGLISH.value: "All S3 buckets have blocked public access.",
179
+ LanguageCode.VIETNAMESE.value: "Tất cả S3 bucket đã chặn quyền truy cập công khai.",
180
+ LanguageCode.KOREAN.value: "S3 Bucket의 모든 public access 정책이 차단되어 있습니다.",
181
+ LanguageCode.JAPANESE.value: "すべてのS3バケットでパブリックアクセスがブロックされています。",
182
+ },
183
+ "warning": {
184
+ LanguageCode.ENGLISH.value: "Some S3 buckets have allowed public access policies.",
185
+ LanguageCode.VIETNAMESE.value: "Một số S3 bucket đang cho phép quyền truy cập công khai.",
186
+ LanguageCode.KOREAN.value: "S3 Bucket의 public access 정책이 일부 허용되어 있습니다.",
187
+ LanguageCode.JAPANESE.value: "一部のS3バケットでパブリックアクセスポリシーが許可されています。",
188
+ },
189
+ "danger": {
190
+ LanguageCode.ENGLISH.value: "All S3 buckets have allowed public access policies.",
191
+ LanguageCode.VIETNAMESE.value: "Tất cả S3 bucket đều cho phép quyền truy cập công khai.",
192
+ LanguageCode.KOREAN.value: "S3 Bucket의 모든 public access 정책이 모두 허용되어 있습니다.",
193
+ LanguageCode.JAPANESE.value: "すべてのS3バケットでパブリックアクセスポリシーが許可されています。",
194
+ },
195
+ "bucket_limit_warning": {
196
+ LanguageCode.ENGLISH.value: "Maximum testable bucket count ({0}) exceeded. Please check manually or use AWS Trusted Advisor.",
197
+ LanguageCode.VIETNAMESE.value: "Đã vượt quá số lượng bucket có thể kiểm tra ({0}). Vui lòng kiểm tra thủ công hoặc sử dụng AWS Trusted Advisor.",
198
+ LanguageCode.KOREAN.value: "점검 가능한 최대 버킷 수({0}) 초과. 수동으로 점검을 진행하거나 AWS Trusted Advisor를 이용해주세요.",
199
+ LanguageCode.JAPANESE.value: "テスト可能な最大バケット数({0})を超えています。手動で確認するか、AWS Trusted Advisorを使用してください。",
200
+ },
201
+ "unexpected_error": {
202
+ LanguageCode.ENGLISH.value: "An unexpected error occurred.",
203
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi không mong muốn.",
204
+ LanguageCode.KOREAN.value: "예기치 않은 오류가 발생했습니다.",
205
+ LanguageCode.JAPANESE.value: "予期せぬエラーが発生しました。",
206
+ },
207
+ }
208
+ return translations.get(key, {}).get(self.language, "Translation not available")
209
+
210
+
211
+ class CloudWatchAlarmConfigurationTranslator(BaseTranslator):
212
+ def translate(self, key):
213
+ translations = {
214
+ "checking": {
215
+ LanguageCode.ENGLISH.value: ">>> Checking CloudWatch Alarm settings",
216
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt CloudWatch Alarm",
217
+ LanguageCode.KOREAN.value: ">>> CloudWatch 알람 설정 확인",
218
+ LanguageCode.JAPANESE.value: ">>> CloudWatchアラーム設定を確認中",
219
+ },
220
+ "title": {
221
+ LanguageCode.ENGLISH.value: "CloudWatch Alarm Configuration for Significant Events",
222
+ LanguageCode.VIETNAMESE.value: "Cấu hình CloudWatch Alarm cho các sự kiện quan trọng",
223
+ LanguageCode.KOREAN.value: "중요 이벤트에 대한 CloudWatch 알람 설정",
224
+ LanguageCode.JAPANESE.value: "重要イベントに対するCloudWatchアラーム設定",
225
+ },
226
+ "alarm_exist": {
227
+ LanguageCode.ENGLISH.value: "CloudWatch Alarms have been configured. Please manually check if there are important alarm configurations such as billing and root account activity alerts.",
228
+ LanguageCode.VIETNAMESE.value: "CloudWatch Alarm đã được cấu hình. Vui lòng kiểm tra thủ công nếu có cài đặt báo thức quan trọng, chẳng hạn như thông báo chi phí và hoạt động tài khoản root.",
229
+ LanguageCode.KOREAN.value: "CloudWatch 알림이 구성되어 있습니다. 비용 알림, 루트 계정 활동 알림과 같은 중요 알림 구성 여부를 수동으로 확인해주세요.",
230
+ LanguageCode.JAPANESE.value: "CloudWatchアラームが設定されています。請求やルートアカウントのアクティビティなどの重要なアラーム設定があるか手動で確認してください。",
231
+ },
232
+ "alarm_not_exist": {
233
+ LanguageCode.ENGLISH.value: 'CloudWatch Alarms have not been configured. Please try this <a href="https://catalog.workshops.aws/startup-security-baseline/en-US/b-securing-your-account/7-configurealarms" target="_blank" style="overflow:hidden;word-break:break-all;">workshop</a> to learn how to set alarms for significant events such as billing and root account activities.',
234
+ LanguageCode.VIETNAMESE.value: 'CloudWatch Alarm chưa được cấu hình. Vui lòng tham khảo <a href="https://catalog.workshops.aws/startup-security-baseline/en-US/b-securing-your-account/7-configurealarms" target="_blank" style="overflow:hidden;word-break:break-all;">workshop</a> này để tìm hiểu cách thiết lập cảnh báo cho các sự kiện quan trọng như chi phí và hoạt động của tài khoản root.',
235
+ LanguageCode.KOREAN.value: 'CloudWatch 알림이 구성되어 있지 않습니다. <a href="https://catalog.workshops.aws/startup-security-baseline/en-US/b-securing-your-account/7-configurealarms" target="_blank" style="overflow:hidden;word-break:break-all;">워크샵</a>을 통해 비용 알림, 루트 계정 활동 알림을 설정방법을 확인해보세요.',
236
+ LanguageCode.JAPANESE.value: 'CloudWatchアラームが設定されていません。請求やルートアカウントのアクティビティなどの重要なイベントにアラームを設定する方法については、この<a href="https://catalog.workshops.aws/startup-security-baseline/en-US/b-securing-your-account/7-configurealarms" target="_blank" style="overflow:hidden;word-break:break-all;">ワークショップ</a>を試してください。',
237
+ },
238
+ "unexpected_error": {
239
+ LanguageCode.ENGLISH.value: "An unexpected error occurred.",
240
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi không mong muốn.",
241
+ LanguageCode.KOREAN.value: "예기치 않은 오류가 발생했습니다.",
242
+ LanguageCode.JAPANESE.value: "予期せぬエラーが発生しました。",
243
+ },
244
+ "retrieval_error": {
245
+ LanguageCode.ENGLISH.value: "Failed to retrieve alarm configurations in some or all regions.",
246
+ LanguageCode.VIETNAMESE.value: "Không thể truy xuất cấu hình báo thức ở một số hoặc toàn bộ khu vực.",
247
+ LanguageCode.KOREAN.value: "일부 또는 모든 리전에서 알람 구성을 가져오는 데 실패했습니다.",
248
+ LanguageCode.JAPANESE.value: "一部または全てのリージョンでアラーム設定の取得に失敗しました。",
249
+ },
250
+ }
251
+ return translations.get(key, {}).get(self.language, "Translation not available")
252
+
253
+
254
+ class IAMDirectAttachedPolicyTranslator(BaseTranslator):
255
+ def translate(self, key):
256
+ translations = {
257
+ "checking": {
258
+ LanguageCode.ENGLISH.value: ">>> Checking directly attached policies for IAM users",
259
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra các chính sách được gắn trực tiếp cho IAM user",
260
+ LanguageCode.KOREAN.value: ">>> IAM 사용자에게 직접 연결된 Policy 확인 중",
261
+ LanguageCode.JAPANESE.value: ">>> IAMユーザーに直接アタッチされたポリシーを確認中",
262
+ },
263
+ "title": {
264
+ LanguageCode.ENGLISH.value: "Directly Attached Policies to IAM Users",
265
+ LanguageCode.VIETNAMESE.value: "Các chính sách được gắn trực tiếp cho IAM user",
266
+ LanguageCode.KOREAN.value: "IAM 사용자에게 직접 연결된 정책 확인",
267
+ LanguageCode.JAPANESE.value: "IAMユーザーに直接アタッチされたポリシー",
268
+ },
269
+ "no_user": {
270
+ LanguageCode.ENGLISH.value: "There are no IAM users",
271
+ LanguageCode.VIETNAMESE.value: "Không có IAM user nào",
272
+ LanguageCode.KOREAN.value: "IAM 사용자가 없습니다.",
273
+ LanguageCode.JAPANESE.value: "IAMユーザーが存在しません",
274
+ },
275
+ "success": {
276
+ LanguageCode.ENGLISH.value: "No IAM policies are directly attached to users. All IAM user permissions are being managed efficiently.",
277
+ LanguageCode.VIETNAMESE.value: "Không có chính sách IAM nào được gắn trực tiếp cho user. Tất cả quyền của IAM user đang được quản lý hiệu quả.",
278
+ LanguageCode.KOREAN.value: "IAM 사용자에게 직접 연결된 IAM 정책이 없습니다. 모든 IAM 사용자의 권한이 효율적으로 관리되고 있습니다.",
279
+ LanguageCode.JAPANESE.value: "IAMユーザーに直接アタッチされたIAMポリシーはありません。すべてのIAMユーザーの権限が効率的に管理されています。",
280
+ },
281
+ "warning": {
282
+ LanguageCode.ENGLISH.value: "There are policies directly attached to IAM users.",
283
+ LanguageCode.VIETNAMESE.value: "Có các chính sách được gắn trực tiếp cho IAM user.",
284
+ LanguageCode.KOREAN.value: "IAM 사용자에게 직접 연결된 정책이 존재합니다.",
285
+ LanguageCode.JAPANESE.value: "IAMユーザーに直接アタッチされたポリシーが存在します。",
286
+ },
287
+ "service_failure": {
288
+ LanguageCode.ENGLISH.value: "A service failure occurred.",
289
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi dịch vụ.",
290
+ LanguageCode.KOREAN.value: "서비스 실패가 발생했습니다.",
291
+ LanguageCode.JAPANESE.value: "サービス障害が発生しました。",
292
+ },
293
+ "unexpected_error": {
294
+ LanguageCode.ENGLISH.value: "An unexpected error occurred.",
295
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi không mong muốn.",
296
+ LanguageCode.KOREAN.value: "예기치 않은 오류가 발생했습니다.",
297
+ LanguageCode.JAPANESE.value: "予期せぬエラーが発生しました。",
298
+ },
299
+ }
300
+ return translations.get(key, {}).get(self.language, "Translation not available")
301
+
302
+
303
+ class GuardDutyEnabledTranslator(BaseTranslator):
304
+ def translate(self, key):
305
+ translations = {
306
+ "checking": {
307
+ LanguageCode.ENGLISH.value: ">>> Checking GuardDuty settings",
308
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt GuardDuty",
309
+ LanguageCode.KOREAN.value: ">>> GuardDuty 설정 확인 중",
310
+ LanguageCode.JAPANESE.value: ">>> GuardDutyの設定を確認中",
311
+ },
312
+ "title": {
313
+ LanguageCode.ENGLISH.value: "GuardDuty Settings",
314
+ LanguageCode.VIETNAMESE.value: "Cài đặt GuardDuty",
315
+ LanguageCode.KOREAN.value: "GuardDuty 설정",
316
+ LanguageCode.JAPANESE.value: "GuardDutyの設定",
317
+ },
318
+ "is_activated": {
319
+ LanguageCode.ENGLISH.value: "GuardDuty has been activated in one or more regions",
320
+ LanguageCode.VIETNAMESE.value: "GuardDuty đã được kích hoạt ở một hoặc nhiều khu vực",
321
+ LanguageCode.KOREAN.value: "GuardDuty가 한개 이상의 리전에서 활성화 되어 있습니다.",
322
+ LanguageCode.JAPANESE.value: "GuardDutyが1つ以上のリージョンで有効化されています",
323
+ },
324
+ "is_not_activated": {
325
+ LanguageCode.ENGLISH.value: "GuardDuty has not been activated in any region.",
326
+ LanguageCode.VIETNAMESE.value: "GuardDuty chưa được kích hoạt ở bất kỳ khu vực nào.",
327
+ LanguageCode.KOREAN.value: "GuardDuty가 활성화 되어있는 리전이 없습니다.",
328
+ LanguageCode.JAPANESE.value: "GuardDutyがどのリージョンでも有効化されていません",
329
+ },
330
+ "retrieval_error": {
331
+ LanguageCode.ENGLISH.value: "Failed to retrieve GuardDuty status from some regions.",
332
+ LanguageCode.VIETNAMESE.value: "Không thể truy xuất trạng thái GuardDuty ở một số khu vực.",
333
+ LanguageCode.KOREAN.value: "일부 리전에서 GuardDuty 상태를 가져오는 데 실패했습니다.",
334
+ LanguageCode.JAPANESE.value: "一部のリージョンでGuardDutyの状態の取得に失敗しました。",
335
+ },
336
+ }
337
+ return translations.get(key, {}).get(self.language, "Translation not available")
338
+
339
+
340
+ class IAMPasswordPolicyTranslator(BaseTranslator):
341
+ def translate(self, key):
342
+ translations = {
343
+ "checking": {
344
+ LanguageCode.ENGLISH.value: ">>> Checking IAM password policy settings",
345
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt chính sách mật khẩu IAM",
346
+ LanguageCode.KOREAN.value: ">>> IAM 비밀번호 정책 설정을 확인하는 중",
347
+ LanguageCode.JAPANESE.value: ">>> IAMパスワードポリシー設定を確認中",
348
+ },
349
+ "title": {
350
+ LanguageCode.ENGLISH.value: "IAM Password Policy Settings",
351
+ LanguageCode.VIETNAMESE.value: "Cài đặt chính sách mật khẩu IAM",
352
+ LanguageCode.KOREAN.value: "IAM 비밀번호 정책 설정",
353
+ LanguageCode.JAPANESE.value: "IAMパスワードポリシー設定",
354
+ },
355
+ "warning": {
356
+ LanguageCode.ENGLISH.value: "IAM password policy has not been set. If you use other credentials such as IAM roles instead of root, you may ignore this warning.",
357
+ LanguageCode.VIETNAMESE.value: "Chính sách mật khẩu IAM chưa được thiết lập. Nếu bạn dùng các thông tin xác thực khác như IAM role thay vì root, có thể bỏ qua cảnh báo này.",
358
+ LanguageCode.KOREAN.value: "IAM 비밀번호 정책이 설정되어 있지 않습니다. 만약 root 대신 IAM Role과 같은 다른 자격증명을 사용하는 경우 이 경고를 무시해도 됩니다.",
359
+ LanguageCode.JAPANESE.value: "IAMパスワードポリシーが設定されていません。ルートの代わりにIAMロールなどの他の認証情報を使用している場合、この警告は無視しても構いません。",
360
+ },
361
+ "success": {
362
+ LanguageCode.ENGLISH.value: "IAM password policy has been set.",
363
+ LanguageCode.VIETNAMESE.value: "Chính sách mật khẩu IAM đã được thiết lập.",
364
+ LanguageCode.KOREAN.value: "IAM 비밀번호 정책이 설정되어 있습니다.",
365
+ LanguageCode.JAPANESE.value: "IAMパスワードポリシーが設定されています。",
366
+ },
367
+ "service_failure": {
368
+ LanguageCode.ENGLISH.value: "A service failure occurred.",
369
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi dịch vụ.",
370
+ LanguageCode.KOREAN.value: "서비스 실패가 발생했습니다.",
371
+ LanguageCode.JAPANESE.value: "サービス障害が発生しました。",
372
+ },
373
+ "unexpected_error": {
374
+ LanguageCode.ENGLISH.value: "An unexpected error occurred.",
375
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi không mong muốn.",
376
+ LanguageCode.KOREAN.value: "예기치 않은 오류가 발생했습니다.",
377
+ LanguageCode.JAPANESE.value: "予期せぬエラーが発生しました。",
378
+ },
379
+ }
380
+ return translations.get(key, {}).get(self.language, "Translation not available")
381
+
382
+
383
+ class IAMUserMFASettingTranslator(BaseTranslator):
384
+ def translate(self, key):
385
+ translations = {
386
+ "checking": {
387
+ LanguageCode.ENGLISH.value: ">>> Checking MFA settings for IAM users",
388
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt MFA cho IAM user",
389
+ LanguageCode.KOREAN.value: ">>> IAM 사용자의 MFA 설정을 확인하는 중",
390
+ LanguageCode.JAPANESE.value: ">>> IAMユーザーのMFA設定を確認中",
391
+ },
392
+ "title": {
393
+ LanguageCode.ENGLISH.value: "MFA Settings for IAM Users",
394
+ LanguageCode.VIETNAMESE.value: "Cài đặt MFA cho IAM user",
395
+ LanguageCode.KOREAN.value: "IAM 사용자의 MFA 설정",
396
+ LanguageCode.JAPANESE.value: "IAMユーザーのMFA設定",
397
+ },
398
+ "no_iam_user": {
399
+ LanguageCode.ENGLISH.value: "No IAM users exist. If you use other credentials such as IAM roles instead of root, you may ignore this warning.",
400
+ LanguageCode.VIETNAMESE.value: "Không có IAM user nào. Nếu bạn sử dụng các thông tin xác thực khác như IAM role thay vì root, có thể bỏ qua cảnh báo này.",
401
+ LanguageCode.KOREAN.value: "IAM 사용자가 없습니다. 만약 root 대신 IAM Role과 같은 다른 자격증명을 사용하는 경우 이 경고를 무시해도 됩니다.",
402
+ LanguageCode.JAPANESE.value: "IAMユーザーが存在しません。ルートの代わりにIAMロールなどの他の認証情報を使用している場合、この警告は無視しても構いません。",
403
+ },
404
+ "success": {
405
+ LanguageCode.ENGLISH.value: "All IAM users are using MFA.",
406
+ LanguageCode.VIETNAMESE.value: "Tất cả IAM user đều đang sử dụng MFA.",
407
+ LanguageCode.KOREAN.value: "모든 IAM 사용자가 MFA를 사용중입니다.",
408
+ LanguageCode.JAPANESE.value: "すべてのIAMユーザーがMFAを使用しています。",
409
+ },
410
+ "danger": {
411
+ LanguageCode.ENGLISH.value: "There are IAM users who have not set up MFA.",
412
+ LanguageCode.VIETNAMESE.value: "Có IAM user chưa thiết lập MFA.",
413
+ LanguageCode.KOREAN.value: "MFA를 설정하지 않은 IAM 사용자가 있습니다.",
414
+ LanguageCode.JAPANESE.value: "MFAを設定していないIAMユーザーがいます。",
415
+ },
416
+ "credential_report_error": {
417
+ LanguageCode.ENGLISH.value: "Failed to generate credential report",
418
+ LanguageCode.VIETNAMESE.value: "Không thể tạo báo cáo thông tin đăng nhập",
419
+ LanguageCode.KOREAN.value: "자격 증명 보고서 생성에 실패했습니다",
420
+ LanguageCode.JAPANESE.value: "認証情報レポートの生成に失敗しました",
421
+ },
422
+ }
423
+ return translations.get(key, {}).get(self.language, "Translation not available")
424
+
425
+
426
+ class MultiRegionInstanceUsageTranslator(BaseTranslator):
427
+ def translate(self, key):
428
+ translations = {
429
+ "checking": {
430
+ LanguageCode.ENGLISH.value: ">>> Checking EC2 instance usage across multiple regions",
431
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra mức sử dụng EC2 instance trên nhiều khu vực",
432
+ LanguageCode.KOREAN.value: ">>> 여러 리전에서의 EC2 인스턴스 사용 여부 확인 중",
433
+ LanguageCode.JAPANESE.value: ">>> 複数のリージョンでのEC2インスタンス使用状況を確認中",
434
+ },
435
+ "title": {
436
+ LanguageCode.ENGLISH.value: "Number of EC2 Instances in Use by Region",
437
+ LanguageCode.VIETNAMESE.value: "Số lượng EC2 instance đang sử dụng theo khu vực",
438
+ LanguageCode.KOREAN.value: "리전 별 사용중인 EC2 인스턴스 수",
439
+ LanguageCode.JAPANESE.value: "リージョン別の使用中EC2インスタンス数",
440
+ },
441
+ "info_msg": {
442
+ LanguageCode.ENGLISH.value: 'Please check your instance usage by region. You can also use <a href="https://us-east-1.console.aws.amazon.com/ec2globalview/home" target="_blank" style="overflow:hidden;word-break:break-all;">EC2 Global View</a> to check more details.',
443
+ LanguageCode.VIETNAMESE.value: 'Vui lòng kiểm tra mức sử dụng instance theo khu vực. Bạn cũng có thể sử dụng <a href="https://us-east-1.console.aws.amazon.com/ec2globalview/home" target="_blank" style="overflow:hidden;word-break:break-all;">EC2 Global View</a> để xem chi tiết.',
444
+ LanguageCode.KOREAN.value: '리전 별 인스턴스 사용량을 확인해주세요. <a href="https://us-east-1.console.aws.amazon.com/ec2globalview/home" target="_blank" style="overflow:hidden;word-break:break-all;">EC2 Global View</a> 를 이용하여 자세한 내용을 확인할 수 있습니다.',
445
+ LanguageCode.JAPANESE.value: 'リージョン別のインスタンス使用状況を確認してください。詳細は<a href="https://us-east-1.console.aws.amazon.com/ec2globalview/home" target="_blank" style="overflow:hidden;word-break:break-all;">EC2 Global View</a>を使用して確認できます。',
446
+ },
447
+ "unexpected_error": {
448
+ LanguageCode.ENGLISH.value: "An unexpected error occurred.",
449
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi không mong muốn.",
450
+ LanguageCode.KOREAN.value: "예기치 않은 오류가 발생했습니다.",
451
+ LanguageCode.JAPANESE.value: "予期せぬエラーが発生しました。",
452
+ },
453
+ "retrieval_error": {
454
+ LanguageCode.ENGLISH.value: "Failed to retrieve instance usage information from some regions.",
455
+ LanguageCode.VIETNAMESE.value: "Không thể truy xuất thông tin sử dụng instance ở một số khu vực.",
456
+ LanguageCode.KOREAN.value: "일부 리전에서 인스턴스 사용 정보를 가져오는 데 실패했습니다.",
457
+ LanguageCode.JAPANESE.value: "一部のリージョンでインスタンス使用情報の取得に失敗しました。",
458
+ },
459
+ }
460
+ return translations.get(key, {}).get(self.language, "Translation not available")
461
+
462
+
463
+ class MultiRegionTrailTranslator(BaseTranslator):
464
+ def translate(self, key):
465
+ translations = {
466
+ "checking": {
467
+ LanguageCode.ENGLISH.value: ">>> Checking multi-region logging settings",
468
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt ghi log multi-region",
469
+ LanguageCode.KOREAN.value: ">>> Multi-Region Logging 설정 확인 중",
470
+ LanguageCode.JAPANESE.value: ">>> マルチリージョンロギング設定を確認中",
471
+ },
472
+ "title": {
473
+ LanguageCode.ENGLISH.value: "Multi-Region Logging for CloudTrail Event Logs",
474
+ LanguageCode.VIETNAMESE.value: "Ghi log đa vùng (multi-region) cho CloudTrail Event Logs",
475
+ LanguageCode.KOREAN.value: "CloudTrail 이벤트 로그의 Multi-Region Logging",
476
+ LanguageCode.JAPANESE.value: "CloudTrailイベントログのマルチリージョンロギング",
477
+ },
478
+ "no_trail": {
479
+ LanguageCode.ENGLISH.value: 'No trail has been created. Please create a trail. (<a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">How to create a trail</a>)',
480
+ LanguageCode.VIETNAMESE.value: 'Chưa có trail nào được tạo. Vui lòng tạo trail. (<a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">Cách tạo trail</a>)',
481
+ LanguageCode.KOREAN.value: '생성된 trail이 없습니다. Trail을 생성해 주세요. (<a href="https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">Trail 생성방법</a>)',
482
+ LanguageCode.JAPANESE.value: 'トレイルが作成されていません。トレイルを作成してください。(<a href="https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">トレイルの作成方法</a>)',
483
+ },
484
+ "danger": {
485
+ LanguageCode.ENGLISH.value: "Multi-region logging has been disabled for all trails.",
486
+ LanguageCode.VIETNAMESE.value: "Đã tắt ghi log đa vùng cho tất cả trail.",
487
+ LanguageCode.KOREAN.value: "모든 Trail의 multi-region logging이 비활성화 되어 있습니다.",
488
+ LanguageCode.JAPANESE.value: "すべてのトレイルでマルチリージョンロギングが無効になっています。",
489
+ },
490
+ "warning": {
491
+ LanguageCode.ENGLISH.value: "Multi-region logging has been disabled for some trails.",
492
+ LanguageCode.VIETNAMESE.value: "Đã tắt ghi log đa vùng cho một số trail.",
493
+ LanguageCode.KOREAN.value: "일부 trail에서 multi-region logging이 비활성화 되어있습니다.",
494
+ LanguageCode.JAPANESE.value: "一部のトレイルでマルチリージョンロギングが無効になっています。",
495
+ },
496
+ "success": {
497
+ LanguageCode.ENGLISH.value: "Multi-region logging has been enabled for all trails.",
498
+ LanguageCode.VIETNAMESE.value: "Đã bật ghi log đa vùng cho tất cả trail.",
499
+ LanguageCode.KOREAN.value: "모든 Trail의 multi-region logging이 활성화 되어 있습니다.",
500
+ LanguageCode.JAPANESE.value: "すべてのトレイルでマルチリージョンロギングが有効になっています。",
501
+ },
502
+ "describe_trails_error": {
503
+ LanguageCode.ENGLISH.value: "Error occurred while describing trails.",
504
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi mô tả các trail.",
505
+ LanguageCode.KOREAN.value: "트레일 설명을 가져오는 중 오류가 발생했습니다.",
506
+ LanguageCode.JAPANESE.value: "トレイルの説明を取得中にエラーが発生しました。",
507
+ },
508
+ "get_trail_error": {
509
+ LanguageCode.ENGLISH.value: "Error occurred while getting trail information.",
510
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi lấy thông tin về trail.",
511
+ LanguageCode.KOREAN.value: "트레일 정보를 가져오는 중 오류가 발생했습니다.",
512
+ LanguageCode.JAPANESE.value: "トレイル情報の取得中にエラーが発生しました。",
513
+ },
514
+ }
515
+ return translations.get(key, {}).get(self.language, "Translation not available")
516
+
517
+
518
+ class RootMFASettingTranslator(BaseTranslator):
519
+ def translate(self, key):
520
+ translations = {
521
+ "checking": {
522
+ LanguageCode.ENGLISH.value: ">>> Checking MFA settings for the root account",
523
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt MFA cho tài khoản root",
524
+ LanguageCode.KOREAN.value: ">>> 루트 계정에 대한 MFA 설정 확인 중",
525
+ LanguageCode.JAPANESE.value: ">>> ルートアカウントのMFA設定を確認中",
526
+ },
527
+ "title": {
528
+ LanguageCode.ENGLISH.value: "MFA Settings for Root Account",
529
+ LanguageCode.VIETNAMESE.value: "Cài đặt MFA cho tài khoản root",
530
+ LanguageCode.KOREAN.value: "루트 계정에 대한 MFA 설정",
531
+ LanguageCode.JAPANESE.value: "ルートアカウントのMFA設定",
532
+ },
533
+ "success": {
534
+ LanguageCode.ENGLISH.value: "MFA is enabled for the root account",
535
+ LanguageCode.VIETNAMESE.value: "MFA đã được kích hoạt cho tài khoản root",
536
+ LanguageCode.KOREAN.value: "루트 계정에 대한 MFA가 설정되어 있습니다.",
537
+ LanguageCode.JAPANESE.value: "ルートアカウントのMFAが有効になっています",
538
+ },
539
+ "danger": {
540
+ LanguageCode.ENGLISH.value: 'MFA is disabled for the root account. Please check how to set up MFA for the root account via this <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html" target="_blank" style="overflow:hidden;word-break:break-all;">link</a>',
541
+ LanguageCode.VIETNAMESE.value: 'MFA đang bị vô hiệu hóa cho tài khoản root. Vui lòng tham khảo cách thiết lập MFA cho tài khoản root qua <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html" target="_blank" style="overflow:hidden;word-break:break-all;">liên kết này</a>',
542
+ LanguageCode.KOREAN.value: '루트 계정에 설정된 MFA가 없습니다. <a href="https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html" target="_blank" style="overflow:hidden;word-break:break-all;">링크</a>를 눌러 설정방법을 확인해주세요.',
543
+ LanguageCode.JAPANESE.value: 'ルートアカウントのMFAが無効になっています。ルートアカウントのMFA設定方法については、この<a href="https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html" target="_blank" style="overflow:hidden;word-break:break-all;">リンク</a>を確認してください',
544
+ },
545
+ "credential_report_error": {
546
+ LanguageCode.ENGLISH.value: "Failed to generate credential report.",
547
+ LanguageCode.VIETNAMESE.value: "Không thể tạo báo cáo thông tin đăng nhập.",
548
+ LanguageCode.KOREAN.value: "자격 증명 보고서 생성에 실패했습니다.",
549
+ LanguageCode.JAPANESE.value: "認証情報レポートの生成に失敗しました。",
550
+ },
551
+ "processing_error": {
552
+ LanguageCode.ENGLISH.value: "Error occurred while processing root credential report.",
553
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi xử lý báo cáo thông tin đăng nhập root.",
554
+ LanguageCode.KOREAN.value: "루트 자격 증명 보고서 처리 중 오류가 발생했습니다.",
555
+ LanguageCode.JAPANESE.value: "ルート認証情報レポートの処理中にエラーが発生しました。",
556
+ },
557
+ }
558
+ return translations.get(key, {}).get(self.language, "Translation not available")
559
+
560
+
561
+ class RootUsageTranslator(BaseTranslator):
562
+ def translate(self, key):
563
+ translations = {
564
+ "checking": {
565
+ LanguageCode.ENGLISH.value: ">>> Checking root account usage for the last 7 days",
566
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra mức sử dụng tài khoản root trong 7 ngày qua",
567
+ LanguageCode.KOREAN.value: ">>> 최근 7일동안의 루트 계정 사용여부를 확인하는 중",
568
+ LanguageCode.JAPANESE.value: ">>> 過去7日間のルートアカウント使用状況を確認中",
569
+ },
570
+ "title": {
571
+ LanguageCode.ENGLISH.value: "Root Account Access",
572
+ LanguageCode.VIETNAMESE.value: "Quyền truy cập tài khoản root",
573
+ LanguageCode.KOREAN.value: "루트 계정 Access",
574
+ LanguageCode.JAPANESE.value: "ルートアカウントのアクセス",
575
+ },
576
+ "success": {
577
+ LanguageCode.ENGLISH.value: "No root access history for the last {0} days.",
578
+ LanguageCode.VIETNAMESE.value: "Không có lịch sử truy cập root trong {0} ngày qua.",
579
+ LanguageCode.KOREAN.value: "최근 {0}일 간 루트 계정 접속 기록이 없습니다.",
580
+ LanguageCode.JAPANESE.value: "過去{0}日間のルートアカウントアクセス履歴はありません。",
581
+ },
582
+ "access_today": {
583
+ LanguageCode.ENGLISH.value: "Root account usage history exists for today. Please use AWS services with another credential.",
584
+ LanguageCode.VIETNAMESE.value: "Có lịch sử sử dụng tài khoản root trong ngày hôm nay. Vui lòng sử dụng AWS với thông tin xác thực khác.",
585
+ LanguageCode.KOREAN.value: "오늘 날짜의 루트 계정 사용이력이 존재합니다. 다른 자격증명으로 AWS 서비스를 이용해주세요.",
586
+ LanguageCode.JAPANESE.value: "本日のルートアカウント使用履歴が存在します。他の認証情報でAWSサービスを利用してください。",
587
+ },
588
+ "danger": {
589
+ LanguageCode.ENGLISH.value: "Root account usage history exists within the last {0} days. Please use AWS services with another credential.",
590
+ LanguageCode.VIETNAMESE.value: "Có lịch sử sử dụng tài khoản root trong vòng {0} ngày gần đây. Vui lòng sử dụng AWS với thông tin xác thực khác.",
591
+ LanguageCode.KOREAN.value: "최근 {0} 이내에 루트 계정 사용이력이 존재합니다. 다른 자격증명으로 AWS 서비스를 이용해주세요.",
592
+ LanguageCode.JAPANESE.value: "過去{0}日以内にルートアカウントの使用履歴があります。他の認証情報でAWSサービスを利用してください。",
593
+ },
594
+ "credential_report_error": {
595
+ LanguageCode.ENGLISH.value: "Failed to generate credential report.",
596
+ LanguageCode.VIETNAMESE.value: "Không thể tạo báo cáo thông tin đăng nhập.",
597
+ LanguageCode.KOREAN.value: "자격 증명 보고서 생성에 실패했습니다.",
598
+ LanguageCode.JAPANESE.value: "認証情報レポートの生成に失敗しました。",
599
+ },
600
+ "processing_error": {
601
+ LanguageCode.ENGLISH.value: "Error occurred while processing root usage check.",
602
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi xử lý kiểm tra mức sử dụng root.",
603
+ LanguageCode.KOREAN.value: "루트 사용 확인 처리 중 오류가 발생했습니다.",
604
+ LanguageCode.JAPANESE.value: "ルート使用状況の確認処理中にエラーが発生しました。",
605
+ },
606
+ }
607
+ return translations.get(key, {}).get(self.language, "Translation not available")
608
+
609
+
610
+ class RootAccessKeyTranslator(BaseTranslator):
611
+ def translate(self, key):
612
+ translations = {
613
+ "checking": {
614
+ LanguageCode.ENGLISH.value: ">>> Checking for generated access keys for the root account",
615
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra xem có access key nào được tạo cho tài khoản root",
616
+ LanguageCode.KOREAN.value: ">>> 루트 계정의 Access Key 생성 여부를 확인하는 중",
617
+ LanguageCode.JAPANESE.value: ">>> ルートアカウントの生成されたアクセスキーを確認中",
618
+ },
619
+ "title": {
620
+ LanguageCode.ENGLISH.value: "Generated Access Keys for Root Account",
621
+ LanguageCode.VIETNAMESE.value: "Access key đã được tạo cho tài khoản root",
622
+ LanguageCode.KOREAN.value: "루트 계정의 Access Key 생성 여부를 확인하는 중",
623
+ LanguageCode.JAPANESE.value: "ルートアカウントの生成されたアクセスキー",
624
+ },
625
+ "success": {
626
+ LanguageCode.ENGLISH.value: "No access keys for the root account",
627
+ LanguageCode.VIETNAMESE.value: "Không có access key nào cho tài khoản root",
628
+ LanguageCode.KOREAN.value: "루트 계정의 Access Key가 없습니다.",
629
+ LanguageCode.JAPANESE.value: "ルートアカウントのアクセスキーはありません",
630
+ },
631
+ "danger": {
632
+ LanguageCode.ENGLISH.value: 'The root account access key is in use. It is safer not to use the root access key. (<a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_delete-key" target="_blank" style="overflow:hidden;word-break:break-all;">How to delete access key</a>)',
633
+ LanguageCode.VIETNAMESE.value: 'Tài khoản root đang sử dụng access key. Sẽ an toàn hơn nếu không dùng access key cho root. (<a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_delete-key" target="_blank" style="overflow:hidden;word-break:break-all;">Cách xóa access key</a>)',
634
+ LanguageCode.KOREAN.value: '루트계정에서 Access Key를 사용중입니다. 루트 계정의 Access Key는 사용하지 않는 것이 안전합니다. (<a href="https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_delete-key" target="_blank" style="overflow:hidden;word-break:break-all;">Access Key 삭제방법</a>)',
635
+ LanguageCode.JAPANESE.value: 'ルートアカウントのアクセスキーが使用中です。ルートアカウントのアクセスキーを使用しない方が安全です。(<a href="https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_delete-key" target="_blank" style="overflow:hidden;word-break:break-all;">アクセスキーの削除方法</a>)',
636
+ },
637
+ "credential_report_error": {
638
+ LanguageCode.ENGLISH.value: "Failed to generate credential report.",
639
+ LanguageCode.VIETNAMESE.value: "Không thể tạo báo cáo thông tin đăng nhập.",
640
+ LanguageCode.KOREAN.value: "자격 증명 보고서 생성에 실패했습니다.",
641
+ LanguageCode.JAPANESE.value: "認証情報レポートの生成に失敗しました。",
642
+ },
643
+ "processing_error": {
644
+ LanguageCode.ENGLISH.value: "Error occurred while processing root access key check.",
645
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi xử lý kiểm tra access key của root.",
646
+ LanguageCode.KOREAN.value: "루트 액세스 키 확인 처리 중 오류가 발생했습니다.",
647
+ LanguageCode.JAPANESE.value: "ルートアクセスキーの確認処理中にエラーが発生しました。",
648
+ },
649
+ }
650
+ return translations.get(key, {}).get(self.language, "Translation not available")
651
+
652
+
653
+ class TrailEnabledTranslator(BaseTranslator):
654
+ def translate(self, key):
655
+ translations = {
656
+ "checking": {
657
+ LanguageCode.ENGLISH.value: ">>> Checking trail settings in CloudTrail",
658
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt trail trong CloudTrail",
659
+ LanguageCode.KOREAN.value: ">>> CloudTrail의 추적 설정 확인 중",
660
+ LanguageCode.JAPANESE.value: ">>> CloudTrailのトレイル設定を確認中",
661
+ },
662
+ "title": {
663
+ LanguageCode.ENGLISH.value: "Enable Trail on CloudTrail",
664
+ LanguageCode.VIETNAMESE.value: "Bật trail trên CloudTrail",
665
+ LanguageCode.KOREAN.value: "CloudTrail의 Trail 설정 확인",
666
+ LanguageCode.JAPANESE.value: "CloudTrailのトレイル有効化",
667
+ },
668
+ "no_trail": {
669
+ LanguageCode.ENGLISH.value: 'There is no trail on CloudTrail. Please create a trail. (<a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">How to create a trail</a>)',
670
+ LanguageCode.VIETNAMESE.value: 'CloudTrail chưa có trail nào. Vui lòng tạo một trail. (<a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">Cách tạo trail</a>)',
671
+ LanguageCode.KOREAN.value: '생성된 Trail이 없습니다. Trail을 생성 해주세요. (<a href="https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">Trail 생성방법</a>)',
672
+ LanguageCode.JAPANESE.value: 'CloudTrailにトレイルがありません。トレイルを作成してください。(<a href="https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/aws-startup-security-baseline/acct-07.html" target="_blank" style="overflow:hidden;word-break:break-all;">トレイルの作成方法</a>)',
673
+ },
674
+ "danger": {
675
+ LanguageCode.ENGLISH.value: "Logging is disabled for all trails. Please enable logging.",
676
+ LanguageCode.VIETNAMESE.value: "Đã tắt logging cho tất cả trail. Vui lòng bật logging.",
677
+ LanguageCode.KOREAN.value: "모든 Trail의 Logging 설정이 비활성화 되어있습니다. Logging을 활성화 해주세요.",
678
+ LanguageCode.JAPANESE.value: "すべてのトレイルでロギングが無効になっています。ロギングを有効にしてください。",
679
+ },
680
+ "warning": {
681
+ LanguageCode.ENGLISH.value: "Logging is disabled for some trails. Please enable logging.",
682
+ LanguageCode.VIETNAMESE.value: "Đã tắt logging cho một số trail. Vui lòng bật logging.",
683
+ LanguageCode.KOREAN.value: "일부 Trail의 Logging 설정이 비활성화 되어있습니다. Logging을 활성화 해주세요.",
684
+ LanguageCode.JAPANESE.value: "一部のトレイルでロギングが無効になっています。ロギングを有効にしてください。",
685
+ },
686
+ "success": {
687
+ LanguageCode.ENGLISH.value: "Logging is enabled for all trails.",
688
+ LanguageCode.VIETNAMESE.value: "Đã bật logging cho tất cả trail.",
689
+ LanguageCode.KOREAN.value: "모든 Trail의 Logging 설정이 활성화 되어있습니다.",
690
+ LanguageCode.JAPANESE.value: "すべてのトレイルでロギングが有効になっています。",
691
+ },
692
+ "describe_trails_error": {
693
+ LanguageCode.ENGLISH.value: "Error occurred while describing trails.",
694
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi mô tả trail.",
695
+ LanguageCode.KOREAN.value: "트레일 설명을 가져오는 중 오류가 발생했습니다.",
696
+ LanguageCode.JAPANESE.value: "トレイルの説明を取得中にエラーが発生しました。",
697
+ },
698
+ "get_trail_status_error": {
699
+ LanguageCode.ENGLISH.value: "Error occurred while getting trail status.",
700
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi lấy trạng thái trail.",
701
+ LanguageCode.KOREAN.value: "트레일 상태를 가져오는 중 오류가 발생했습니다.",
702
+ LanguageCode.JAPANESE.value: "トレイルの状態を取得中にエラーが発生しました。",
703
+ },
704
+ }
705
+ return translations.get(key, {}).get(self.language, "Translation not available")
706
+
707
+
708
+ class TrustedAdvisorTranslator(BaseTranslator):
709
+ def translate(self, key):
710
+ translations = {
711
+ "checking": {
712
+ LanguageCode.ENGLISH.value: ">>> Checking Trusted Advisor settings",
713
+ LanguageCode.VIETNAMESE.value: ">>> Kiểm tra cài đặt Trusted Advisor",
714
+ LanguageCode.KOREAN.value: ">>> TrustedAdvisor 설정 확인 중",
715
+ LanguageCode.JAPANESE.value: ">>> Trusted Advisor設定を確認中",
716
+ },
717
+ "title": {
718
+ LanguageCode.ENGLISH.value: "Enable Trusted Advisor",
719
+ LanguageCode.VIETNAMESE.value: "Bật Trusted Advisor",
720
+ LanguageCode.KOREAN.value: "Trusted Advisor를 사용하도록 설정했는지 확인",
721
+ LanguageCode.JAPANESE.value: "Trusted Advisorの有効化",
722
+ },
723
+ "info": {
724
+ LanguageCode.ENGLISH.value: 'Please <a href="https://us-east-1.console.aws.amazon.com/trustedadvisor/home?region=ap-northeast-2#/preferences/manage-trusted-advisor" target="_blank" style="overflow:hidden;word-break:break-all;">check</a> if Trusted Advisor is enabled in your AWS account.',
725
+ LanguageCode.VIETNAMESE.value: 'Vui lòng <a href="https://us-east-1.console.aws.amazon.com/trustedadvisor/home?region=ap-northeast-2#/preferences/manage-trusted-advisor" target="_blank" style="overflow:hidden;word-break:break-all;">kiểm tra</a> xem Trusted Advisor đã được kích hoạt trong tài khoản AWS của bạn hay chưa.',
726
+ LanguageCode.KOREAN.value: '현재 계정의 Trusted Advisor 설정을 <a href="https://us-east-1.console.aws.amazon.com/trustedadvisor/home?region=ap-northeast-2#/preferences/manage-trusted-advisor" target="_blank" style="overflow:hidden;word-break:break-all;">확인</a>하세요.',
727
+ LanguageCode.JAPANESE.value: 'AWSアカウントでTrusted Advisorが有効になっているかを<a href="https://us-east-1.console.aws.amazon.com/trustedadvisor/home?region=ap-northeast-2#/preferences/manage-trusted-advisor" target="_blank" style="overflow:hidden;word-break:break-all;">確認</a>してください。',
728
+ },
729
+ "error": {
730
+ LanguageCode.ENGLISH.value: "An error occurred while checking Trust Advisor configuration.",
731
+ LanguageCode.VIETNAMESE.value: "Đã xảy ra lỗi khi kiểm tra cấu hình Trusted Advisor.",
732
+ LanguageCode.KOREAN.value: "Trust Advisor 구성을 확인하는 중 오류가 발생했습니다.",
733
+ LanguageCode.JAPANESE.value: "Trust Advisor設定の確認中にエラーが発生しました。",
734
+ },
735
+ }
736
+ return translations.get(key, {}).get(self.language, "Translation not available")
737
+
738
+
739
+ def get_translator(module_name, language):
740
+ translators = {
741
+ "main": MainTranslator,
742
+ "root_mfa": RootMFASettingTranslator,
743
+ "root_usage": RootUsageTranslator,
744
+ "root_access_key": RootAccessKeyTranslator,
745
+ "iam_user_mfa": IAMUserMFASettingTranslator,
746
+ "iam_password_policy": IAMPasswordPolicyTranslator,
747
+ "direct_attached_policy": IAMDirectAttachedPolicyTranslator,
748
+ "alternate_contacts": AlternateContactTranslator,
749
+ "trail_enabled": TrailEnabledTranslator,
750
+ "multi_region_trail": MultiRegionTrailTranslator,
751
+ "account_level_bucket_public_access": AccountLevelBucketPublicAccessTranslator,
752
+ "bucket_public_access": BucketPublicAccessTranslator,
753
+ "cloudwatch_alarm_configuration": CloudWatchAlarmConfigurationTranslator,
754
+ "multi_region_instance_usage": MultiRegionInstanceUsageTranslator,
755
+ "guardduty_enabled": GuardDutyEnabledTranslator,
756
+ "trusted_advisor": TrustedAdvisorTranslator,
757
+ }
758
+ translator_class = translators.get(module_name)
759
+ if translator_class:
760
+ return translator_class(language)
761
+ else:
762
+ raise ValueError(f"No translator found for module: {module_name}")