2.4
Role, STS ও IAM Security Tool
service আর মানুষের জন্য অস্থায়ী credential, ধাপে ধাপে AssumeRole, Credentials Report আর Access Advisor।
22 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি যা পারবে
- বুঝিয়ে বলতে পারবে role কেন দরকার: long-term key ছাড়াই permission, যেটা AWS STS অস্থায়ী credential হিসেবে দেয়।
- একটা role-এর দুটো policy পড়তে আর লিখতে পারবে: trust policy (কে assume করতে পারবে) আর permission policy (assume করার পর কী করতে পারবে)।
- একটা AssumeRole call ধাপে ধাপে বুঝতে পারবে, আর চারটা চেনা ভুল ধরতে পারবে: caller-কে বিশ্বাস করা হয়নি, caller-এর অনুমতি নেই, token-এর মেয়াদ শেষ, role chaining-এ এক ঘণ্টার বেশি চাওয়া।
- instance profile, service role আর service-linked role দিয়ে EC2, Lambda আর অন্য service-কে permission দিতে পারবে।
- external ID আর MFA condition দিয়ে এক account থেকে আরেক account-এ নিরাপদ access বানাতে পারবে, আর জানবে federation আর IAM Identity Center কোথায় বসে।
- একটা access key ফাঁস হলে কী করতে হয় জানবে, আর Credentials Report, Access Advisor আর IAM Access Analyzer দিয়ে একটা account যাচাই করতে পারবে।
#long-term key-এর ঝামেলা
লেসন ২.১ থেকে ২.৩ পর্যন্ত প্রতিটা identity ছিল একজন IAM user: একজন মানুষ, যার একটা password আছে, আর CLI বা SDK-র জন্য একটা access key (একটা access key ID আর একটা secret access key, লেসন ১.৩)। এই key-গুলো long-term: যতদিন না কেউ বন্ধ করছে, ততদিন পৃথিবীর যেকোনো জায়গা থেকে, দিনে-রাতে, এগুলো চলতেই থাকে।
একজন engineer নিজের laptop-এ কাজ করলে এতে সমস্যা নেই। কিন্তু একটু বড় হলেই ব্যাপারটা ভেঙে পড়ে:
- EC2-এর একটা application-কে S3 পড়তে হবে। key যদি config file-এ, user data-য় বা code-এ রাখো, তাহলে যে-ই ওই file, image বা repository পড়তে পারবে, সে-ই key পড়ে ফেলবে। key-এর মেয়াদ কখনো ফুরায় না, তাই আজ চুরি হওয়া কপি আগামী বছরও কাজ করবে।
- একটা Lambda function-কে DynamoDB-তে লিখতে হবে। এখানে কোনো laptop নেই, কোনো মানুষও নেই; key-টা টাইপ করবে কে?
- অন্য একটা AWS account-এর এক সহকর্মীকে তোমার log দেখতে হবে। তোমার account-এ তার জন্য IAM user বানালে আরও একটা password আর key সামলাতে হবে, আর সে টিম বদলালে user-টা মুছতে কারও মনে থাকবে না।
- একটা কোম্পানির নিজস্ব directory-তে ২,০০০ কর্মী আছে। ২,০০০টা IAM user বানানো মানে নতুন কেউ এলে, কেউ বিভাগ বদলালে, কেউ চলে গেলে, প্রতিবার একই কাজ দুই জায়গায় করা।
চারটারই উত্তর একটা IAM role: এমন একটা identity, যার permission আছে, কিন্তু নিজের কোনো password বা access key নেই। বিশ্বস্ত কেউ বা কিছু role-টা assume করে, আর AWS STS (Security Token Service) ফেরত দেয় অস্থায়ী credential, যেগুলোর মেয়াদ নিজে থেকেই ফুরিয়ে যায়, ১৫ মিনিট থেকে কয়েক ঘণ্টার মধ্যে।
#role জিনিসটা কী
role-ও user-এর মতোই একটা IAM identity, তারও একটা ARN আছে, যেমন arn:aws:iam::111122223333:role/app-reader। তফাত হলো, role-টা তুমি কীভাবে হয়ে ওঠো।
| IAM user | IAM role | |
|---|---|---|
| কার জন্য | একজন মানুষ (কখনো কখনো কোনো পুরনো application) | যাকে assume করতে দেওয়া হয়েছে: কোনো service, application, অন্য account বা directory-র কোনো মানুষ |
| Credential | long-term: password, সর্বোচ্চ দুটো access key | নিজের কিছু নেই; প্রতিটা session STS থেকে অস্থায়ী credential পায় |
| মেয়াদ | কখনো শেষ হয় না, যতক্ষণ না rotate বা বন্ধ করছ | session শেষ হলে নিজে থেকেই |
| কে ব্যবহার করতে পারে | যার হাতে password বা key আছে | শুধু যাদের নাম trust policy-তে আছে |
| group-এ রাখা যায়? | হ্যাঁ | না; group-এ শুধু user থাকে |
#একটা role-এর দুটো policy
প্রতিটা role-এর দুই রকম policy থাকে, আর এই দুটো গুলিয়ে ফেলাই role নিয়ে সবচেয়ে বেশি হওয়া ভুল।
- trust policy উত্তর দেয় কে এই role assume করতে পারবে। এটা role-এর গায়েই লাগানো একটা resource-based policy, আর role-এর একমাত্র জায়গা যেখানে
Principalলেখা থাকে। এর action হলোsts:AssumeRole(federation-এর জন্যsts:AssumeRoleWithSAML,sts:AssumeRoleWithWebIdentity)। - permission policy উত্তর দেয় assume করার পর role কী কী করতে পারবে। এগুলো সাধারণ identity-based policy (managed বা inline), ঠিক লেসন ২.১-এ user-এর গায়ে যেমন লাগাতে, আর যাচাই হয় লেসন ২.২-এর একই নিয়মে।
একটা trust policy, যেটা EC2 service-কে role assume করতে দেয়:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}
আর একটা permission policy, যেটা একটা bucket পড়তে দেয়:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::reports-bucket", "arn:aws:s3:::reports-bucket/*"]
}
]
}
trust policy-র Principal এগুলোর যেকোনোটা হতে পারে:
| Principal | উদাহরণ | মানে |
|---|---|---|
| একটা AWS service | "Service": "lambda.amazonaws.com" | ওই service তোমার হয়ে role assume করতে পারবে |
| পুরো একটা account | "AWS": "arn:aws:iam::444455556666:root" | account-টাকে বিশ্বাস করা হলো; ওই account-এর কোন user আর role AssumeRole করতে পারবে, সেটা ঠিক করবে সেখানকার administrator-রা |
| নির্দিষ্ট একটা user বা role | "AWS": "arn:aws:iam::444455556666:role/ci-deployer" | শুধু ওই identity |
| একটা SAML provider | "Federated": "arn:aws:iam::111122223333:saml-provider/CorpIdP" | ওই identity provider দিয়ে sign in করা user-রা |
| একটা OIDC provider | "Federated": "arn:aws:iam::111122223333:oidc-provider/token.actions.githubusercontent.com" | ওই provider-এর দেওয়া token যার হাতে আছে (যেমন একটা CI pipeline) |
principal ARN-এ :root মানে root user না। এর মানে “এই account”, আর এভাবেই শেষ সিদ্ধান্তটা ওই account-এর নিজের IAM policy-র হাতে ছেড়ে দেওয়া হয়।
#ধাপে ধাপে AssumeRole
caller STS-এর কাছে চায়
যার হাতে আগে থেকেই কোনো credential আছে (কোনো user-এর access key, অন্য কোনো role-এর session, EC2 service, federation-এর token), সে
sts:AssumeRolecall করে: সঙ্গে দেয় role ARN, একটা session name যেটা log-এ দেখা যাবে, আর চাইলে কতক্ষণের জন্য চায় সেটা।STS দুই দিকই যাচাই করে
request পাস হয় কেবল তখনই, যখন দুই দিকই হ্যাঁ বলে: role-এর trust policy-তে এই caller-এর নাম আছে (আর MFA বা external ID-র মতো condition থাকলে সেগুলোও মিলেছে), এবং caller-এর নিজের identity policy ওই role ARN-এ
sts:AssumeRoleকরতে দেয়। caller আর role একই account-এ হলে, আর trust policy-তে caller-এর নাম হুবহু লেখা থাকলে, শুধু trust policy-ই যথেষ্ট; দুই account-এর মাঝে হলে দুটোই সবসময় লাগে।STS অস্থায়ী credential ফেরত দেয়
চারটা জিনিস আসে: একটা access key ID (শুরু হয়
ASIAদিয়ে, যেখানে long-term key শুরু হয়AKIAদিয়ে), একটা secret access key, একটা session token, আর একটা মেয়াদ শেষের সময়। প্রতিটা request-এ তিনটা অংশই পাঠাতে হয়; token ছাড়া শুধু key দুটো কোনো কাজের না।caller এখন role হিসেবে কাজ করে
এই credential দিয়ে sign করা request-গুলো চলে
arn:aws:sts::111122223333:assumed-role/app-reader/<session-name>হিসেবে। প্রতিটা request যাচাই হয় role-এর permission policy দিয়ে, caller-এর আগের policy দিয়ে না: role assume করা মানে session চলাকালীন নিজের permission ছেড়ে দেওয়া।session নিজে থেকেই শেষ হয়
মেয়াদ শেষ হলে ওই credential দিয়ে পাঠানো প্রতিটা request expired-token error পায়। caller শুধু আবার role assume করে নেয়। কাউকে কিছু rotate বা delete করতে হয় না।
#একটা session কতক্ষণ চলে
- request-এর
DurationSeconds: ৯০০ সেকেন্ড (১৫ মিনিট) থেকে role-এর maximum পর্যন্ত। কিছু না বললে ১ ঘণ্টা। - role-এর maximum session duration setting: ১ ঘণ্টা (default) থেকে ১২ ঘণ্টা পর্যন্ত। role যতটা দেয়, তার বেশি চাইলে error আসে; চুপচাপ কেটে দেওয়া হয় না।
- role chaining, মানে এমন credential দিয়ে role assume করা যেটা নিজেই আরেকটা role থেকে এসেছে, তার সীমা ১ ঘণ্টা, maximum যা-ই বলুক। chaining-এ এর বেশি চাইলে ব্যর্থ।
- instance profile আর Lambda নিজেদের মতো credential বদলায় (নিচে দেখবে), তাই সেখানে তোমাকে এটা সেট করতে হয় না।
STS দিয়ে একটা role assume করা
একটা application-এর হাতে ছোট একটা user key আছে। S3 পড়ার জন্য সে app-reader role-টা assume করবে। দেখো STS কোন দুটো জিনিস যাচাই করে, কী ফেরত দেয়, আর একেকটা ভুলে কী হয়।
পরিস্থিতি
দুই দিকই রাজি, তাই STS এক ঘণ্টার একটা session দেয়।
application নিজের কাছে থাকা credential দিয়ে request sign করে, role-এর ARN আর একটা session name দেয়, আর এক ঘণ্টা চায়।
#AssumeRole-এ কোথায় গোলমাল হয়
- caller-এর নাম trust policy-তে নেই।
AssumeRole-এই access denied, role-এর permission যত বড়ই হোক।Principalঠিক করো (বানানটাও দেখো: কোনো user-এর ARN principal হিসেবে লেখা থাকলে আর সেই user পরে মুছে গেলে, principal-টা একটা অচেনা ID হয়ে যায়, আর কারও সাথেই আর মেলে না)। - caller-এর
sts:AssumeRolecall করার অনুমতি নেই। দুই account-এর মাঝে এটা খুব হয়: account B-র role account A-কে বিশ্বাস করে, কিন্তু account A-তে কাউকে সেটা assume করার অনুমতি দেওয়া হয়নি। - session token-এর মেয়াদ শেষ। যে লম্বা script শুরুতে একবার role assume করেছিল, সেটা এক ঘণ্টা পরে ভাঙে। CLI বা SDK-কে একটা profile থেকে role assume করতে দাও (
role_arn+source_profile): তারা নিজে থেকেই credential নতুন করে নেয়। - role chaining-এ এক ঘণ্টার বেশি। যে job একটা role হিসেবে চলে আর তারপর দ্বিতীয় একটা role assume করে, সে দ্বিতীয়টায় এক ঘণ্টার বেশি পায় না।
- অস্থায়ী credential চুরি হয়েছে। মেয়াদ শেষ না হওয়া পর্যন্ত সেগুলো চলবে। অপেক্ষা করা না গেলে role-এ Revoke active sessions ব্যবহার করো: IAM একটা inline policy লাগিয়ে দেয়, যেটা ওই মুহূর্তের আগে দেওয়া সব session-কে সব কিছুতে deny করে (
aws:TokenIssueTime), আর নতুন session-গুলো ঠিকঠাক চলে। role-এর permission policy বদলালেও সেটা চালু session-এ সঙ্গে সঙ্গে লাগে, কারণ প্রতিটা request-এ permission নতুন করে যাচাই হয়; credential-গুলো permission-এর কোনো ছবি তুলে রাখে না।
নিজেকে যাচাই করোপ্রশ্ন
account 444455556666-এর একজন developer account 111122223333-এর একটা role assume করতে গিয়ে access denied পাচ্ছে। role-এর trust policy principal arn:aws:iam::444455556666:root-কে অনুমতি দেয়। সবচেয়ে সম্ভাব্য কোন জিনিসটা বাদ পড়েছে?
#AWS service-এর জন্য role
slide-এ সবচেয়ে চেনা role-গুলোর তালিকা আছে: EC2 instance role, Lambda function role আর CloudFormation-এর role। সবগুলোর পেছনে একটাই ভাবনা: একটা AWS service তোমার হয়ে কাজ করছে, তাই service-কে key না দিয়ে একটা role দাও।
#EC2: instance profile
IAM নিয়ে পরীক্ষার সবচেয়ে প্রিয় প্রশ্ন এটা: EC2-এর একটা application-কে S3 বা DynamoDB পড়তে হবে; নিরাপদ উপায় কী? উত্তর সবসময় instance-এ একটা IAM role লাগিয়ে দাও, কখনোই access key রেখো না।
EC2 role-টা সরাসরি লাগায় না। সে ব্যবহার করে একটা instance profile, ছোট একটা container, যার ভেতরে থাকে ঠিক একটা role, আর instance-এ আসলে এটাই লাগানো হয়:
- console-এ EC2-এর জন্য role বানালে একই নামের একটা instance profile নিজে থেকেই তৈরি হয়ে যায়, তাই দুটোকে এক জিনিস মনে হয়। CLI বা infrastructure as code দিয়ে কাজ করলে profile বানিয়ে তাতে role ঢোকানোর কাজটা তোমাকেই করতে হয়।
- একটা instance-এ সর্বোচ্চ একটা instance profile, আর একটা instance profile-এ একটা role। permission আরও লাগলে ওই role-এই policy যোগ করো।
- চালু instance-এও instance profile লাগানো, বদলানো বা সরানো যায়; restart লাগে না।
credential কীভাবে application-এর কাছে পৌঁছায় (metadata-র দিকটা লেসন ৪.৩-এ বিস্তারিত দেখেছ):
- EC2 instance-এর হয়ে role assume করে, আর অস্থায়ী credential রেখে দেয় instance metadata service-এ,
iam/security-credentials/<role-name>-এর নিচে। - AWS CLI আর প্রতিটা AWS SDK একটা নির্দিষ্ট ক্রমে credential খোঁজে (credential provider chain): command-line option, environment variable, shared
~/.aws/credentialsআর~/.aws/configfile, container credential, আর সবশেষে instance profile। - মেয়াদ ফুরানোর আগেই AWS IMDS-এ credential নতুন করে দেয়, আর SDK নতুনগুলো তুলে নেয়। application কখনো কোনো key দেখে না, disk-এ চুরি করার মতো কিছুই থাকে না।
EC2-এর application আর তার instance profile
application AWS SDK দিয়ে DynamoDB-তে call করে। সে কখনো কোনো key দেখে না: দেখো SDK credential কোথায় খুঁজে পায়, সেগুলো কীভাবে বদলায়, আর দুইভাবে কীভাবে গোলমাল হয়।
পরিস্থিতি
SDK তার credential chain ধরে খুঁজতে খুঁজতে instance profile-এ পৌঁছায়।
instance-টা launch হয়েছে orders-writer instance profile দিয়ে। EC2 instance-এর হয়ে ভেতরের role-টা assume করে।
#service role আর role তুলে দেওয়া
service role হলো এমন একটা role, যেটা তুমি বানাও কোনো service-এর assume করার জন্য: যেমন Lambda execution role (বিশ্বস্ত principal lambda.amazonaws.com, আর permission হিসেবে CloudWatch-এ log লেখা, একটা DynamoDB table পড়া), বা এমন একটা role, যেটা দিয়ে CloudFormation একটা stack-এর resource বানায়।
কোনো service-এর হাতে role তুলে দেওয়াটাও একটা permission। profile দিয়ে instance launch করতে, বা execution role দিয়ে function বানাতে, ওই role-এ তোমার iam:PassRole লাগে। এই যাচাই না থাকলে, যে developer শুধু Lambda function বানাতে পারে, সে একটা function-এ administrator role লাগিয়ে তা দিয়ে যা খুশি code চালাতে পারত। তাই iam:PassRole সীমিত রাখো ঠিক যে role ARN-গুলো মানুষের সত্যিই লাগে, সেগুলোতে।
#service-linked role
service-linked role হলো এমন role, যেটার মালিক একটা service। তুমি service-টা ব্যবহার শুরু করলে সে নিজেই (সাধারণত নিজে থেকে) এটা বানিয়ে নেয়, যেমন AWSServiceRoleForAutoScaling বা AWSServiceRoleForElasticLoadBalancing।
- এর trust policy আর permission service আগে থেকেই ঠিক করে রেখেছে; তুমি বদলাতে পারো না।
- service আর এটা ব্যবহার না করলেই কেবল মুছতে পারবে (যেমন এর ওপর নির্ভর করা resource-গুলো মুছে ফেলার পর)।
- এটা থাকে
/aws-service-role/path-এর নিচে, তাই এক নজরেই চেনা যায়।
| Service role | Service-linked role | |
|---|---|---|
| কে বানায় | তুমি | service (সাধারণত প্রথমবার ব্যবহারের সময়) |
| Permission | তুমি বেছে নাও, বদলাতেও পারো | service ঠিক করে রাখে |
| উদাহরণ | Lambda execution role | AWSServiceRoleForAutoScaling |
| পরীক্ষায় সাধারণ ইঙ্গিত | “function-কে table-এ access দাও” | “service-এর তোমার হয়ে resource সামলানোর permission লাগবে” |
#এক account থেকে আরেক account-এ: cross-account role
যে কোম্পানির dev, prod আর security আলাদা account আছে (এটাই স্বাভাবিক ব্যবস্থা, অধ্যায় ২০), তাদের প্রতিটা account-এ একই মানুষদের জন্য IAM user বানানো উচিত না। বরং:
- target account-এ (ধরো prod,
111122223333) একটা role বানাওops-readonly, যার trust policy উৎস account-কে (444455556666) বিশ্বাস করে, আর permission শুধু পড়ার। - উৎস account-এ operations group-কে ওই role-এর ARN-এ
sts:AssumeRoleকরার অনুমতি দাও। - engineer-রা শুধু একবার, উৎস account-এ sign in করেন, তারপর console-এ Switch role (বা
role_arnদেওয়া CLI profile) দিয়ে অস্থায়ী credential-এ prod-এ কাজ করেন।
prod-এ প্রতিটা কাজ CloudTrail-এ লেখা থাকে assumed-role/ops-readonly/<session-name> হিসেবে, তাই কে কী করল সেটা তুমি তখনো জানো।
#role assume করতে MFA বাধ্যতামূলক
sensitive কোনো role-এর trust policy দাবি করতে পারে যে caller কিছুক্ষণ আগেই MFA দিয়ে sign in করেছে (লেসন ২.৩):
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::444455556666:root" },
"Action": "sts:AssumeRole",
"Condition": {
"Bool": { "aws:MultiFactorAuthPresent": "true" },
"NumericLessThan": { "aws:MultiFactorAuthAge": "3600" }
}
}
যে caller শুধু একটা access key ব্যবহার করছে (session-এ কোনো MFA নেই), সে বাতিল হবে। CLI user assume-role-এ --serial-number আর --token-code দিয়ে, বা CLI profile-এ mfa_serial সেট করে, শর্তটা পূরণ করতে পারে।
#third party আর external ID
কোনো monitoring বা খরচ-বিশ্লেষণের vendor প্রায়ই বলে, এমন একটা role বানাও যেটা সে নিজের AWS account থেকে assume করবে। বিপদটার নাম confused deputy: vendor শত শত customer-এর role assume করে, তাই অন্য কোনো customer vendor-এর web form-এ তোমার role ARN বসিয়ে দিয়ে vendor-কে দিয়ে তোমার account পড়িয়ে নিতে পারে।
সমাধান একটা external ID: vendor তোমাকে একটা অনন্য মান দেয়, আর তোমার trust policy সেটা চায়:
"Condition": { "StringEquals": { "sts:ExternalId": "vendor-7f3a91c2" } }
vendor সবসময় যে customer-এর হয়ে কাজ করছে, তার external ID-টাই পাঠায়। অন্য কারও জন্য পাঠানো request-এ থাকে অন্য মান, তাই বাতিল হয়। external ID কোনো password না (vendor তো এটা জানেই); এর কাজ শুধু প্রতিটা role-কে ঠিক customer-এর সাথে বেঁধে রাখা।
role দিয়ে এক account থেকে আরেক account-এ কাজ
dev account-এর একজন engineer-এর prod-এ শুধু পড়ার access দরকার, আর একটা vendor-এর দরকার তোমার bill পড়া। দেখো কোন দিক থেকে কী অনুমতি লাগে, আর MFA condition আর external ID কী আটকায়।
পরিস্থিতি
দুই account-ই রাজি, আর MFA condition-ও মিলেছে।
alice-এর IAM user একটাই, শুধু dev-এ। prod-এ তার কোনো user নেই, আছে শুধু একটা role, যেটা dev account-কে বিশ্বাস করে আর MFA চায়।
নিজেকে যাচাই করোপ্রশ্ন
একটা SaaS vendor নিজের AWS account থেকে অনেক customer-এর account-এর role assume করে। security review বলছে, একজন customer vendor-কে দিয়ে অন্য customer-এর account-এ ঢুকিয়ে নিতে পারে। প্রতিটা customer-এর role-এর trust policy-তে কী যোগ করা উচিত?
#এক পাতায় federation
Federation মানে মানুষ (বা workload) অন্য জায়গায় তাদের যে identity আগে থেকেই আছে, সেটাই রাখে, আর AWS সেই identity provider-কে (IdP) বিশ্বাস করে যে সে ঠিক মানুষটার হয়েই কথা বলছে। তারা কখনো IAM user পায় না: IdP-তে sign in করার পর তারা একটা role assume করে। note-এর কথাটা খাঁটি: প্রতিটা federated login-এর পেছনে একটা role আছে।
| ঢোকার পথ | কারা ব্যবহার করে | কী হয় |
|---|---|---|
| SAML 2.0 | কোম্পানির directory-র কর্মীরা (ADFS দিয়ে Microsoft Active Directory, Microsoft Entra ID, Okta…) | IdP একটা SAML assertion sign করে; browser সেটা AWS-এ পাঠায়; STS AssumeRoleWithSAML assertion-এ লেখা role-এর credential ফেরত দেয় |
| Web identity / OIDC | কোনো OIDC provider-এর token পাওয়া workload আর app: GitHub Actions pipeline, Kubernetes service account, Google বা Facebook sign-in | token যায় STS AssumeRoleWithWebIdentity-তে; role-এর trust policy token-এর issuer, audience আর subject যাচাই করে |
| Amazon Cognito | তোমার নিজের mobile বা web app-এর user | Cognito app user-এর login বদলে একটা role-এর অস্থায়ী credential দেয়; app-এর জন্য সরাসরি STS call না করে এটাই সুপারিশ করা উপায় |
| IAM Identity Center | AWS Organizations-এর অনেক account জুড়ে কোম্পানির কর্মীরা | একটাই sign-in portal (নিজস্ব user, বা SAML আর SCIM দিয়ে জোড়া কোনো directory/IdP); permission set প্রতিটা account-এ role হয়ে যায়। এটা AWS Single Sign-On-এর উত্তরসূরি, আর মানুষের AWS-এ ঢোকার জন্য AWS-এর সুপারিশ করা উপায় |
Microsoft Active Directory নিজে SAML বলে না; বলে তার সামনে বসানো কোনো IdP (ADFS, Entra ID)। Identity Center, Cognito আর directory service-এর পুরো গল্প অধ্যায় ২০-এ।
federated sign-in-এর শেষে সবসময় একটা role
বাইরের কোনো identity AWS-এ ঢোকার তিনটা উপায়। প্রতিটাতেই identity provider কারও হয়ে নিশ্চয়তা দেয়, আর STS একটা role-এর অস্থায়ী credential দেয়।
পরিস্থিতি
একজন কর্মী কোম্পানির directory দিয়ে sign in করেন।
কর্মী কোম্পানির identity provider-এ sign in করেন, যেমন Active Directory-র সামনে বসানো ADFS, বা Microsoft Entra ID।
#ফাঁস হওয়া আর code-এ বসানো key
note-এ কথাটা সোজাসুজি বলা আছে: প্রশ্নে যদি দেখো কোনো developer source code-এ access key hardcode করেছে বা GitHub-এ push করে দিয়েছে, তাহলে উত্তর সবসময় ওই key-গুলো rotate করা (deactivate করে delete), আর EC2 বা Lambda-য় চলা code-এর জন্য IAM role ব্যবহার করা।
তাড়াটা কেন: bot-রা সারাক্ষণ public repository scan করে, আর নতুন একটা AWS key পেলে কয়েক মিনিটের মধ্যেই ব্যবহার শুরু করে, সাধারণত cryptocurrency mining-এর জন্য দামি instance চালিয়ে। AWS-ও public GitHub scan করে; তোমার কোনো key পেলে সে তোমাকে email করে, একটা support case খোলে, আর user-এর গায়ে একটা quarantine policy (AWSCompromisedKeyQuarantine…) লাগিয়ে দেয়, যেটা সবচেয়ে বেশি অপব্যবহার হওয়া action-গুলো deny করে। এতে ক্ষতি কমে; সমস্যার সমাধান হয় না।
কী করবে, এই ক্রমে:
- Deactivate করো key-টা, এখনই (deactivate আবার ফেরানো যায়, তাই delete-এর আগে এটাই করো)।
- খুঁজে বের করো সে কী করেছে: CloudTrail event history-তে key-এর ID দিয়ে খোঁজো; প্রতিটা Region-এ নতুন user, role, key, instance, আর billing-এ কোনো বদল খোঁজো।
- ক্ষতি ফেরাও: attacker যা বানিয়েছে সব মুছে ফেলো, ফিরে আসার রাস্তা হিসেবে বানানো বাড়তি access key আর user-সহ।
- ঠিকভাবে বদলাও: AWS-এ চলা code-এর জন্য IAM role, মানুষের জন্য Identity Center বা role; আর long-term key যদি একেবারেই এড়ানো না যায়, তবে নতুন key রাখো secrets store-এ, code-এ কখনো না।
- Delete করো পুরনো key, আর repository-র history থেকেও সরিয়ে ফেলো (শেষ commit মুছলেই চলবে না)।
#downtime ছাড়া key rotate করা
একটা IAM user-এর দুটো access key থাকতে পারে, ঠিক এই কারণেই, যাতে কোনো বিভ্রাট ছাড়া rotate করা যায়: দ্বিতীয় key বানাও, সব জায়গায় বসাও, last used দেখে নিশ্চিত হও পুরনো key আর কেউ ব্যবহার করছে না, পুরনোটা deactivate করো, কিছুদিন অপেক্ষা করো, তারপর মুছে ফেলো।
public repository-তে push হয়ে যাওয়া access key
একজন developer একটা long-term access key commit করে ফেলল। দেখো কত দ্রুত সেটার অপব্যবহার হয়, AWS কী করে, আর সামলানোর সঠিক ক্রম কী। তারপর দেখো downtime ছাড়া key rotate করা।
পরিস্থিতি
অপব্যবহার হতে লাগে কয়েক মিনিট; সামলানোর ক্রমটাই আসল।
একটা IAM user-এর access key ID আর secret key-সহ একটা config file public repository-তে push হয়ে গেল।
#IAM যাচাইয়ের তিনটা tool
note-এ একটা চতুর জোড়ার কথা আলাদা করে বলা আছে: Credentials Report আর Access Advisor। সাথে IAM Access Analyzer যোগ করলে পুরো টুলবক্স হাতে চলে আসে।
| IAM Credentials Report | IAM Access Advisor (last accessed) | IAM Access Analyzer | |
|---|---|---|---|
| পরিসর | পুরো account: প্রতিটা user, root user-সহ | একটা identity: একটা user, group বা role (একটা policy-ও, আর Organizations-এ account বা OU) | একটা account বা organisation জুড়ে resource আর identity |
| কী দেখায় | প্রতিটা user-এর credential: password চালু কি না, শেষ কবে ব্যবহার আর কবে বদলানো, MFA চালু কি না, প্রতিটা access key-এর অবস্থা, শেষ rotation আর শেষ ব্যবহার | identity-র policy কোন কোন service (আর অনেক service-এ কোন কোন action) ব্যবহার করতে দেয়, আর প্রতিটা শেষ কবে ব্যবহার হয়েছে, সর্বোচ্চ ৪০০ দিন পর্যন্ত | যেসব resource তোমার account বা organisation-এর বাইরে share করা (bucket, role, key, queue…), অব্যবহৃত role, key আর permission, policy যাচাই, আর CloudTrail-এর আসল কাজ দেখে বানানো policy |
| রূপ | download করা যায় এমন একটা CSV file, সর্বোচ্চ প্রতি ৪ ঘণ্টায় একবার নতুন করে তৈরি | console-এ বা API দিয়ে দেখা যায় | console, API, Security Hub-এ finding |
| কোন প্রশ্নের উত্তর | “কার MFA নেই? কার key ৯০ দিনের বেশি পুরনো? কে মাসের পর মাস login করেনি?” | “এই role-এর এতগুলো permission-এর মধ্যে আসলে কোনগুলো ব্যবহার হয়?” | “আমার account-এর বাইরের কে এই bucket-এ পৌঁছাতে পারে? কোন permission কখনো ব্যবহারই হয় না?” |
note-এর পরীক্ষার কৌশল: “least privilege প্রয়োগ করতে অব্যবহৃত permission কীভাবে খুঁজে সরাবে?” → IAM Access Advisor (last accessed তথ্য)। সব user-এর credential-এর compliance audit → Credentials Report। বাইরের account-এর সাথে share করা resource → IAM Access Analyzer।
তিনটা tool দিয়ে IAM যাচাই
security টিম তিনটা আলাদা প্রশ্ন করে। প্রতিটার জন্য আলাদা tool: দেখো প্রতিটা report দেখতে কেমন, আর কোন সারিগুলোতে কাজ করতে হবে।
পরিস্থিতি
পুরো account: প্রতিটা user-এর password, MFA আর key।
প্রশ্ন: “কোন কোন user-এর MFA নেই, বা key পুরনো?” উত্তরটা account-এর সব user নিয়ে, তাই লাগবে account-level tool।
#এই অধ্যায়ের IAM best practice
slide-এর checklist, আজ AWS যা সুপারিশ করে তা মিলিয়ে:
- root user ব্যবহার করবে না, শুধু যে কয়েকটা কাজে ওটা লাগেই সেগুলো ছাড়া (লেসন ২.৩)। এতে MFA চালু রাখো, আর root-এর কোনো access key রেখো না।
- মানুষ পাবে অস্থায়ী credential: IAM user-এর বদলে IAM Identity Center বা federation-কে প্রাধান্য দাও। যেখানে IAM user থেকেই যায়, সেখানে একজন মানুষ = একটা user, কখনো ভাগাভাগি না।
- workload পাবে role: instance profile, Lambda execution role, task role, CI-র জন্য OIDC। long-term access key কেবল তখনই, যখন আর কিছুতেই কাজ চলে না, আর তখনো নিয়মিত rotate করে।
- permission দাও group-কে (user-দের জন্য) আর role-কে, একেকজন user-কে আলাদা করে না।
- least privilege: দরকার হলে AWS managed policy দিয়ে শুরু করো, তারপর Access Advisor আর Access Analyzer-এর বানানো policy দিয়ে সেটা ছেঁটে ছোট করো।
- শক্ত password policy, আর যারা sign in করে তাদের সবার জন্য MFA।
- বাড়তি নিরাপত্তার জন্য condition: sensitive role-এ MFA, third party-র জন্য external ID,
iam:PassRoleশুধু নির্দিষ্ট role-এ। - নিয়মিত যাচাই করো Credentials Report, Access Advisor আর Access Analyzer দিয়ে; সব কিছু CloudTrail-এ log করো।
- কখনো ভাগাভাগি করবে না IAM user বা access key, আর code, image বা user data-য় কখনো key রাখবে না।
#design-এ সব কিছু কীভাবে মেলে
এই অধ্যায় শেষে একটা সাধারণ কোম্পানির ব্যবস্থা দেখতে এমন:
- কর্মীরা sign in করেন IAM Identity Center দিয়ে, যেটা কোম্পানির directory-র সাথে জোড়া। প্রত্যেকে পান কয়েকটা permission set, যেগুলো dev, prod আর security account-এ role হিসেবে দেখা যায়।
- prod-এর web server চলে একটা instance profile নিয়ে, যার role একটা S3 bucket আর একটা Secrets Manager secret পড়তে পারে; launch template IMDSv2 বাধ্যতামূলক রাখে (লেসন ৪.৩)।
- প্রতিটা Lambda function-এর নিজের execution role, ঠিক যতটুকু সেই function-এর লাগে; developer-রা শুধু ওই role-গুলোই pass করতে পারে (ARN ধরে সীমিত
iam:PassRole)। - deployment pipeline OIDC দিয়ে একটা deploy role assume করে; pipeline-এ কোনো key নেই।
- খরচ দেখার একটা vendor external ID দিয়ে একটা শুধু-পড়ার cross-account role assume করে।
- প্রতি মাসে security টিম Credentials Report দেখে, Access Advisor দিয়ে role-গুলো ছাঁটে, আর Access Analyzer-এর finding ধরে কাজ করে।
এই পুরো ছবিতে কোথাও কোনো long-term key নেই, তাই ফাঁস হওয়ার মতোও কিছু নেই।
#নিজে করে দেখো
# 1. এই মুহূর্তে আমি কে? (অন্য কোনো permission না থাকলেও চলে)
aws sts get-caller-identity
# 2. EC2 assume করতে পারে এমন একটা role বানাও, S3-এ শুধু পড়ার অনুমতি দাও, আর instance profile-এ ঢোকাও
cat > trust-ec2.json <<'EOF'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow",
"Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]}
EOF
aws iam create-role --role-name app-reader --assume-role-policy-document file://trust-ec2.json
aws iam attach-role-policy --role-name app-reader \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
aws iam create-instance-profile --instance-profile-name app-reader
aws iam add-role-to-instance-profile --instance-profile-name app-reader --role-name app-reader
# 3. চালু instance-এ লাগাও (restart ছাড়া), তারপর instance-এ গিয়ে দেখো সে কে
aws ec2 associate-iam-instance-profile --instance-id $ID --iam-instance-profile Name=app-reader
aws sts get-caller-identity # instance-এ চালাও: ...:assumed-role/app-reader/i-0...
# 4. হাতে একটা role assume করো, আর অস্থায়ী credential-গুলো দেখো
aws sts assume-role --role-arn arn:aws:iam::111122223333:role/ops-readonly \
--role-session-name alice-test --duration-seconds 900
# -> AccessKeyId (ASIA...), SecretAccessKey, SessionToken, Expiration
# 5. অথবা CLI-কেই assume আর নবায়ন করতে দাও: ~/.aws/config
# [profile prod-ro]
# role_arn = arn:aws:iam::111122223333:role/ops-readonly
# source_profile = default
# mfa_serial = arn:aws:iam::444455556666:mfa/alice
aws s3 ls --profile prod-ro
# 6. Credentials Report: তৈরি করো, তারপর CSV নামিয়ে decode করো
aws iam generate-credential-report
aws iam get-credential-report --query Content --output text | base64 -d > report.csv
# 7. Access Advisor: এই role কোন কোন service ব্যবহার করেছে, শেষ কবে?
JOB=$(aws iam generate-service-last-accessed-details \
--arn arn:aws:iam::111122223333:role/app-reader --query JobId --output text)
aws iam get-service-last-accessed-details --job-id $JOB
# 8. key ফাঁস হয়েছে: আগে deactivate, তারপর দেখো সে কী করেছে
aws iam update-access-key --user-name ci-old --access-key-id AKIAEXAMPLE --status Inactive
aws cloudtrail lookup-events --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=AKIAEXAMPLE
#সারসংক্ষেপ
মূল কথাগুলো
- IAM role এমন একটা identity, যার permission আছে কিন্তু কোনো long-term credential নেই। তার trust policy যাকে অনুমতি দেয়, সে role-টা assume করতে পারে আর STS থেকে পায় অস্থায়ী credential: access key ID (
ASIA…), secret key, session token, মেয়াদ। - Trust policy = কে assume করতে পারবে (
Principalথাকে শুধু এখানেই)। Permission policy = session কী করতে পারবে। দুই account-এর মাঝে caller-এর নিজের account-এওsts:AssumeRole-এর অনুমতি লাগে। - session চলে ১৫ মিনিট থেকে role-এর maximum পর্যন্ত (default ১ ঘণ্টা, সর্বোচ্চ ১২ ঘণ্টা); role chaining-এর সীমা ১ ঘণ্টা। মেয়াদ ফুরানো token ব্যর্থ হয়; আবার assume করো। Revoke active sessions চুরি যাওয়া session আগেভাগেই মেরে দেয়।
- EC2 permission পায় instance profile দিয়ে (একটা profile-এ একটা role); credential আসে IMDS থেকে, আর নিজে থেকেই বদলায়।
~/.aws/credentialsবা environment variable-এ পড়ে থাকা পুরনো key role-কে টপকে যায়। - Service role (Lambda execution role, CloudFormation-এর role) তুমি নিজে ঠিক করো; কোনো service-এর হাতে সেটা দিতে লাগে
iam:PassRole। Service-linked role আগে থেকেই ঠিক করা, মালিক service নিজে। - Cross-account: target account-এ এমন একটা role, যেটা উৎস account-কে বিশ্বাস করে, আর উৎস account-এ assume করার অনুমতি। sensitive role-এ MFA condition, third party-র জন্য external ID (confused deputy)।
- Federation (SAML 2.0, OIDC web identity, Cognito, IAM Identity Center) সবসময় শেষ হয় একটা role assume করে। মানুষের ঢোকার জন্য AWS-এর সুপারিশ Identity Center।
- code-এ বসানো বা ফাঁস হওয়া key: deactivate, CloudTrail-এ তদন্ত, পরিষ্কার, role দিয়ে বদল, তারপর delete। long-term key rotate করো দুই key পদ্ধতিতে।
- Credentials Report = পুরো account-এর CSV, প্রতিটা user-এর credential (MFA, key-এর বয়স)। Access Advisor = একটা identity কোন service ব্যবহার করতে পারে আর শেষ কবে করেছে; অব্যবহৃত permission সরানোর tool এটাই। Access Analyzer = বাইরের সাথে share আর অব্যবহৃত access-এর finding, সাথে policy তৈরি।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
IAM user আর IAM role-এর মূল তফাত কী?
নিজেকে যাচাই করোপ্রশ্ন
কে একটা role assume করতে পারবে, সেটা role-এর কোন অংশ ঠিক করে?
নিজেকে যাচাই করোপ্রশ্ন
একটা role assume করলে STS access key ID-র পাশাপাশি আর কোন দুটো জিনিস ফেরত দেয়?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা access key ID শুরু হয়েছে ASIA দিয়ে। এটা থেকে কী বোঝা যায়?
নিজেকে যাচাই করোপ্রশ্ন
default হিসেবে AssumeRole call-এর credential কতক্ষণ চলে, আর একটা role সর্বোচ্চ কতক্ষণ দিতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
একটা batch job role A হিসেবে চলে, আর job-এর ভেতর থেকে role B assume করে ১৪,৪০০ সেকেন্ড (৪ ঘণ্টা) চেয়ে। role B-র maximum session duration ১২ ঘণ্টা। call-টা ব্যর্থ হয়। কেন?
নিজেকে যাচাই করোপ্রশ্ন
একটা role-এ পুরো administrator access-এর AWS managed policy লাগানো। একই account-এর একজন user সেটায় AssumeRole call করে access denied পাচ্ছে। user-এর নিজের policy সব resource-এ sts:AssumeRole করতে দেয়। ভুলটা কোথায়?
নিজেকে যাচাই করোপ্রশ্ন
EC2-এ চলা একটা application-কে একটা S3 bucket থেকে object পড়তে হবে। অনুমতি দেওয়ার সবচেয়ে নিরাপদ উপায় কী?
নিজেকে যাচাই করোপ্রশ্ন
instance profile নিয়ে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
একটা EC2 instance-এর role DynamoDB table-এ লিখতে দেয়, কিন্তু application access denied পাচ্ছে, আর instance-এ aws sts get-caller-identity চালালে দেখায় old-deployer নামের একটা IAM user। কী হচ্ছে?
নিজেকে যাচাই করোপ্রশ্ন
একজন developer Lambda function বানাতে পারেন। কোম্পানি নিশ্চিত করতে চায় যে তিনি কোনো function-এ পুরো administrator permission-ওয়ালা role লাগাতে পারবেন না। কোন permission সীমিত করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
service-linked role নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একজন engineer IMDS থেকে instance-এর role credential পড়ে দেখলেন, কয়েক ঘণ্টা পর মেয়াদ শেষ হবে। application যদি AWS SDK ব্যবহার করে, মেয়াদ শেষ হলে কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
তোমার কোম্পানির একটা dev account আর একটা prod account আছে। engineer-দের dev-এ আগে থেকেই IAM user আছে, আর prod-এ তাদের শুধু পড়ার access দরকার। সুপারিশ করা উপায় কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
role-এর trust policy-র কোন দুটো condition cross-account access-কে বেশি নিরাপদ করে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা role-এর trust policy চায় MFA থাকতে হবে (MFA-present condition key সত্য হতে হবে)। একটা script MFA-র কোনো parameter ছাড়া, একটা IAM user-এর access key দিয়ে assume-role call করে। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
external ID কীসের বিরুদ্ধে সুরক্ষা দেয়?
নিজেকে যাচাই করোপ্রশ্ন
কর্মীরা কোম্পানির Microsoft Entra ID account দিয়ে sign in করেন, আর IAM user ছাড়াই AWS console-এ পৌঁছাতে চান। ভেতরে ভেতরে কোন ব্যবস্থা কাজ করে?
নিজেকে যাচাই করোপ্রশ্ন
AWS Organizations-এ ৪০টা AWS account আছে এমন একটা কোম্পানি সব কর্মীর জন্য একটাই sign-in portal চায়, আর প্রতিটা account-এর permission এক জায়গা থেকে সামলাতে চায়। AWS কী সুপারিশ করে?
নিজেকে যাচাই করোপ্রশ্ন
একটা GitHub Actions pipeline repository secret-এ রাখা একটা access key দিয়ে AWS-এ deploy করে। কোনো জমানো key ছাড়া এটা কীভাবে deploy করতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
এক ঘণ্টা আগে একজন developer একটা IAM user-এর access key-সহ code একটা public GitHub repository-তে push করেছেন। প্রথমে কী করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
ফাঁস হওয়া একটা long-term access key সামলাতে কোন দুটো ধাপ লাগে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা application একটা access key ব্যবহার করে, আর তার কোনো downtime চলবে না। key কীভাবে rotate করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
একজন auditor account-এর সব IAM user-এর একটা তালিকা চান: প্রত্যেকের MFA চালু কি না, আর প্রতিটা access key শেষ কবে rotate হয়েছে। কোন tool এটা দেয়?
নিজেকে যাচাই করোপ্রশ্ন
least privilege মানতে একজন security engineer একটা role-এর এমন permission সরাতে চান, যেগুলো দেওয়া আছে কিন্তু গত ৯০ দিনে ব্যবহার হয়নি। কোন tool এটা সবচেয়ে সরাসরি দেখায়?
নিজেকে যাচাই করোপ্রশ্ন
IAM Access Advisor নিয়ে কোন কথাটা ঠিক নয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি জানতে চায়, তাদের কোনো S3 bucket, KMS key বা IAM role-এ তাদের AWS organization-এর বাইরের কোনো principal পৌঁছাতে পারে কি না। এর জন্য কোন service বানানো?
নিজেকে যাচাই করোপ্রশ্ন
একজন attacker production-এর একটা role-এর অস্থায়ী credential চুরি করেছে, যেগুলো আরও ৫০ মিনিট চলবে। application-এর জন্য role-টা চালু রাখতেই হবে। এখনই সবচেয়ে ভালো পদক্ষেপ কী?
নিজেকে যাচাই করোপ্রশ্ন
Principal অংশ নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
কোন অভ্যাসটা IAM best practice-এর সাথে মেলে না?
নিজেকে যাচাই করোপ্রশ্ন
account A (111122223333)-এর EC2-তে চলা একটা application-কে account B (444455556666)-এর একটা bucket পড়তে হবে। account B-র security team bucket policy দিয়ে না, role আর temporary credential দিয়ে এক জায়গা থেকে access নিয়ন্ত্রণ করতে চায়। ঠিক design কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা security team পুরো Organization-এর সব account জুড়ে খুঁজে বের করতে চায় কোন IAM role ৯০ দিন ব্যবহার হয়নি, আর role-এর ভেতরের কোন permission কখনো কাজে লাগে না, যাতে বাড়তি access সরিয়ে ফেলা যায়। কোন tool সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
একটা role-এর trust policy এমন হতে হবে যাতে শুধু Department = Finance tag-ওয়ালা IAM user-রাই role-টা assume করতে পারে। trust policy-তে কোন condition বসবে?
নিজেকে যাচাই করোপ্রশ্ন
তৃতীয় কোনো পক্ষ যখন role assume করে, তখন confused deputy সমস্যা ঠেকাতে role-এর trust policy-তে কোন condition key বসাতে হয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা mobile game player-দের Google (একটা OpenID Connect provider) দিয়ে sign in করায়, আর চায় তারা temporary AWS credential দিয়ে সরাসরি S3-তে save file upload করুক। Google-এর token-এর বদলে AWS credential দেয় কোন STS API?
নিজেকে যাচাই করোপ্রশ্ন
একটা ব্যাংকের কর্মীরা ADFS দিয়ে Active Directory-তে sign in করেন, আর ADFS SAML 2.0-তে কথা বলে। IAM user ছাড়াই তাঁদের AWS console-এ ঢুকতে হবে। পেছনে কোন STS API ব্যবহার হয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা compliance team-কে IAM user-দের cross-account role assume করার প্রতিটা সফল আর ব্যর্থ চেষ্টার রেকর্ড রাখতে হবে: কে চেষ্টা করল, কোন IP থেকে, কখন। কোন service এটা দেয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা SaaS monitoring কোম্পানি cross-account role দিয়ে শত শত customer account থেকে CloudWatch data পড়ে। customer হিসেবে তোমার role-এর trust policy-তে কী বাধ্যতামূলক করবে, যাতে একই vendor-এর অন্য কোনো customer vendor-কে দিয়ে তোমার account পড়িয়ে নিতে না পারে?