paint-brush
আমি কিভাবে একাধিক ব্যবহারকারীর জন্য AWS ওয়ার্কমেল ব্যাকআপ স্বয়ংক্রিয়ভাবে তৈরি করিদ্বারা@th3n00bc0d3r
306 পড়া
306 পড়া

আমি কিভাবে একাধিক ব্যবহারকারীর জন্য AWS ওয়ার্কমেল ব্যাকআপ স্বয়ংক্রিয়ভাবে তৈরি করি

দ্বারা Muhammad Bilal15m2024/05/27
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

AWS WorkMail হল একটি শক্তিশালী ইমেল এবং ক্যালেন্ডার পরিষেবা যা নিরাপত্তা, নির্ভরযোগ্যতা এবং ব্যবহারের সহজলভ্যতাকে একত্রিত করে। AWS WorkMail ব্যবহার করে, ইমেল পরিকাঠামো পরিচালনার জটিলতা নিয়ে উদ্বিগ্ন না হয়ে সংস্থাগুলি তাদের মূল ক্রিয়াকলাপগুলিতে ফোকাস করতে পারে৷ এই টিউটোরিয়ালে, আমি আপনাকে একাধিক ব্যবহারকারীর জন্য অ্যামাজন ওয়ার্কমেল ব্যাকআপ স্বয়ংক্রিয় করার প্রক্রিয়ার মধ্য দিয়ে হেঁটে যাব, 10টি সমবর্তী মেইলবক্স রপ্তানি কাজ পরিচালনা করব।
featured image - আমি কিভাবে একাধিক ব্যবহারকারীর জন্য AWS ওয়ার্কমেল ব্যাকআপ স্বয়ংক্রিয়ভাবে তৈরি করি
Muhammad Bilal HackerNoon profile picture
0-item

AWS WorkMail হল একটি শক্তিশালী ইমেল এবং ক্যালেন্ডার পরিষেবা যা নিরাপত্তা, নির্ভরযোগ্যতা এবং ব্যবহারের সহজলভ্যতাকে একত্রিত করে। AWS পরিষেবাগুলির সাথে এর একীকরণ এবং বিদ্যমান ইমেল ক্লায়েন্টগুলির সাথে সামঞ্জস্যতা নিরাপত্তা এবং সম্মতি নিশ্চিত করার সাথে সাথে তাদের ইমেল এবং ক্যালেন্ডার পরিচালনাকে স্ট্রীমলাইন করতে চাওয়া ব্যবসাগুলির জন্য এটি একটি আকর্ষণীয় পছন্দ করে তোলে৷ AWS WorkMail ব্যবহার করে, ইমেল পরিকাঠামো পরিচালনার জটিলতা নিয়ে উদ্বিগ্ন না হয়ে সংস্থাগুলি তাদের মূল ক্রিয়াকলাপগুলিতে ফোকাস করতে পারে৷ আপনার ইমেলগুলি সুরক্ষিত এবং সহজেই পুনরুদ্ধারযোগ্য তা নিশ্চিত করার জন্য আপনার AWS WorkMail এর জন্য একটি নির্ভরযোগ্য ব্যাকআপ সিস্টেম সেট আপ করা অত্যন্ত গুরুত্বপূর্ণ৷ এই টিউটোরিয়ালে, আমি আপনাকে একাধিক ব্যবহারকারীর জন্য AWS ওয়ার্কমেল ব্যাকআপগুলি স্বয়ংক্রিয় করার প্রক্রিয়ার মধ্য দিয়ে নিয়ে যাব, 10টি সমবর্তী মেলবক্স রপ্তানি কাজ পরিচালনা করব৷ আমরা একটি শক্তিশালী ব্যাকআপ সমাধান তৈরি করতে AWS পরিষেবা এবং পাইথন ব্যবহার করব।


আহ! আমার মনে আছে যখন আমি CPANEL মেল সার্ভার ব্যবহার করছিলাম এবং তারপর আমার নিজের মেল সার্ভারের সাথে হস্তক্ষেপ করছিলাম। 2010-এর দশকের গোড়ার দিকে আইপি ঠিকানাগুলিতে সীমিত অ্যাক্সেস সহ সেই একক-ইনস্ট্যান্স মেল সার্ভারগুলি মসৃণ ছিল, কিন্তু বিশ্বব্যাপী যত বেশি মানুষ এই সার্ভারগুলিকে শোষণ করতে শুরু করেছে, কমন, আমরা এখনও প্রচুর স্প্যাম এবং বিপণন পাই৷ আপনার ইমেল স্প্যাম বক্সে না আসে তা নিশ্চিত করার জন্য জিনিসগুলি কঠিন ছিল৷


AWS WorkMail, একটি স্ব-হোস্টেড মেল সার্ভার এবং একটি cPanel মেল সার্ভারের মধ্যে পছন্দ বাজেট, প্রযুক্তিগত দক্ষতা, স্কেলেবিলিটি প্রয়োজনীয়তা এবং নিরাপত্তা প্রয়োজনীয়তা সহ বিভিন্ন কারণের উপর নির্ভর করে।


  • ন্যূনতম রক্ষণাবেক্ষণ ওভারহেড সহ একটি পরিমাপযোগ্য, সুরক্ষিত এবং পরিচালিত ইমেল সমাধান খুঁজছেন এমন ব্যবসার জন্য AWS WorkMail আদর্শ।
  • স্ব-হোস্টেড মেল সার্ভার অভ্যন্তরীণ প্রযুক্তিগত দক্ষতা এবং নির্দিষ্ট কাস্টমাইজেশন প্রয়োজনীয়তা সহ সংস্থাগুলির জন্য উপযুক্ত তবে উচ্চ খরচ এবং রক্ষণাবেক্ষণের প্রচেষ্টা জড়িত।
  • cPanel মেল সার্ভার ছোট থেকে মাঝারি আকারের ব্যবসাগুলির জন্য একটি ভারসাম্যপূর্ণ পদ্ধতির অফার করে যেগুলির জন্য একটি ব্যবহারকারী-বান্ধব ইন্টারফেস প্রয়োজন এবং কিছু স্তরের রক্ষণাবেক্ষণের সাথে আরামদায়ক, বান্ডেল করা হোস্টিং পরিষেবাগুলি থেকে উপকৃত হয়৷


আমার প্রধান উদ্বেগ সবসময় নিম্নলিখিত ছিল;

নিরাপত্তা

  • AWS ওয়ার্কমেল : ট্রানজিট এবং বিশ্রামে এনক্রিপশন, AWS কী ম্যানেজমেন্ট সার্ভিস (KMS) এর সাথে একীকরণ এবং বিভিন্ন নিয়ন্ত্রক মানগুলির সাথে সম্মতি সহ অন্তর্নির্মিত সুরক্ষা বৈশিষ্ট্যগুলি প্রদান করে৷
  • স্ব-হোস্টেড মেল সার্ভার : নিরাপত্তা সম্পূর্ণরূপে প্রশাসকের দক্ষতার উপর নির্ভর করে। হুমকি থেকে রক্ষা করার জন্য এনক্রিপশন, স্প্যাম ফিল্টারিং এবং নিয়মিত নিরাপত্তা আপডেটের জন্য কনফিগারেশন প্রয়োজন।
  • cPanel মেল সার্ভার : নিরাপত্তা বৈশিষ্ট্য অফার করে, কিন্তু নিরাপত্তা ব্যবস্থা বাস্তবায়ন এবং বজায় রাখার দায়িত্ব ব্যবহারকারীর উপর পড়ে। cPanel SSL/TLS কনফিগারেশন, স্প্যাম ফিল্টারিং এবং অ্যান্টিভাইরাসের জন্য সরঞ্জাম সরবরাহ করে, তবে সঠিক সেটআপ এবং নিয়মিত আপডেট অপরিহার্য।


তারপরে AWS উদ্ধারে এসেছিল, এবং 2015 থেকে AWS ব্যবহার করার পর থেকে, একটি নতুন অ্যাকাউন্টে যাওয়ার জন্য আমার AWS অ্যাকাউন্টের ব্যাক-আপ নেওয়ার ঘটনা ব্যতীত জিনিসগুলি হাওয়া হয়ে গেছে। ঠিক আছে, আমি একটি নির্ভরযোগ্য সমাধান খোঁজার জন্য ইন্টারনেটে অনুসন্ধান করছি কারণ, এখন পর্যন্ত আমরা যতটা কথা বলি, AWS WorkMail আপনার স্থানীয় কম্পিউটারে বা 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 WorkMail সংস্থার ID, ইমেল ম্যাপিংয়ের ব্যবহারকারী ID, 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


নির্দ্বিধায় আমার LinkedIn- এ যোগাযোগ করুন, এছাড়াও আপনি সবসময় আমাকে একটি কফি কিনতে পারেন