2.3
MFA, Password Policy আর Root-কে সুরক্ষিত রাখা
MFA device, password-এর নিয়ম, policy-তে MFA condition, আর Root user দিয়ে কী করবে (আর কী করবে না)।
16 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি পারবে
- Root user আসলে কী, কেন কোনো policy তাকে আটকাতে পারে না, আর কোন কাজগুলো শুধু root-ই পারে, তা বলতে।
- Root-কে ঠিকমতো তালাবন্ধ রাখতে: শক্ত password, একাধিক MFA device, কোনো access key নয়, প্রতিটা লগইনে alert, আর অনেক account থাকলে centralized root access।
- MFA কীভাবে কাজ করে বুঝিয়ে বলতে, আর passkey ও security key, virtual authenticator app, hardware TOTP token-এর মধ্যে কোনটা নেবে ঠিক করতে।
- MFA device হারিয়ে গেলে কী করতে হয় জানতে, IAM user-এর বেলায় আর root-এর বেলায়।
- Account-এর password policy সেট করতে, আর এটা ঠিক কী করে আর কী করে না, পরিষ্কার জানতে।
- বিপজ্জনক কাজের জন্য MFA বাধ্যতামূলক করে policy লিখতে,
Boolfalse-এর ফাঁদ এড়াতে, আর CLI থেকে MFA ব্যবহার করতে।
#দুটো প্রশ্ন: তুমি কে, আর সেটা প্রমাণ করতে পারবে?
লেসন ২.১-এ আমরা account-এর identity-গুলো চিনেছি: root user, IAM user আর group। লেসন ২.২-এ দেখেছি একটা request allow হবে কি না, AWS কীভাবে ঠিক করে। দুটো লেসনই একটা জিনিস ধরে নিয়েছে: request-টা কে পাঠাচ্ছে, AWS তা জানে। এই লেসনের কাজ হলো সেই ধরে নেওয়াটা সত্যি করা।
লগইনের মুহূর্তেই AWS ঠিক করে তুমি কে। হামলাকারী যদি তোমার নামে লগইন করতে পারে, তাহলে তোমার সব permission তার হয়ে গেল, দুনিয়ার সেরা policy-ও তখন কিছু করতে পারবে না। তাই এখানে তিনটা বিষয়, তিনটাই লগইন ঘিরে:
- Root user, account-এর সবচেয়ে ক্ষমতাধর identity, আর তাকে কীভাবে নাগালের বাইরে রাখতে হয়।
- MFA, যেটা থাকলে চুরি করা password কোনো কাজে আসে না।
- Password policy, যেটা IAM user-দের password ন্যূনতম কতটা শক্ত হবে ঠিক করে দেয়।
তারপর আরও এক ধাপ: policy-র ভেতরেই MFA চাওয়া, যাতে লগইনের পরেও সবচেয়ে বিপজ্জনক কাজগুলোর আগে নতুন করে MFA যাচাই লাগে।
#Root user
AWS account খোলার সময় তুমি একটা email address আর একটা password দাও। এই জোড়াটাই হয়ে যায় root user: account-এর প্রথম identity, যার প্রতিটা service আর resource-এ পুরো ক্ষমতা আছে, billing আর account-টার ওপরও।
দুটো জিনিস root-কে বাকি সব identity থেকে আলাদা করে:
- কোনো IAM policy তাকে আটকাতে পারে না। Root-এর গায়ে policy লাগানোই যায় না, আর IAM policy-র deny তার ওপর খাটে না। (AWS Organizations-এ service control policy দিয়ে member account-এর root-কে আটকানো যায়, কিন্তু management account-এর root-কে কখনো না। সেটা অধ্যায় ২০-এর বিষয়।)
- সে তোমাকেই বের করে দিতে পারে। Root account-এর email আর password বদলাতে পারে, account বন্ধও করে দিতে পারে। Root যার হাতে, account-ও তার হাতে।
#যে কাজগুলো শুধু root পারে
AWS ইচ্ছা করেই এই তালিকা ছোট রেখেছে। একটা একা account-এ (কোনো organization-এ নেই এমন), শুধু root user পারে:
| ক্ষেত্র | কাজ |
|---|---|
| Account | Root-এর email address, root password বা root-এর access key বদলানো |
| Account | Account বন্ধ করা, আর বন্ধ করার পরের নির্দিষ্ট সময়ের মধ্যে আবার খোলা |
| Account | একমাত্র IAM admin নিজের permission মুছে ফেললে সেটা ফিরিয়ে আনা |
| Billing | Billing and Cost Management console-এ IAM access চালু করা, আর billing-এর আরও কয়েকটা কাজ |
| Billing | কিছু নির্দিষ্ট tax invoice দেখা |
| EC2 | Reserved Instance Marketplace-এ seller হিসেবে register করা |
| S3 | কোনো bucket-এ MFA Delete চালু করা |
| S3 | যে bucket policy সব principal-কে deny করে, সেটা বদলানো বা মোছা |
| SQS | যে queue policy সব principal-কে deny করে, সেটা বদলানো বা মোছা |
যা এই তালিকায় নেই: IAM user বানানো, AdministratorAccess লাগানো, কিছু launch করা, CloudTrail পড়া, account-এর নাম বা যোগাযোগের তথ্য বদলানো, কোন Region চালু থাকবে ঠিক করা। এগুলো সব একজন admin identity-ই করে।
নিজেকে যাচাই করোপ্রশ্ন
একটা একা account-এর একমাত্র IAM admin ভুল করে নিজের policy এমনভাবে বদলেছে যে এখন আর IAM চালাতে পারছে না। কে এটা ঠিক করতে পারবে?
#Root user-এর নিয়মগুলো
প্রতিটা নিয়মের পেছনে একটাই চিন্তা: root লাগে খুব কম, তাই root ব্যবহার করা খুব কঠিন করে রাখো।
- শক্ত আর অন্য কোথাও ব্যবহার না করা password, password manager থেকে বানানো। AWS অন্তত ৮ অক্ষর আর চার রকমের মধ্যে তিন রকম অক্ষর চায়, কিন্তু লম্বা একটা passphrase অনেক ভালো।
- MFA, সবসময়। AWS এখন সব রকম account-এর (একা, management আর member) root user-এ MFA বাধ্যতামূলক করেছে। সেট করা না থাকলে লগইনের সময়ই register করতে হয়, বড়জোর ১৪ দিনের ছাড় পাওয়া যায়।
- একটার বেশি MFA device। Root-এর ৮টা পর্যন্ত থাকতে পারে। একটা থাকবে দায়িত্বে থাকা মানুষের হাতের কাছে, আরেকটা সিন্দুকে।
- কোনো access key নয়। Access key হলো program-এর জন্য, আর কোনো program-এর root লাগে না। Root-এর key থাকলে মুছে ফেলো। (কখনো root দিয়ে CLI চালাতেই হলে
aws logincommand স্থায়ী key-এর বদলে অল্প সময়ের credential দেয়।) - কোম্পানির একটা group email, যেমন
aws-root@example.com, কোনো একজনের নিজের inbox না। মানুষ ছুটিতে যায়, চাকরি ছাড়ে। - গোপন জিনিস ভাগ করে রাখো। কিছু কোম্পানি password রাখে এক team-এর কাছে আর MFA device আরেক team-এর কাছে, যাতে root দিয়ে ঢুকতে দুজনকে একমত হতে হয়।
- প্রতিটা root লগইনে alert। CloudTrail root-এর সব কাজ লিখে রাখে; একটা EventBridge rule root লগইন করলেই security team-কে email পাঠাতে পারে। AWS Config, Security Hub আর Trusted Advisor, তিনটাতেই “root-এর MFA নেই” আর “root-এর access key আছে” যাচাইয়ের ব্যবস্থা আছে।
Root user: তালা মেরে রাখা, শুধু root-এর কাজেই বের করা
একটা AWS account, তার একটাই root user, আর রোজকার কাজের জন্য একজন admin। দেখো সাধারণ দিনে কী হয়, root-এর নিজের কাজে কী হয়, আর হামলাকারী root-এর password পেয়ে গেলে কী হয়।
পরিস্থিতি
Account খোলার সময় যে email আর password দিয়েছিলে, সেটাই root user। সে সব পারে, আর কোনো IAM policy তাকে আটকাতে পারে না। তাই সাধারণ দিনে কেউ root দিয়ে লগইনই করে না।
#অনেক account: centralized root access
যে কোম্পানির ৫০টা AWS account, তার root user-ও ৫০টা, প্রত্যেকটার password, MFA device আর recovery-র পথ আলাদা করে পাহারা দিতে হয়। ২০২৪-এর নভেম্বর থেকে AWS Organizations-এ root access এক জায়গা থেকে চালানো যায়:
- Management account (বা IAM-এর delegated admin) member account-গুলোর root credential মুছে দেয়: password, access key, signing certificate আর MFA। Organization-এ নতুন যে account বানানো হয়, সেগুলোতে শুরু থেকেই root credential থাকে না।
- কোনো member account-এ root-এর কোনো কাজ দরকার হলে admin
sts:AssumeRootদিয়ে একটা privileged root session চালু করে। এটা টেকে সর্বোচ্চ ১৫ মিনিট, আর শুধু একটা কাজের জন্য, যেমন সবাইকে আটকে দেওয়া bucket policy মোছা, বা password recovery চালু করা। - Credential না থাকলে কেউ ওই member-এর root দিয়ে লগইন করতে পারে না, আর “forgot password”-ও কাজ করে না, কেউ root-এর email inbox দখল করে নিলেও না।
AWS Organizations-এ root access এক জায়গা থেকে চালানো
একটা কোম্পানির কয়েক ডজন member account। প্রত্যেকটার root password আর MFA device আলাদা করে পাহারা না দিয়ে, member account-গুলোতে root credential রাখাই হয় না।
পরিস্থিতি
প্রতিটা AWS account-এরই একটা root user আছে, member account-গুলোরও। ৫০টা account মানে ৫০টা password, ৫০টা MFA device আর ৫০টা recovery-র পথ পাহারা দেওয়া।
#Multi-factor authentication
Password হলো এমন কিছু যা তুমি জানো। যা জানা যায়, তা কপিও করা যায়: আন্দাজে, phishing-এ, hack হওয়া কোনো site-এ একই password দিয়ে থাকলে, বা কাঁধের ওপর দিয়ে উঁকি মেরে। MFA তার সাথে আরেকটা, ভিন্ন রকমের প্রমাণ যোগ করে:
- যা তুমি জানো: password বা PIN;
- যা তোমার কাছে আছে: authenticator app সহ ফোন, security key;
- যা তুমি নিজে: আঙুলের ছাপ বা মুখ, সাধারণত key রাখা device-টা খুলতে ব্যবহার হয়।
দুটো password মানে এখনো একটাই factor। আসল কথা হলো factor-গুলো ভিন্ন রকমের, তাই একটা চুরি হলেই কাজ হয় না। এক লাইনে মূল লাভ: password চুরি হয়ে গেলেও তোমার account নিরাপদ থাকে।
Password আর MFA code দিয়ে লগইন
রিনা একজন IAM user, তার ফোনে একটা virtual MFA app আছে। App আর AWS-এর কাছে একটা গোপন secret আছে, যেটা একবারই QR code দিয়ে সেট করা হয়েছিল।
পরিস্থিতি
প্রথম factor: যা সে জানে। IAM user লগইন করে account ID বা alias, user name আর password দিয়ে।
#৬ অঙ্কের code কীভাবে কাজ করে
Virtual authenticator app আর hardware token ব্যবহার করে TOTP, মানে সময়-ভিত্তিক one-time password:
সেটআপ: একবার একটা secret ভাগ করা
Virtual MFA device লাগানোর সময় AWS একটা random secret বানিয়ে সেটা QR code হিসেবে দেখায়। App সেটা scan করে নেয়। এখন app আর IAM দুজনের কাছেই একই secret, আর এটা আর কখনো কোথাও যায় না। সেটআপ শেষ করতে তুমি পরপর দুটো code টাইপ করো, তাতে প্রমাণ হয় app ঠিকমতো কাজ করছে আর তার ঘড়িও ঠিক আছে।
প্রতি ৩০ সেকেন্ডে: একই secret + একই সময় = একই code
App secret-টার সাথে এখনকার সময় (৩০ সেকেন্ডের ধাপে ভাগ করা) একটা hash function-এ (HMAC) মিশিয়ে শেষের ছয়টা অঙ্ক দেখায়। IAM-ও একই হিসাব করে। দুজনের মধ্যে কিছুই আদানপ্রদান হয় না, তাই ফোন offline থাকলেও চলে।
লগইন: মিলিয়ে দেখা
তুমি code টাইপ করো, IAM নিজেরটা হিসাব করে মিলিয়ে দেখে। ঘড়ি সামান্য এদিক-ওদিক হলে যেন সমস্যা না হয়, তাই এখনকার সময়ের আশেপাশের ছোট একটা window মেনে নেয়। কিন্তু ফোনের ঘড়ি কয়েক মিনিট ভুল হলে code বাতিল হয়; সমাধান হলো automatic network time চালু করা, বা IAM-এ পরপর দুটো code দিয়ে device-টা resync করা।
#MFA device-এর রকমফের
| ধরন | জিনিসটা কী | সুবিধা | সীমাবদ্ধতা |
|---|---|---|---|
| Passkey আর security key (FIDO2) | YubiKey-এর মতো hardware key (USB বা NFC), অথবা password manager-এ sync হওয়া passkey, যেটা আঙুলের ছাপ, মুখ বা PIN দিয়ে খোলে | Phishing-resistant; battery লাগে না; একটা security key দিয়ে অনেকগুলো root আর IAM user সুরক্ষিত রাখা যায় | চালু করা যায় শুধু console থেকে, CLI বা API থেকে না; STS-কে দিয়ে MFA-চিহ্নিত credential নেওয়া যায় না |
| Virtual authenticator app (TOTP) | ফোনের একটা app, যেমন Google Authenticator, Microsoft Authenticator বা কোনো password manager | বিনা পয়সায়, তাড়াতাড়ি সেট হয়, এক ফোনেই অনেক user-এর token রাখা যায় | Code phishing-এ চুরি হতে পারে; ফোনের সাথে বাঁধা |
| Hardware TOTP token | একটা key fob বা display card, যেটা ৬ অঙ্কের code দেখায় | ফোন থেকে আলাদা, network ছাড়াই চলে | AWS-এর তালিকার supplier থেকেই কিনতে হয়; battery ফুরিয়ে যায়; প্রতি user-এর জন্য আলাদা token; code phishing-এ চুরি হতে পারে |
SMS আর কোনো উপায় না। AWS-এ SMS text message দিয়ে নতুন করে MFA চালু করার সুবিধা বন্ধ হয়ে গেছে; text message মাঝপথে ধরা যায়, আর ফোন নম্বরও দখল করা যায়।
#Code-এর চেয়ে passkey কেন ভালো: phishing
৬ অঙ্কের code প্রমাণ করে যে ফোনটা তোমার কাছে আছে, কিন্তু code জানে না তুমি সেটা কোন website-এ টাইপ করছ। একটা নকল লগইন page তোমার password আর code দুটোই চেয়ে নিয়ে কয়েক সেকেন্ডের মধ্যে আসল AWS-এ বসিয়ে দিতে পারে। Passkey বা security key যে challenge-এ sign করে, সেটা আসল website-এর ঠিকানার সাথে বাঁধা। নকল site-এ browser নকল ঠিকানাটাই জানিয়ে দেয়, key-এর তখন sign করার কিছু থাকে না, হামলা ব্যর্থ হয়। Phishing-resistant মানে এটাই, আর এজন্যই AWS সবার আগে passkey আর security key ব্যবহার করতে বলে।
নকল লগইন page: টাইপ করা code চুরি হতে পারে, passkey হয় না
রিনা একটা email-এর link-এ click করে AWS sign-in page-এর হুবহু কপিতে চলে যায়, ঠিকানাটাও দেখতে প্রায় একই রকম। হামলাকারীর server রিনা যা টাইপ করে সব আসল AWS-এর কাছে পাঠিয়ে দেয়।
পরিস্থিতি
Page দেখতে আসলের মতোই, তাই রিনা password দিয়ে দেয়।
নিজেকে যাচাই করোপ্রশ্ন
একটা phishing site তোমার লগইন আসল AWS-এ পাচার করে দিচ্ছে। Security key এটা আটকায়, কিন্তু virtual MFA code আটকায় না। কেন?
#একাধিক device, আর একটা হারিয়ে গেলে
- প্রতিটা root user আর IAM user ৮টা পর্যন্ত MFA device register করতে পারে, যেকোনো রকম মিলিয়ে। লগইনের জন্য এর যেকোনো একটাই যথেষ্ট।
- IAM user-কে নতুন device যোগ করতে বা সরাতে আগে একটা পুরনো device দিয়ে লগইন করতে হয়।
- IAM user-এর device হারালে: register করা আরেকটা device দিয়ে লগইন করে হারানোটা সরিয়ে দাও। একটাই device থাকলে admin সেটা বন্ধ করে নতুন একটা লাগিয়ে দেয়।
- Root-এর device হারালে: root-এর আরেকটা MFA device ব্যবহার করো। সবগুলো হারালে recovery-র জন্য লাগবে account-এর email inbox আর তার contact phone number, দুটোই। দুটোই হালনাগাদ রাখো, আর দুটো যেন একজন মানুষের হাতে না থাকে।
- যা-ই হোক, হারানো বা চুরি যাওয়া device সাথে সাথে identity থেকে সরিয়ে দাও।
#Account-এর password policy
একটা AWS account-এ password policy একটাই, আর সেটা খাটে IAM user-দের console password-এর ওপর। নিজে কোনো policy না দিলে default policy চলে: ৮ থেকে ১২৮ অক্ষর, বড় হাতের অক্ষর, ছোট হাতের অক্ষর, সংখ্যা আর চিহ্ন, এই চার রকমের অন্তত তিন রকম, account-এর নাম বা email-এর সাথে হুবহু এক হবে না, আর মেয়াদ কখনো শেষ হবে না।
নিজের policy-তে যা ঠিক করা যায়:
| Option | সীমা | কখন থেকে খাটে |
|---|---|---|
| কমপক্ষে কত অক্ষর | ৬ থেকে ১২৮ | পরের বার password সেট করার সময় |
| বড় হাতের, ছোট হাতের, সংখ্যা, চিহ্ন বাধ্যতামূলক | যেকোনো মিশ্রণ | পরের বার password সেট করার সময় |
| Password-এর মেয়াদ | ১ থেকে ১০৯৫ দিন | সাথে সাথে: পুরনো password পরের লগইনেই বদলাতে হয় |
| মেয়াদ শেষ হলে admin-কে reset করতে হবে | চালু বা বন্ধ | Password-এর মেয়াদ শেষ হলে |
| User নিজের password নিজে বদলাতে পারবে | চালু বা বন্ধ | সাথে সাথে |
| পুরনো password আবার ব্যবহার করা যাবে না | আগের ১ থেকে ২৪টা | পরের বার password সেট করার সময় |
যা এটা করে না, আর পরীক্ষায় এগুলোই বেশি আসে:
- এটা root user-এর ওপর খাটে না, access key-এর ওপরও না। কোনো IAM user-এর password-এর মেয়াদ শেষ হলেও তার access key চলতে থাকে।
- Lockout-এর কোনো option নেই: কয়েকবার ভুল password দিলে user-কে আটকে দেওয়া যায় না। আন্দাজ করে ঢোকা ঠেকানোর উপায় হলো লম্বা password আর MFA।
- কমপক্ষে অক্ষরের সংখ্যা বাড়ালেও আজই কাউকে password বদলাতে বাধ্য করা হয় না; নিয়মটা খাটে পরের বার বদলানোর সময়।
Account-এর password policy কীভাবে কাজ করে
Policy: কমপক্ষে ১৪ অক্ষর, তিন রকমের অক্ষর, ৯০ দিন পর মেয়াদ শেষ, আগের ৫টা password আবার ব্যবহার করা যাবে না, user নিজের password নিজে বদলাতে পারবে।
পরিস্থিতি
করিম মনে রাখার সুবিধার জন্য সহজ একটা password দিতে চায়।
#Policy-র ভেতরে MFA চাওয়া
MFA দিয়ে লগইন মানে দরজাটা সুরক্ষিত। কিন্তু কিছু কাজ এত বিপজ্জনক যে ঠিক ওই কাজের আগেই নতুন করে MFA যাচাই চাও: production-এর instance terminate করা, bucket মুছে ফেলা, IAM বদলানো। এর জন্য policy-তে MFA নিয়ে condition key আছে (policy-র Condition অংশটা লেসন ২.১-এ বোঝানো হয়েছে)।
#aws:MultiFactorAuthPresent
পরীক্ষার পরিচিত প্রশ্ন: “কীভাবে নিশ্চিত করবে যে MFA ছাড়া কেউ S3 bucket মুছতে পারবে না?” উত্তর: এমন একটা policy, যার Condition-এ aws:MultiFactorAuthPresent-এর মান "true"।
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DeleteOnlyWithMfa",
"Effect": "Allow",
"Action": ["s3:DeleteBucket", "ec2:TerminateInstances"],
"Resource": "*",
"Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } }
}
]
}
ঠিকভাবে ব্যবহার করতে একটা খুঁটিনাটি জানতে হবে: key-টা request-এ আদৌ কখন থাকে?
- Console লগইন: console আড়ালে অস্থায়ী credential দিয়ে কাজ করে। Key থাকে: MFA দিয়ে লগইন করলে
true, না করলেfalse। - STS থেকে নেওয়া অস্থায়ী credential (MFA serial আর code দিয়ে
GetSessionTokenবাAssumeRolecall করা): key থাকে, মানtrue। - দীর্ঘমেয়াদি access key (সাধারণ access key দিয়ে CLI বা SDK): key-টা থাকেই না। false না, একদম অনুপস্থিত।
এই একটা পার্থক্যই ঠিক করে দেয় condition লেখার প্রতিটা ধরন কেমন আচরণ করবে:
| Statement | MFA ছাড়া console | MFA সহ console বা STS | দীর্ঘমেয়াদি access key |
|---|---|---|---|
Allow + Bool true | allow হয় না | allow | allow হয় না (key নেই) |
Allow + BoolIfExists true | allow হয় না | allow | allow (key না থাকাকেও মিল ধরা হয়) |
Deny + Bool false | deny | deny হয় না | deny হয় না: এটাই ফাঁদ |
Deny + BoolIfExists false | deny | deny হয় না | deny: AWS-এর পরামর্শ দেওয়া পাহারা |
Bool false দিয়ে লেখা Deny দেখতে ঠিকই লাগে, কিন্তু সব দীর্ঘমেয়াদি access key সোজা ঢুকে যায়, কারণ যে key নেই তার condition মেলে না। নিয়মটা যদি হয় “MFA ছাড়া কিছুই না”, তাহলে AWS বলে Deny আর BoolIfExists false লেখো। Console-এর visual editor-এ “MFA required” বেছে নিলে লেখা হয় BoolIfExists true দিয়ে Allow, যেটা console-এ MFA চায় কিন্তু access key-এর বেলায় চায় না।
বিপজ্জনক কাজের জন্য MFA বাধ্যতামূলক করা
EC2-Admins group-এর policy: instance terminate করা allow, কিন্তু শুধু তখনই যখন aws:MultiFactorAuthPresent true। দেখো একেক রকম credential-এ এই key কেমন আচরণ করে।
পরিস্থিতি
Console আড়ালে অস্থায়ী credential ব্যবহার করে, আর সেখানে লেখা থাকে যে সে MFA দিয়ে লগইন করেছে।
#MFA policy থাকা অবস্থায় CLI চালানো
শুধু access key আছে এমন user condition পূরণ করতে পারে না। তাই আগে key আর MFA code দিয়ে অস্থায়ী credential নিতে হয়:
aws sts get-session-token \
--serial-number arn:aws:iam::111122223333:mfa/sofia-phone \
--token-code 482913
STS ফেরত দেয় একটা access key, secret key আর session token, যেগুলোতে লেখা থাকে MFA যাচাই হয়েছে। Default মেয়াদ ১২ ঘণ্টা (IAM user-এর জন্য ১৫ মিনিট থেকে ৩৬ ঘণ্টা)। এগুলো CLI profile বা environment variable-এ বসালেই policy সন্তুষ্ট। খেয়াল রেখো: এটা চলে virtual আর hardware TOTP device দিয়ে; passkey বা security key দিয়ে এভাবে STS-এ MFA দেওয়া যায় না, ওগুলোর জন্য আছে নতুন aws login command।
#aws:MultiFactorAuthAge
শুধু “MFA হয়েছিল” যথেষ্ট না-ও হতে পারে; হয়তো চাও “MFA হয়েছে একটু আগেই”। aws:MultiFactorAuthAge-এ থাকে MFA যাচাইয়ের পর কত সেকেন্ড পার হয়েছে:
"Condition": { "NumericLessThan": { "aws:MultiFactorAuthAge": "3600" } }
এটা থাকলে পাঁচ ঘণ্টা আগে MFA দেওয়া session দিয়ে instance terminate করা যায় না; user নতুন code দিয়ে নতুন session নেয়। Present key-এর মতোই, দীর্ঘমেয়াদি key-তে এটাও থাকে না।
#Cross-account role-এ MFA
এক account-এর user যখন আরেক account-এর role assume করে (পুরো গল্প লেসন ২.৪-এ), তখন যে account-এর role, সে role-এর trust policy-তে MFA চাইতে পারে:
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::444455556666:root" },
"Action": "sts:AssumeRole",
"Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } }
}
User তার MFA serial আর code AssumeRole call-এর সাথেই পাঠায়। MFA যাচাই হয় একবারই, role assume করার সময়; role-এর permission policy-তে আলাদা MFA condition লাগে না। (এখানে arn:aws:iam::444455556666:root মানে “অন্য account-টা”, তার root user লগইন করছে এমন না।)
#একটু আগাম দেখা: S3 MFA Delete
S3-এর নিজস্ব, আলাদা একটা MFA ব্যবস্থা আছে। Versioning চালু আছে এমন bucket-এ MFA Delete চালু থাকলে, কোনো object version চিরতরে মুছতে বা versioning-এর অবস্থা বদলাতে request-এর সাথে MFA code দিতে হয়। এটা চালু করতে পারে শুধু bucket-এর মালিক account-এর root user, আর শুধু CLI বা API দিয়ে। Versioning-এর সাথে এটা অধ্যায় ১০-এ পড়বে।
#System design-এ কীভাবে কাজে লাগে
- মানুষ লগইন করে MFA সহ IAM Identity Center দিয়ে, দীর্ঘমেয়াদি key সহ IAM user দিয়ে না (অধ্যায় ২০)। যেখানে এখনো IAM user আছে, সবার MFA চালু, আর password policy সেট করা।
- Root হলো জরুরি অবস্থার identity। শক্ত password, আলাদা দুজনের হাতে দুটো MFA device, কোনো access key নেই, group email, প্রতিটা লগইনে alert, আর কখন root ব্যবহার করা যাবে তার লিখিত নিয়ম।
- অনেক account থাকলে root access এক জায়গা থেকে চালাও আর member-দের root credential মুছে দাও।
- ধ্বংসাত্মক কাজে MFA লাগবে: মানুষের role-গুলোতে
TerminateInstances,DeleteBucketআর IAM বদলের ওপরDeny+BoolIfExistsপাহারা। কিন্তু application যে role ব্যবহার করে সেখানে এটা দিও না; ওদের MFA নেই, সব ভেঙে পড়বে। - আগে phishing-resistant: admin আর root-এর জন্য passkey আর security key; virtual app সাময়িক ব্যবস্থা হিসেবে।
- নিয়মিত যাচাই করো: root-এর MFA, root-এর access key আর MFA ছাড়া IAM user খুঁজতে AWS Config rule আর Security Hub control, আর পুরো account একনজরে দেখতে credentials report (লেসন ২.৪)।
#নিজে করে দেখো
তোমার account-এর password policy পড়ো (error এলে বুঝবে default policy চলছে):
aws iam get-account-password-policy
আরও শক্ত একটা policy সেট করো:
aws iam update-account-password-policy \
--minimum-password-length 14 \
--require-uppercase-characters --require-lowercase-characters \
--require-numbers --require-symbols \
--max-password-age 90 --password-reuse-prevention 5 \
--allow-users-to-change-password
দেখো root-এর MFA আছে (AccountMFAEnabled: 1) আর কোনো access key নেই (AccountAccessKeysPresent: 0):
aws iam get-account-summary \
--query 'SummaryMap.{RootMfa: AccountMFAEnabled, RootKeys: AccountAccessKeysPresent}'
নিজের MFA device-এর তালিকা দেখো, তারপর CLI-এর জন্য MFA-চিহ্নিত অস্থায়ী credential নাও:
aws iam list-mfa-devices
aws sts get-session-token --serial-number <your device ARN> --token-code <6 digits>
Console-এ যাও IAM → Users → তোমার user → Security credentials → Assign MFA device, আর একটা দ্বিতীয় device যোগ করো, যাতে ফোন হারালেও কখনো আটকে না যাও।
#সারসংক্ষেপ
মূল কথাগুলো
- Root user (account খোলার email + password) সব পারে, আর IAM policy তাকে আটকায় না। ব্যবহার করবে শুধু root-এর কাজে: root-এর email বা password বদলানো, account বন্ধ করা, আটকে যাওয়া admin-কে ফেরানো, billing-এর কিছু কাজ, RI Marketplace-এ seller হওয়া, S3 MFA Delete, আর সবাইকে deny করা bucket বা queue policy খোলা।
- Root-এর নিয়ম: শক্ত password, MFA (এখন সব রকম account-এ বাধ্যতামূলক), একাধিক MFA device, কোনো access key নয়, group email, লগইনে alert। অনেক account থাকলে centralized root access চালু করে member-দের root credential মুছে দাও;
sts:AssumeRootদেয় ১৫ মিনিটের, একটা কাজে সীমাবদ্ধ session। - MFA = যা তুমি জানো + যা তোমার কাছে আছে (বা যা তুমি নিজে)। শুধু চুরি করা password দিয়ে আর account খোলে না।
- Device-এর ধরন: passkey আর security key (FIDO2, phishing-resistant, এক key-এ অনেক user), virtual authenticator app (TOTP), hardware TOTP token। SMS আর চলে না। প্রতি user-এ ৮টা পর্যন্ত device; যেকোনো একটা দিয়েই লগইন।
- Device হারালে: IAM user → আরেকটা device বা admin; root → আরেকটা device, নইলে email আর ফোন দিয়ে recovery।
- Password policy: দৈর্ঘ্য ৬–১২৮, অক্ষরের রকম, মেয়াদ ১–১০৯৫ দিন (সাথে সাথে খাটে), পুনর্ব্যবহার ১–২৪, admin reset, নিজে বদলানোর অনুমতি। Root-এর জন্য না, access key-এর জন্য না, lockout নেই।
aws:MultiFactorAuthPresent: অস্থায়ী credential-এ থাকে, দীর্ঘমেয়াদি key-তে থাকেই না। Allow +Booltrue মানে MFA লাগবে; Deny +BoolIfExistsfalse MFA ছাড়া সব আটকায়; Deny +Boolfalse access key ঢুকতে দেয়।- MFA সহ CLI: device serial আর code দিয়ে
aws sts get-session-token।aws:MultiFactorAuthAgeদিয়ে সাম্প্রতিক MFA চাওয়া যায়। Cross-account role-এ MFA চাইতে হয় trust policy-তে।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
একটা AWS account-এর root user কী দিয়ে লগইন করে?
নিজেকে যাচাই করোপ্রশ্ন
এক সহকর্মী বলছে, সব admin-এর কাজ root দিয়ে করাই সহজ, কারণ root-এ কখনো permission error আসে না। সবচেয়ে ভালো উত্তর কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা একা AWS account-এ নিচের কোন কাজের জন্য root user দিয়ে লগইন করতেই হবে?
নিজেকে যাচাই করোপ্রশ্ন
নিচের কোন দুটো কাজ শুধু root user করতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Audit-এ দেখা গেল root user-এর একটা access key আছে, দুই বছর আগে একটা backup script-এর জন্য বানানো। কী করবে?
নিজেকে যাচাই করোপ্রশ্ন
একজন security engineer একটা একা account-এ এমন IAM policy চায়, যেটা root user-কে S3 bucket মুছতে দেবে না। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
কোন জোড়াটা সত্যিকারের multi-factor authentication?
নিজেকে যাচাই করোপ্রশ্ন
একজন user-এর MFA চালু করার মূল লাভ কী?
নিজেকে যাচাই করোপ্রশ্ন
এখন IAM user-দের জন্য কোন দুই রকম MFA লাগানো যায়?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Phishing ঠেকাতে পারে বলে AWS সবার আগে কোন রকম MFA ব্যবহার করতে বলে?
নিজেকে যাচাই করোপ্রশ্ন
একটা team-এর পাঁচটা একা account। তারা battery ছাড়া, phishing-resistant একটাই physical device দিয়ে পাঁচটা root user সুরক্ষিত রাখতে চায়। কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
একজন IAM user কয়টা MFA device register করতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
একজন IAM user ফোনের app আর একটা security key দুটোই register করেছিল। ফোনটা চুরি হয়ে গেছে। কী হওয়া উচিত?
নিজেকে যাচাই করোপ্রশ্ন
Root user-এর একমাত্র MFA device নষ্ট, আর অন্য কোনোটা register করা নেই। আবার ঢুকতে কী লাগবে?
নিজেকে যাচাই করোপ্রশ্ন
একজন user ঠিক app থেকে তাড়াতাড়ি আর নির্ভুলভাবে ৬ অঙ্কের code টাইপ করছে, তবুও প্রতিবার বাতিল হচ্ছে। সবচেয়ে সম্ভাব্য কারণ কী?
নিজেকে যাচাই করোপ্রশ্ন
হামলাকারীর কাছে user-এর password আছে, আর সে আন্দাজে ৬ অঙ্কের MFA code দিচ্ছে। একবারের আন্দাজ মিলে যাওয়ার সম্ভাবনা মোটামুটি কত?
নিজেকে যাচাই করোপ্রশ্ন
IAM-এর account password policy নিচের কোন দুটো নিয়ম চাপাতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Account-এর password policy কিসের ওপর খাটে?
নিজেকে যাচাই করোপ্রশ্ন
তুমি কমপক্ষে password-এর দৈর্ঘ্য ৮ থেকে বাড়িয়ে ১৪ করলে। যাদের এখনকার password ১০ অক্ষরের, তাদের কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
তুমি password-এর মেয়াদ ৯০ দিন করলে। একজন user শেষ password বদলেছিল ১২০ দিন আগে। পরের বার console-এ লগইনের সময় কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
তুমি “password expiration requires administrator reset” চালু করলে। কোম্পানিতে IAM admin একজনই, আর তার password-এর মেয়াদ শেষ হয়ে গেল। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
তোমাকে নিশ্চিত করতে হবে যে MFA দিয়ে লগইন না করলে কেউ S3 bucket মুছতে পারবে না। কী যোগ করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা policy instance terminate করা allow করে Condition Bool aws:MultiFactorAuthPresent true দিয়ে। একজন user তার দীর্ঘমেয়াদি access key দিয়ে CLI চালায়। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
MFA ছাড়া কাজ আটকাতে একজন admin Condition Bool aws:MultiFactorAuthPresent false দিয়ে একটা Deny statement যোগ করেছে। User-দের কাছে একটা বড় Allow-ও আছে। দীর্ঘমেয়াদি access key থাকা একজন user কী করতে পারবে?
নিজেকে যাচাই করোপ্রশ্ন
তুমি MFA দিয়ে যাচাই না হওয়া সব request deny করতে চাও, দীর্ঘমেয়াদি access key দিয়ে sign করা CLI call-ও। AWS কোন statement-এর পরামর্শ দেয়?
নিজেকে যাচাই করোপ্রশ্ন
সোফিয়ার group policy-তে instance terminate করতে MFA লাগে। সে CLI-তে কাজ করে। terminate command-এর আগে তার কী চালাতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
Admin-রা production instance terminate করতে পারবে শুধু MFA দেওয়ার এক ঘণ্টার মধ্যে। কোন condition এটা করে?
নিজেকে যাচাই করোপ্রশ্ন
Account B-এর user-রা account A-এর একটা role assume করলে MFA দিতেই হবে। কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা organization centralized root access চালু করেছে। Management account-এর security admin এখন member account-গুলোর জন্য কোন দুটো কাজ করতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Root user-এর জন্য নিচের কোনটা পরামর্শ দেওয়া হয় না?
নিজেকে যাচাই করোপ্রশ্ন
Versioning চালু থাকা একটা bucket-এ S3 MFA Delete কে চালু করতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
শুধু MFA দিয়ে sign in করা IAM user-রাই production RDS database delete করতে পারবে। rds:DeleteDBInstance allow করা statement-এ কোন condition বসবে?
নিজেকে যাচাই করোপ্রশ্ন
prod-admin role-এর trust policy এমন হতে হবে যাতে role-টা শুধু অফিসের network থেকে আর শুধু MFA-র পরেই assume করা যায়। trust policy-তে কোন দুটো condition key লাগবে?