paint-brush
मैंने कई उपयोगकर्ताओं के लिए AWS वर्कमेल बैकअप को कैसे स्वचालित कियाद्वारा@th3n00bc0d3r
306 रीडिंग
306 रीडिंग

मैंने कई उपयोगकर्ताओं के लिए AWS वर्कमेल बैकअप को कैसे स्वचालित किया

द्वारा Muhammad Bilal15m2024/05/27
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

AWS WorkMail एक शक्तिशाली ईमेल और कैलेंडर सेवा है जो सुरक्षा, विश्वसनीयता और उपयोग में आसानी को जोड़ती है। AWS WorkMail का लाभ उठाकर, संगठन ईमेल इंफ्रास्ट्रक्चर के प्रबंधन की जटिलताओं के बारे में चिंता किए बिना अपनी मुख्य गतिविधियों पर ध्यान केंद्रित कर सकते हैं। इस ट्यूटोरियल में, मैं आपको कई उपयोगकर्ताओं के लिए Amazon WorkMail बैकअप को स्वचालित करने की प्रक्रिया से रूबरू कराऊँगा, जो 10 समवर्ती मेलबॉक्स निर्यात कार्यों को संभालता है।
featured image - मैंने कई उपयोगकर्ताओं के लिए AWS वर्कमेल बैकअप को कैसे स्वचालित किया
Muhammad Bilal HackerNoon profile picture
0-item

AWS WorkMail एक शक्तिशाली ईमेल और कैलेंडर सेवा है जो सुरक्षा, विश्वसनीयता और उपयोग में आसानी को जोड़ती है। AWS सेवाओं के साथ इसका एकीकरण और मौजूदा ईमेल क्लाइंट के साथ संगतता इसे उन व्यवसायों के लिए एक आकर्षक विकल्प बनाती है जो सुरक्षा और अनुपालन सुनिश्चित करते हुए अपने ईमेल और कैलेंडर प्रबंधन को सुव्यवस्थित करना चाहते हैं। AWS WorkMail का लाभ उठाकर, संगठन ईमेल इंफ्रास्ट्रक्चर के प्रबंधन की जटिलताओं के बारे में चिंता किए बिना अपनी मुख्य गतिविधियों पर ध्यान केंद्रित कर सकते हैं। अपने AWS WorkMail के लिए एक विश्वसनीय बैकअप सिस्टम सेट करना यह सुनिश्चित करने के लिए महत्वपूर्ण है कि आपके ईमेल सुरक्षित और आसानी से पुनर्प्राप्त करने योग्य हों। इस ट्यूटोरियल में, मैं आपको कई उपयोगकर्ताओं के लिए AWS WorkMail बैकअप को स्वचालित करने की प्रक्रिया से गुज़ारूँगा, जो 10 समवर्ती मेलबॉक्स निर्यात नौकरियों को संभालता है। हम एक मजबूत बैकअप समाधान बनाने के लिए AWS सेवाओं और पायथन का उपयोग करेंगे।


आह! मुझे वह समय याद है जब मैं CPANEL मेल सर्वर का उपयोग कर रहा था और फिर अपने स्वयं के मेल सर्वर के साथ छेड़छाड़ कर रहा था। 2010 के दशक की शुरुआत में IP पतों तक सीमित पहुँच वाले एकल-इंस्टेंस मेल सर्वर सुचारू थे, लेकिन जैसे-जैसे दुनिया भर में अधिक से अधिक लोग इन सर्वरों का शोषण करने लगे, कॉमन, हमें अभी भी बहुत सारे स्पैम और मार्केटिंग मिलते हैं। यह सुनिश्चित करना कठिन था कि आपका ईमेल स्पैम बॉक्स में न जाए।


AWS वर्कमेल, एक स्व-होस्टेड मेल सर्वर और एक cPanel मेल सर्वर के बीच चुनाव कई कारकों पर निर्भर करता है, जिसमें बजट, तकनीकी विशेषज्ञता, मापनीयता आवश्यकताएं और सुरक्षा आवश्यकताएं शामिल हैं।


  • AWS वर्कमेल उन व्यवसायों के लिए आदर्श है जो न्यूनतम रखरखाव ओवरहेड के साथ एक स्केलेबल, सुरक्षित और प्रबंधित ईमेल समाधान चाहते हैं।
  • स्व-होस्टेड मेल सर्वर उन संगठनों के लिए उपयुक्त है जिनके पास आंतरिक तकनीकी विशेषज्ञता और विशिष्ट अनुकूलन आवश्यकताएं हैं, लेकिन इसमें उच्च लागत और रखरखाव प्रयास शामिल हैं।
  • सीपैनल मेल सर्वर छोटे से मध्यम आकार के व्यवसायों के लिए एक संतुलित दृष्टिकोण प्रदान करता है, जिन्हें उपयोगकर्ता के अनुकूल इंटरफेस की आवश्यकता होती है और जो कुछ स्तर के रखरखाव के साथ सहज होते हैं, बंडल होस्टिंग सेवाओं से लाभान्वित होते हैं।


मेरी मुख्य चिंताएं हमेशा निम्नलिखित थीं;

सुरक्षा

  • AWS वर्कमेल : अंतर्निहित सुरक्षा सुविधाएं प्रदान करता है, जिसमें पारगमन और विश्राम के दौरान एन्क्रिप्शन, AWS कुंजी प्रबंधन सेवा (KMS) के साथ एकीकरण और विभिन्न नियामक मानकों के अनुपालन शामिल हैं।
  • स्व-होस्टेड मेल सर्वर : सुरक्षा पूरी तरह से व्यवस्थापक की विशेषज्ञता पर निर्भर करती है। खतरों से बचाव के लिए एन्क्रिप्शन, स्पैम फ़िल्टरिंग और नियमित सुरक्षा अपडेट के लिए कॉन्फ़िगरेशन की आवश्यकता होती है।
  • cPanel मेल सर्वर : सुरक्षा सुविधाएं प्रदान करता है, लेकिन सुरक्षा उपायों को लागू करने और बनाए रखने की जिम्मेदारी उपयोगकर्ता पर आती है। cPanel SSL/TLS कॉन्फ़िगरेशन, स्पैम फ़िल्टरिंग और एंटीवायरस के लिए उपकरण प्रदान करता है, लेकिन उचित सेटअप और नियमित अपडेट आवश्यक हैं।


फिर AWS बचाव के लिए आया और 2015 से AWS का उपयोग करने के बाद से, चीजें बहुत आसान रही हैं, सिवाय एक बार जब मेरे AWS खाते का बैकअप लेने और नए खाते में जाने की बात आई। खैर, मैं एक विश्वसनीय समाधान खोजने के लिए इंटरनेट पर खोज कर रहा हूं क्योंकि, जहां तक हम अब तक बोलते हैं, AWS वर्कमेल आपके ईमेल को आपके स्थानीय कंप्यूटर या S3 में बैकअप करने का सीधा तरीका प्रदान नहीं करता है और सुरक्षा अनुपालन के आधार पर यह समझ में आता है, लेकिन फिर भी, मैं अभी भी उम्मीद कर रहा हूं कि AWS को इसके लिए कुछ GUI या एक उपकरण प्रदान करना चाहिए। खैर ब्राउज़ करते समय, मुझे निश्चित रूप से भुगतान किए जाने वाले उपकरण मिले, इसलिए मैंने अपना खुद का उपकरण विकसित करने का रास्ता अपनाने का फैसला किया। कठोर परीक्षण के बाद, AWS के साथ मेरे अनुभव के आधार पर, 9/10 समस्याएं हमेशा होती हैं जब एक सेवा नीति या IAM भूमिका के मुद्दों के कारण दूसरी सेवा के साथ संवाद करने में असमर्थ होती है।


यह उन सभी लोगों के लिए मेरा योगदान है, जिन्हें AWS वर्क मेल खातों का बैकअप लेने में कठिनाई हो रही है।


बैकअप कैसे काम करता है?


हमने आपके खाते में एक IAM भूमिका बनाई है, जिससे भूमिका को AWS WorkMail से निर्यात करने की पहुँच मिलती है, और फिर हमने उसी भूमिका से एक नीति संलग्न की है ताकि उसे S3 तक पहुँचने की अनुमति मिल सके। फिर हम एक KMS कुंजी बनाते हैं, जिसे IAM भूमिका तक पहुँच दी जाती है। S3 बकेट को भी ठीक से काम करने के लिए IAM भूमिका तक पहुँच की आवश्यकता होती है।

चरण 1: AWS CLI कॉन्फ़िगर करें

सबसे पहले, सुनिश्चित करें कि AWS CLI उचित क्रेडेंशियल के साथ इंस्टॉल और कॉन्फ़िगर किया गया है। अपना टर्मिनल खोलें और चलाएँ:

 aws configure

अपनी AWS एक्सेस कुंजी आईडी, गुप्त एक्सेस कुंजी, डिफ़ॉल्ट क्षेत्र और आउटपुट प्रारूप सेट करने के लिए संकेतों का पालन करें।

चरण 2: आवश्यक AWS संसाधन सेट अप करें

हमें एक IAM रोल, नीतियाँ, एक S3 बकेट और एक KMS कुंजी बनाने की आवश्यकता है। निम्न बैश स्क्रिप्ट को setup_workmail_export.sh के रूप में सहेजें।

 #!/bin/bash # Configuration ROLE_NAME="WorkMailExportRole" POLICY_NAME="workmail-export" S3_BUCKET_NAME="s3.bucket.name" AWS_REGION="your-region" ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) # Create Trust Policy cat <<EOF > trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.workmail.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "$ACCOUNT_ID" } } } ] } EOF # Create IAM Role aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://trust-policy.json # Create IAM Policy cat <<EOF > role-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::$S3_BUCKET_NAME", "arn:aws:s3:::$S3_BUCKET_NAME/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" } ] } EOF # Attach the Policy to the Role aws iam put-role-policy --role-name $ROLE_NAME --policy-name $POLICY_NAME --policy-document file://role-policy.json # Create S3 Bucket aws s3api create-bucket --bucket $S3_BUCKET_NAME --region $AWS_REGION --create-bucket-configuration LocationConstraint=$AWS_REGION # Create Key Policy cat <<EOF > key-policy.json { "Version": "2012-10-17", "Id": "workmail-export-key", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::$ACCOUNT_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::$ACCOUNT_ID:role/$ROLE_NAME" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" } ] } EOF # Create the KMS Key and get the Key ID and ARN using Python for JSON parsing KEY_METADATA=$(aws kms create-key --policy file://key-policy.json) KEY_ID=$(python3 -c "import sys, json; print(json.load(sys.stdin)['KeyMetadata']['KeyId'])" <<< "$KEY_METADATA") KEY_ARN=$(python3 -c "import sys, json; print(json.load(sys.stdin)['KeyMetadata']['Arn'])" <<< "$KEY_METADATA") # Update S3 Bucket Policy cat <<EOF > s3_bucket_policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::$ACCOUNT_ID:role/$ROLE_NAME" }, "Action": "s3:*" "Resource": [ "arn:aws:s3:::$S3_BUCKET_NAME", "arn:aws:s3:::$S3_BUCKET_NAME/*" ] } ] } EOF # Apply the Bucket Policy aws s3api put-bucket-policy --bucket $S3_BUCKET_NAME --policy file://s3_bucket_policy.json # Clean up temporary files rm trust-policy.json role-policy.json key-policy.json s3_bucket_policy.json # Display the variables required for the backup script cat <<EOF Setup complete. Here are the variables required for the backup script: # Print out the Variables organization_id = 'your-organization-id' user_id = 'your-user-id' s3_bucket_name = '$S3_BUCKET_NAME' s3_prefix = 'workmail-backup/' region = '$AWS_REGION' kms_key_arn = '$KEY_ARN' role_name = '$ROLE_NAME' account_id = '$ACCOUNT_ID' EOF

स्क्रिप्ट को निष्पादन योग्य बनाएं और इसे चलाएं:

 chmod +x setup_workmail_export.sh ./setup_workmail_export.sh

चरण 3: बैकअप स्क्रिप्ट लिखें

अब, आइए 10 के बैचों में मेलबॉक्सों को निर्यात करने के लिए पायथन स्क्रिप्ट लिखें। निम्नलिखित स्क्रिप्ट को workmail_export.py के रूप में सहेजें।

 import boto3 import json import time from datetime import datetime # Configuration organization_id = 'your-organization-id' user_emails = { 'user-id-1': '[email protected]', 'user-id-2': '[email protected]', 'user-id-3': '[email protected]', 'user-id-4': '[email protected]', 'user-id-5': '[email protected]', 'user-id-6': '[email protected]', 'user-id-7': '[email protected]', 'user-id-8': '[email protected]', 'user-id-9': '[email protected]', 'user-id-10': '[email protected]', 'user-id-11': '[email protected]', 'user-id-12': '[email protected]' # Add more user ID to email mappings as needed } s3_bucket_name = 's3.bucket.name' region = 'your-region' kms_key_arn = 'arn:aws:kms:your-region:your-account-id:key/your-key-id' role_name = 'WorkMailExportRole' account_id = 'your-account-id' # Get the current date current_date = datetime.now().strftime('%Y-%m-%d') # Set the S3 prefix with the date included s3_prefix_base = f'workmail-backup/{current_date}/' # Initialize AWS clients workmail = boto3.client('workmail', region_name=region) sts = boto3.client('sts', region_name=region) def start_export_job(entity_id, user_email): client_token = str(time.time()) # Unique client token role_arn = f"arn:aws:iam::{account_id}:role/{role_name}" s3_prefix = f"{s3_prefix_base}{user_email}/" try: response = workmail.start_mailbox_export_job( ClientToken=client_token, OrganizationId=organization_id, EntityId=entity_id, Description='Backup job', RoleArn=role_arn, KmsKeyArn=kms_key_arn, S3BucketName=s3_bucket_name, S3Prefix=s3_prefix ) return response['JobId'] except Exception as e: print(f"Failed to start export job for {entity_id}: {e}") return None def check_job_status(job_id): while True: try: response = workmail.describe_mailbox_export_job( OrganizationId=organization_id, JobId=job_id ) print(f"Full Response: {response}") # Log full response for debugging state = response.get('State', 'UNKNOWN') print(f"Job State: {state}") if state in ['COMPLETED', 'FAILED']: break except Exception as e : print(f"Error checking job status for {job_id}: {e}") time.sleep(30) # Wait for 30 seconds before checking again return state def export_mailboxes_in_batches(user_emails, batch_size=10): user_ids = list(user_emails.keys()) for i in range(0, len(user_ids), batch_size): batch = user_ids[i:i+batch_size] job_ids = [] for user_id in batch: user_email = user_emails[user_id] job_id = start_export_job(user_id, user_email) if job_id: print(f"Started export job for {user_email} with Job ID: {job_id}") job_ids.append((user_email, job_id)) for user_email, job_id in job_ids: state = check_job_status(job_id) if state == 'COMPLETED': print(f"Export job for {user_email} completed successfully") else: print(f"Export job for {user_email} failed with state: {state}") def main(): export_mailboxes_in_batches(user_emails) if __name__ == "__main__": main()

प्लेसहोल्डर्स को अपने वास्तविक AWS वर्कमेल संगठन आईडी, ईमेल मैपिंग के लिए उपयोगकर्ता आईडी, S3 बकेट नाम, क्षेत्र, KMS कुंजी ARN, भूमिका नाम और AWS खाता आईडी से बदलें।


चरण 4: बैकअप स्क्रिप्ट चलाएँ

सुनिश्चित करें कि आपके पास Boto3 स्थापित है:

 pip install boto3

फिर, पायथन स्क्रिप्ट निष्पादित करें:

 python workmail_export.py 


मेलबॉक्स आयात करें

 import boto3 import json import time # Configuration organization_id = 'your-organization-id' user_import_data = { 'user-id-1': '[email protected]', 'user-id-2': '[email protected]', 'user-id-3': '[email protected]', 'user-id-4': '[email protected]', 'user-id-5': '[email protected]', 'user-id-6': '[email protected]', 'user-id-7': '[email protected]', 'user-id-8': '[email protected]', 'user-id-9': '[email protected]', 'user-id-10': '[email protected]', 'user-id-11': '[email protected]', 'user-id-12': '[email protected]' # Add more user ID to email mappings as needed } s3_bucket_name = 's3.bucket.name' s3_object_prefix = 'workmail-backup/' # Prefix for S3 objects (folders) region = 'your-region' role_name = 'WorkMailImportRole' account_id = 'your-account-id' # Initialize AWS clients workmail = boto3.client('workmail', region_name=region) sts = boto3.client('sts', region_name=region) def start_import_job(entity_id, user_email): client_token = str(time.time()) # Unique client token role_arn = f"arn:aws:iam::{account_id}:role/{role_name}" s3_object_key = f"{s3_object_prefix}{user_email}/export.zip" try: response = workmail.start_mailbox_import_job( ClientToken=client_token, OrganizationId=organization_id, EntityId=entity_id, Description='Import job', RoleArn=role_arn, S3BucketName=s3_bucket_name, S3ObjectKey=s3_object_key ) return response['JobId'] except Exception as e: print(f"Failed to start import job for {entity_id}: {e}") return None def check_job_status(job_id): while True: try: response = workmail.describe_mailbox_import_job( OrganizationId=organization_id, JobId=job_id ) state = response.get('State', 'UNKNOWN') print(f"Job State: {state}") if state in ['COMPLETED', 'FAILED']: break except Exception as e: print(f"Error checking job status for {job_id}: {e}") time.sleep(30) # Wait for 30 seconds before checking again return state def import_mailboxes_in_batches(user_import_data, batch_size=10): user_ids = list(user_import_data.keys()) for i in range(0, len(user_ids), batch_size): batch = user_ids[i:i+batch_size] job_ids = [] for user_id in batch: user_email = user_import_data[user_id] job_id = start_import_job(user_id, user_email) if job_id: print(f"Started import job for {user_email} with Job ID: {job_id}") job_ids.append((user_email, job_id)) for user_email, job_id in job_ids: state = check_job_status(job_id) if state == 'COMPLETED': print(f"Import job for {user_email} completed successfully") else: print(f"Import job for {user_email} failed with state: {state}") def main(): import_mailboxes_in_batches(user_import_data) if __name__ == "__main__": main()


इन चरणों का पालन करके, आपने अपने AWS WorkMail मेलबॉक्स का बैकअप लेने के लिए एक स्वचालित सिस्टम सेट अप किया है, जो 10 समवर्ती निर्यात कार्यों को संभालता है। यह समाधान सुनिश्चित करता है कि आपके ईमेल सुरक्षित रूप से S3 बकेट में संग्रहीत हैं, उपयोगकर्ता ईमेल और दिनांक द्वारा व्यवस्थित हैं, और KMS कुंजी के साथ एन्क्रिप्ट किए गए हैं। यह सेटअप आपके संगठन के ईमेल डेटा के लिए एक मजबूत और स्केलेबल बैकअप रणनीति प्रदान करता है।


गिटहब रेपो: https://github.com/th3n00bc0d3r/AWS-WorkMail-Backup


कृपया मेरे लिंक्डइन पर संपर्क करें, इसके अलावा आप हमेशा मेरे लिए कॉफी भी खरीद सकते हैं