এই পর্বে যা শিখবেন
- এক account কেন বড় হলে ভেঙে পড়ে, আর account, subscription, project-এর গাছ কীভাবে সাজায়
- Landing zone আর account vending-এ একটি নতুন দলের account কীভাবে তৈরি হয়
- Preventive আর detective guardrail লেখা, পরীক্ষা করা আর ঠিকভাবে চালু করা
- Tag কৌশল, tag coverage আর unallocated খরচের হিসাব, দলভিত্তিক budget
- Quota headroom গুনে কত আগে বাড়ানোর আবেদন করবেন, তা ঠিক করা
- ISO/IEC 27001, SOC 2, PCI DSS আর GDPR আসলে কী চায়, আর evidence as code কী
- নিয়ম রেখেও দলকে দ্রুত রাখার পথ: paved road আর exception প্রক্রিয়া
১ · এক account-এ সব রাখা কেন ভেঙে পড়ে
একটি কাল্পনিক অনলাইন বাজার অ্যাপের গল্প ধরি। শুরুতে তিনজন প্রকৌশলী, একটি cloud account. Test server, production database, ছবি রাখার bucket, সব এক জায়গায়। কাজ দ্রুত চলে, কারও কোনো সমস্যা নেই।
তিন বছর পর দলে চল্লিশজন। এখন একই account-এ যা ঘটছে:
- ভুলের ঢেউ: একজন intern test পরিষ্কার করতে script চালালেন, আর একই account-এর production VM-ও মুছে গেল।
- চাবির ঝুঁকি: CI-এর একটি access key ফাঁস হলো। সেই key দিয়ে সবকিছুতে হাত দেওয়া যায়, কারণ সব একই account-এ।
- বিলের ধাঁধা: মাসের বিল $৪০,০০০. অর্থ বিভাগ জানতে চায় কোন দলের কত। কেউ বলতে পারেন না।
- সীমার লড়াই: Data দলের একটি batch job পুরো quota খেয়ে ফেলল। ঠিক তখনই production-এর autoscaling নতুন VM পেল না।
- প্রমাণের অভাব: একটি কার্ড পেমেন্ট পার্টনার জানতে চান, cardholder data কে কে ছুঁতে পারে। উত্তর দাঁড়ায় “প্রায় সবাই”।
লক্ষ করুন, এর কোনোটিই কারিগরি বাগ নয়। এগুলো কাঠামোর সমস্যা। এই কাঠামোর শাস্ত্রটিকেই বলে cloud governance: কে কী করতে পারবে, খরচ কার ঘাড়ে যাবে, কোন নিয়ম কীভাবে মানা হবে আর তার প্রমাণ কোথায় থাকবে, এসবের ব্যবস্থা।
মেসের এক ঘরে পাঁচজন থাকলে চলে যায়। কিন্তু চল্লিশজন এক ঘরে থাকলে একজনের চুলার আগুন সবার বিছানায় লাগবে, বিদ্যুৎ বিল কে কত দেবেন তা নিয়ে ঝগড়া হবে। তখন আলাদা ফ্ল্যাট লাগে: প্রতিটির আলাদা দরজা আর আলাদা মিটার। ভবনের কিছু নিয়ম সবার জন্য এক, যেমন ছাদে আগুন জ্বালানো মানা। Multi-account নকশা হলো ঠিক এই ভবন।
Multi-account কৌশলের মূল যুক্তি হলো blast radius ছোট রাখা। পর্ব ৫-এ zone আর region দিয়ে যন্ত্রের ব্যর্থতার পরিধি কমিয়েছিলাম। Account একই কাজ করে মানুষের ভুল, চুরি যাওয়া পরিচয় আর খরচের জন্য। এক account-এর ভেতরে IAM দিয়েও ভাগ করা যায়, কিন্তু সেটি একই ঘরের ভেতরে পর্দা টানার মতো। একটি ভুল policy পর্দা সরিয়ে দিতে পারে। অন্য account থেকে ঢুকতে হলে স্পষ্ট অনুমতি লাগে, সেটি দেয়ালে দরজা কাটার মতো।
নিরাপত্তা: এক account-এর পরিচয় অন্য account-এ নিজে থেকে কিছু পায় না। Quota: অনেক সীমা account আর region ধরে গোনা হয়, তাই এক দল অন্য দলের ভাগ খায় না। খরচ: বিল account ধরে আলাদা আসে, tag ছাড়াই। Audit: Compliance-এর আওতা ছোট রাখা যায়। তবে ফাঁকা ভাববেন না, দাম আছে। অনেক account মানে বেশি network জোড়া (পর্ব ২৮), বেশি পরিচয় আর বেশি automation.
২ · Account-এর গাছ — organization, OU, subscription, project
অনেক account থাকলে তাদের একটি মালিকানার গাছে সাজানো হয়। ওপরে থাকে organization, যার নিচে দলে দলে account. গাছের ওপরের ডালে কোনো নিয়ম বসালে তা নিচের সব ডালে নামে। একে বলে resource hierarchy. এতে একশো account-এ আলাদা করে একই নিয়ম বসাতে হয় না।
নিচের ছবিটি একটি প্রচলিত নকশা। নাম আর আকার প্রতিষ্ঠানভেদে বদলায়, ভাবনাটি মোটামুটি এক।
একটি organization-এর গাছ
Root, OUs and the core accounts
প্রতিটি account-এর কাজ আলাদা:
| Account | কী থাকে | কারা ঢোকেন |
|---|---|---|
| Management (root) | গাছ আর বিল। কোনো workload নয় | খুব অল্প কয়েকজন, MFA সহ |
| Security | নিরাপত্তা টুল, সব account-এর finding দেখার জায়গা | নিরাপত্তা দল |
| Log archive | সব audit log, পরিবর্তন আটকানো storage-এ | প্রায় কেউ না, পড়ার অধিকার সীমিত |
| Shared | DNS, image registry, CI runner, transit hub | Platform দল |
| Dev / Staging | পরীক্ষা, ফাঁকা ডেটা | Developer-রা, বেশি স্বাধীনতায় |
| Prod | আসল ব্যবহারকারী, আসল ডেটা | সাধারণত pipeline, মানুষ সীমিত সময়ের জন্য |
| Sandbox | শেখা আর খেলা, খরচের কড়া সীমা | ব্যক্তি বা দল, আসল ডেটা থেকে দূরে |
প্রথম সতর্কতা: management account-এ কিছু চালাবেন না। AWS-এ SCP management account-এর ওপর খাটে না, তাই সেখানে workload রাখা মানে সবচেয়ে ক্ষমতাবান জায়গাটিই সবচেয়ে কম পাহারায় রাখা।
তিন provider-এ একই ভাবনা
| ধারণা | AWS | Azure | Google Cloud |
|---|---|---|---|
| সর্বোচ্চ ধারক | Organization (root) | Tenant root group | Organization |
| মাঝের দল | OU | Management group | Folder |
| নিরাপত্তা ও বিলের একক | Account | Subscription | Project |
| ছোট দল | নেই (tag দিয়ে) | Resource group | নেই (label দিয়ে) |
| প্রতিরোধের নিয়ম | SCP | Azure Policy | Organization Policy |
এক-এক করে মিলিয়ে নেওয়া পুরো নিখুঁত নয়। Google Cloud-এ IAM-ও গাছ বেয়ে নিচে নামে, আর Azure subscription-গুলো একটি Entra ID tenant-এর ওপর ভরসা করে। ধারণাটি শিখুন, খুঁটিনাটি সেই provider-এর নথি থেকে নিন, কারণ এগুলো বদলায়।
Environment আর blast radius-এর ভাগ
কীভাবে ভাগ করবেন? সবচেয়ে প্রচলিত উত্তর দুই অক্ষে: দল আর environment. যেমন payments-dev, payments-prod. একটি environment-এর ভুল অন্যটিতে যায় না, একটি দলের ভুল অন্য দলে যায় না। PCI-এর মতো বিশেষ ডেটা থাকলে তার জন্য আলাদা account, যাতে অডিটের আওতা সেখানেই সীমিত থাকে। এখানে সীমাও আছে। প্রতিটি microservice-এ একটি করে account নিলে network আর পরিচয়ের জঞ্জাল বাড়ে। মোটামুটি নিয়ম: account-এর দেয়াল ততটুকুই টানুন, যতটুকু আলাদা মালিক, আলাদা ঝুঁকি বা আলাদা খরচের হিসাব চায়। পর্ব ৭-এর Conway-র কথাটি এখানেও খাটে: account-এর সীমা প্রায়ই দলের সীমার ছায়া।
৩ · Landing zone আর account vending
একটি আবাসিক প্রকল্পে প্লট কিনলে রাস্তা, পানি, গ্যাস আর বিদ্যুতের লাইন আগেই পৌঁছে থাকে। আপনি শুধু বাড়ি বানান। প্রকল্পের নিয়মও আগে থেকে ঠিক করা: কতটুকু জায়গা ছাড়তে হবে, কোথায় বর্জ্য যাবে। Landing zone হলো cloud-এর এই প্রস্তুত প্রকল্প।
Landing zone হলো কোড দিয়ে বানানো একটি প্রস্তুত multi-account পরিবেশ: organization-এর গাছ, পরিচয়, log, guardrail, network আর budget, সব শুরু থেকেই ঠিক করা। AWS Control Tower, Azure landing zones আর Google Cloud-এর enterprise foundations blueprint এই ভাবনার তিনটি উদাহরণ। অনেকে Terraform দিয়ে নিজের মতো বানান। কোনোটি অপরিহার্য নয়, ভাবনাটিই আসল।
Landing zone থাকলে নতুন account বানানো একটি যান্ত্রিক কাজ হয়ে যায়। একে বলে account vending: ভেন্ডিং মেশিনে টাকা দিলে যেমন নির্দিষ্ট প্যাকেট বের হয়, তেমনি একটি অনুরোধ দিলে নিয়ম মানা account বের হয়। হাতে বানালে প্রতিটি account একটু আলাদা হয়, কিছু log বন্ধ থাকে, কেউ network ভুলে যান। একই জিনিস একশোবার হাতে করলে drift অবধারিত।
অনুরোধটি সাধারণত Git-এ একটি ছোট ফাইল। নিচের YAML একটি কাল্পনিক বিন্যাস, কোনো নির্দিষ্ট টুলের নয়:
account: payments-prod
ou: workloads/prod
owner_team: payments
owner_email: payments-lead@example.com
cost_center: cc-4102
data_class: confidential
budget_usd_monthly: 800
regions:
- ap-south-1
- ap-southeast-1
vpc:
size: /20
connect_to_hub: trueএবার এই অনুরোধ থেকে একটি account জন্ম নেওয়ার পথ দেখুন। Payments দলের জন্য নতুন production account লাগবে:
- অনুরোধ
Git PRছোট YAML - যাচাই
policyনিয়ম ও অনুমোদন - তৈরি
OU-তেগাছে বসল - Baseline
IaClog, network, budget - হস্তান্তর
SSOদল ঢুকল
| অবস্থা | |
| Guardrail | |
| Audit log | |
| Network | |
| Budget | |
| দলের প্রবেশ |
- অনুরোধ। দলনেতা YAML ফাইলে নাম, OU, মালিক, cost center আর budget লিখে Pull Request খুললেন। কথাটি কোনো চ্যাটে হারিয়ে যায় না, ইতিহাস Git-এ থাকে।
- যাচাই। Pipeline দেখে নিল: নাম নিয়মমাফিক, OU আছে, মালিকের ঠিকানা আসল, region অনুমোদিত, budget ফাঁকা নয়। তারপর platform দলের একজন আর অর্থ বিভাগের একজন অনুমোদন দিলেন।
- তৈরি। Automation account বানিয়ে সরাসরি
workloads/prod-এ বসাল। ওপর থেকে ৪টি guardrail সঙ্গে সঙ্গে পেল: root থেকে ২টি (region সীমা, log বন্ধ করা নিষেধ), Workloads থেকে ১টি (tag), Prod থেকে ১টি (public storage নিষেধ)। - আগে নিয়ম, পরে সব। এই ক্রমটি ইচ্ছাকৃত। Guardrail কার্যকর হওয়ার পরেই বাকি কাজ শুরু। তাই একটি মুহূর্তের জন্যও account খোলা মাঠ হয়ে থাকে না। দলের কেউ এখনো ঢুকতে পারেন না।
- Baseline. IaC বসাল: audit log Log archive-এ পাঠানো, detective নিয়ম চালু, ঠিকানা পরিকল্পনা থেকে একটি
/20VPC আর hub-এ জোড়া, $800 budget-এ ৫০, ৮০ আর ১০০% সতর্কতা। মানে $৪০০, $৬৪০ আর $৮০০-তে খবর যাবে। - হস্তান্তর। দল এখন নিজের পরিচয় দিয়ে SSO-তে ঢুকে একটি role নেন। স্থায়ী access key বা root password কেউ পান না। পুরো পথে একজন মানুষও console-এ হাতে কিছু বদলাননি।
Account মোছা তৈরির চেয়ে কঠিন। মালিক ছাড়া account পড়ে থাকলে খরচ আর ঝুঁকি দুটোই বাড়ে। তাই vending-এর সঙ্গে closing-এর প্রক্রিয়াও রাখুন: মালিক দল উঠে গেলে কে দায়িত্ব নেবেন, ডেটা কোথায় যাবে, মুছলে provider কতদিন পরে তা চূড়ান্ত করে, এসব নথিতে দেখে নিন। নিজে চেষ্টা করতে চাইলে organization-এর কাজে আসল টাকা খরচ হতে পারে, তাই বিল আর পরিষ্কারের দায়িত্ব মাথায় রাখুন।
৪ · Guardrail — আগে আটকানো, পরে ধরা
ফ্লাইওভারের পাশের রেলিং গাড়ি চালায় না, শুধু গাড়িকে পড়ে যাওয়া থেকে বাঁচায়। Guardrail তেমনি কাউকে কিছু করার অনুমতি দেয় না, শুধু একটি সীমা টানে যার বাইরে কেউ যেতে পারবেন না। Developer-এর admin অধিকার থাকলেও সেই সীমা থাকে।
Preventive — আগেই আটকায়
নিষিদ্ধ কাজ ঘটতেই পারে না। Region-এর বাইরে VM চাইলে API ফিরিয়ে দেয়। শক্ত, কিন্তু ভুল নিয়ম মানে কাজ থেমে যাওয়া।
রেলগেটের বারDetective — পরে ধরে
কাজ ঘটতে দেয়, তারপর তালিকায় তোলে। নরম, দ্রুত চালু করা যায়, কিন্তু ক্ষতি ঘটে যেতে পারে।
ট্রাফিক ক্যামেরাAuto-remediation — নিজে ঠিক করে
ধরা পড়লে script নিজেই ঠিক করে, যেমন public bucket বন্ধ করা। ভুল হলে নিজেই outage বানাতে পারে।
স্বয়ংক্রিয় ব্যারিয়ারএকটি পরিবর্তনের পথে চারটি পাহারা
Where controls sit, earliest is cheapest
- Pipeline
policy checkmerge-এর আগে - API
guardrailতৈরির মুহূর্তে - চলমান
detectiveতৈরির পরে - সংশোধন
auto-fixদলকে খবর
একটি SCP দেখতে কেমন
AWS-এর SCP দিয়ে উদাহরণ দিই। Azure Policy আর Google-এর Organization Policy একই লক্ষ্যে কাজ করে, লেখার ধরন আলাদা। JSON-এর গঠন IAM policy-র মতো। নিয়ম মূল্যায়নের পুরো হিসাব পর্ব ৩২-এ।
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyOutsideAllowedRegions",
"Effect": "Deny",
"NotAction": ["iam:*", "organizations:*", "route53:*", "cloudfront:*", "support:*", "sts:*"],
"Resource": "*",
"Condition": {
"StringNotEquals": { "aws:RequestedRegion": ["ap-south-1", "ap-southeast-1"] }
}
},
{
"Sid": "DenyInstanceWithoutTeamTag",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": { "Null": { "aws:RequestTag/team": "true" } }
}
]
}প্রথম নিয়মটি পড়ুন: অনুরোধের region তালিকায় না থাকলে সব কাজ নিষেধ, শুধু NotAction-এর কাজগুলো বাদে। ওই বাদের তালিকাটি জরুরি। IAM আর DNS-এর মতো global service-এর API একটি নির্দিষ্ট region দিয়ে যায়। তালিকা না দিলে region নিয়মে এগুলোও আটকে যাবে, আর হঠাৎ দেখবেন লগইনের কাজেও সমস্যা হচ্ছে। দ্বিতীয় নিয়মটি বলছে, team tag ছাড়া VM তৈরির অনুরোধ নিষেধ। বাদের তালিকাটি এখানে শুধু নমুনা। আপনার ব্যবহৃত service অনুযায়ী তা যাচাই করতে হবে, AWS-এর হালনাগাদ উদাহরণ দেখে।
| কাজ | AWS | Azure | Google Cloud |
|---|---|---|---|
| Region সীমা | SCP, aws:RequestedRegion | Azure Policy, Allowed locations (deny) | Org Policy, gcp.resourceLocations |
| Tag বাধ্য করা | SCP, tag policy | Azure Policy, require a tag | Label নিয়ম সীমিত, প্রায়ই pipeline বা custom constraint-এ |
| Detective | AWS Config rule | Azure Policy (audit) | Security Command Center |
| চালু করার আগে দেখা | আলাদা test OU-তে পরীক্ষা | Enforcement mode বন্ধ রেখে | Dry-run mode, সব constraint-এ নয় |
এবার একটি ছোট evaluator চালিয়ে দেখুন। OU-র গাছ ধরে নিয়ম সংগ্রহ হয়, প্রতিটি প্রস্তাবিত কাজ পরীক্ষা হয়, আর শেষে IAM-এর উত্তরও লাগে।
// Guardrail evaluator: walk from the account's OU up to the root.
// A guardrail can only deny. IAM must still allow the action.
const above = { prod: 'workloads', dev: 'workloads', workloads: 'root', sandbox: 'root', root: null };
const chain = ou => (ou ? [ou, ...chain(above[ou])] : []);
const okRegion = ['ap-south-1', 'ap-southeast-1'];
const rules = [
{ id: 'deny-region', at: 'root', mode: 'deny', hit: a => !okRegion.includes(a.region) },
{ id: 'require-tags', at: 'workloads', mode: 'deny', hit: a => !(a.tags.includes('team') && a.tags.includes('env')) },
{ id: 'no-public', at: 'prod', mode: 'deny', hit: a => a.public === true },
{ id: 'big-vm-note', at: 'dev', mode: 'detect', hit: a => (a.vcpu || 0) > 16 },
];
const both = ['team', 'env'];
const proposed = [
{ what: 'vm-a', ou: 'dev', region: 'ap-south-1', tags: both, iam: true },
{ what: 'vm-b', ou: 'dev', region: 'us-east-1', tags: both, iam: true },
{ what: 'vm-c', ou: 'prod', region: 'ap-southeast-1', tags: ['team'], iam: true },
{ what: 'bucket-d', ou: 'prod', region: 'ap-south-1', tags: both, iam: true, public: true },
{ what: 'vm-e', ou: 'dev', region: 'ap-south-1', tags: both, iam: true, vcpu: 32 },
{ what: 'vm-f', ou: 'sandbox', region: 'ap-south-1', tags: [], iam: true },
{ what: 'vm-g', ou: 'prod', region: 'ap-south-1', tags: both, iam: false },
];
for (const a of proposed) {
const hits = rules.filter(r => chain(a.ou).includes(r.at) && r.hit(a));
const deny = hits.find(r => r.mode === 'deny');
const notes = hits.filter(r => r.mode === 'detect').map(r => r.id);
const verdict = deny ? `DENY by ${deny.id} (set at ${deny.at})`
: !a.iam ? 'DENY no IAM allow'
: 'ALLOW' + (notes.length ? `, finding: ${notes}` : '');
console.log(a.what.padEnd(9), a.ou.padEnd(8), verdict);
}তিনটি লাইনে আসল শিক্ষা। vm-b dev DENY by deny-region (set at root): নিয়মটি root-এ বসানো, কিন্তু dev পর্যন্ত নেমে এসেছে। vm-e dev ALLOW, finding: big-vm-note: detective নিয়ম কাজ থামায় না, শুধু খবর লেখে। আর vm-g prod DENY no IAM allow: সব guardrail পার হলেও IAM অনুমতি না দিলে কাজ হয় না।
vm-f sandbox ALLOW দেখুন। Tag ছাড়াই পাস, কারণ require-tags বসানো Workloads-এ, আর sandbox সেই ডালে নেই। নিয়ম কোথায় বসালেন, সেটিই ঠিক করে কোথায় খাটবে।
এবার একই ঘটনা ধাপে ধাপে দেখি, যেমনটি একজন developer দেখেন। AI-এর দেওয়া একটি Terraform snippet-এ region রয়ে গেছে us-east-1:
| অনুরোধ | |
| IAM | |
| Guardrail | |
| ফল | |
| Audit log | |
| খরচ |
- Plan সবুজ।
terraform planশুধু হিসাব করে কী বদলাবে। সে VM তৈরির API ডাকে না, তাই SCP তার চোখে পড়ে না। সবুজ plan মানে guardrail পার হওয়া নয়। - Apply. এবার আসল API অনুরোধ control plane-এ পৌঁছাল। Provider আগে দেখল অনুরোধটি কে পাঠিয়েছেন, আর signature ঠিক আছে।
- IAM বলছে হ্যাঁ।
dev-deployerrole-এর policy-তে VM তৈরির allow আছে। এক account-এর নিজের সীমায় কাজটি বৈধ। - Guardrail বলছে না। OU-র গাছ থেকে নামা
deny-regionমিলে গেল। স্পষ্ট Deny সবসময় Allow-কে হারায়। বোঝার সুবিধায় এখানে একটির পর একটি দেখালাম; যে ক্রমেই দেখা হোক, ফল একই। Developer-এর admin অধিকার থাকলেও ফল বদলাত না। - কিছুই তৈরি হলো না। Error-এর লেখায় থাকে
explicit deny in a service control policy. VM নেই, খরচ নেই। ব্যর্থ চেষ্টাটি audit log-এ উঠল, যা পরে নিরাপত্তা দল দেখতে পারেন। - সমাধান। Developer region বদলে
ap-south-1করলেন। IAM হ্যাঁ, কোনো Deny নেই, VM তৈরি হলো। ভালো platform এই error-এর সঙ্গে একটি লিংক দেয়, কেন নিয়মটি আছে আর exception কীভাবে চাইবেন।
Guardrail-ই পুরো organization-কে থামিয়ে দিতে পারে। Root-এ একটি ভুল Deny মানে হাজারটি pipeline একসঙ্গে ব্যর্থ। তাই ক্রমটি মানুন: আগে detective রূপে চালিয়ে দেখুন কতটি কাজ আটকাবে, তারপর sandbox OU, তারপর dev, শেষে prod. পরিবর্তনটি Git আর code review-এর মধ্য দিয়ে যাক। আর একটি জরুরি পথ রাখুন, break-glass পরিচয়, যার প্রতিটি ব্যবহারে alert যায়।
৫ · Log আর security account — প্রমাণ যেন মোছা না যায়
কোনো অনুপ্রবেশকারী prod account-এর admin পরিচয় পেলে প্রথমে কী করবেন? পায়ের ছাপ মুছবেন। Log যদি সেই account-এই থাকে, তিনি সেটিও মুছতে পারবেন। তাই log রাখা হয় অন্য account-এ, যেখানে workload-এর পরিচয়ের কোনো লেখার বা মোছার অধিকার নেই।
- Log archive account: সব account-এর audit log (AWS CloudTrail, Azure Activity Log, Google Cloud Audit Logs), নানা সার্ভিসের log আর flow log এখানে জমে। Storage-এ object lock বা একই ধরনের ব্যবস্থা আর স্পষ্ট retention থাকে।
- Security account: সব account-এর finding এক পর্দায় আসে। নিরাপত্তা টুলের প্রশাসন management account থেকে এখানে দেওয়া হয়। একে অনেক provider-এ delegated admin বলে।
- Guardrail দিয়ে তালা: “কেউ audit log বন্ধ করতে পারবেন না”, “log bucket-এর policy বদলানো যাবে না”, এগুলো root-এর প্রথম দিকের নিয়ম। Log বন্ধ করার ঘটনা নিজেই একটি উচ্চ-অগ্রাধিকারের alert.
এর পেছনের নীতির নাম separation of duties: যিনি কাজ করেন আর যিনি সেই কাজের হিসাব রাখেন, তাঁরা এক হবেন না। ক্যাশিয়ার নিজের হিসাব নিজে অডিট করেন না। পর্ব ৩৪-এ audit log দিয়ে সন্দেহজনক কাজ ধরা দেখেছেন, আর পর্ব ৬৪-এ log পাঠানোর পাইপলাইন আর তার খরচ আসবে। পর্ব ২৪-এর cross-account copy-ও একই যুক্তির অংশ।
৬ · Tag — কার খরচ, কার দায়
গুদামঘরে হাজার বস্তা। গায়ে লেবেল না থাকলে কোনটি কার, কেউ বলতে পারে না। পর্ব ৬-এ tag দেখেছি একটি account-এর সহায়ক হিসেবে। Organization-এর স্তরে tag হয়ে ওঠে একটি হিসাবব্যবস্থা। কয়েকটি নিয়ম:
| Tag key | মান | কে ব্যবহার করে |
|---|---|---|
team | checkout, catalog, data | খরচের ভাগ, incident-এর মালিক |
env | prod, dev | Automation, রাতে বন্ধ করা |
cost-center | cc-4102 | অর্থ বিভাগ |
data-class | public, internal, confidential | নিরাপত্তা আর audit |
expires | 2026-11-30 | Sandbox পরিষ্কার |
তালিকা ছোট রাখুন, ৪–৬টি। প্রতিটি tag-এর একটি ব্যবহারকারী থাকুক। মানের তালিকা নির্দিষ্ট করুন আর ছোট হাতের অক্ষরে রাখুন, কারণ অনেক provider-এ Checkout আর checkout আলাদা মান। এছাড়া নামের ভিন্নতা আছে: AWS আর Azure-এ এগুলো tag, Google Cloud-এ খরচের কাজে সাধারণত label, আর সেখানে tag বলতে আলাদা একটি জিনিস বোঝায় যা নিয়ম চালাতে কাজে লাগে।
Tag বাধ্য করার স্তর
- সহজ পথ: IaC module-এ ডিফল্ট tag বসান। Terraform-এর AWS provider-এ
default_tagsএমন একটি সুবিধা। মানুষ না ভাবলেও tag বসে যায়। - Pipeline: Tag না থাকলে merge হবে না। বার্তাও পরিষ্কার পাবেন।
- API guardrail: Tag ছাড়া তৈরি আটকায়। সতর্ক থাকুন, সব resource তৈরির সময় tag নেয় না, তাই সব জায়গায় Deny দিলে কাজ ভাঙতে পারে।
- Detective রিপোর্ট: সাপ্তাহিক তালিকা, দলের নামে, সবচেয়ে দামি আগে।
দুটি ফাঁদ। প্রথমত, AWS-এ tag-কে বিলে দেখতে হলে আলাদা করে cost allocation tag হিসেবে চালু করতে হয়, আর সাধারণত চালুর পরের খরচই সেভাবে আসে (অতীতের জন্য provider-ভেদে সীমিত সুবিধা থাকতে পারে)। Azure-এ resource group-এর tag নিচের resource নিজে থেকে পায় না, policy বা cost-এর সেটিং লাগে। দ্বিতীয়ত, সব খরচে tag বসে না: support, কিছু data transfer, কিছু কর ধরনের লাইন। তাই ১০০% লক্ষ্য বাস্তবসম্মত নয়।
Tag coverage আর unallocated খরচ
Tag coverage দুইভাবে গোনা হয়, resource-এর সংখ্যায় আর খরচে। খরচের হিসাবই বেশি কাজের, কারণ একশোটি ছোট snapshot-এর চেয়ে একটি দামি database বড়। যে খরচ কোনো দলের ঘাড়ে পড়ে না, তাকে বলে unallocated cost. নিচের হিসাবে দশটি resource, সব দাম ধরে নেওয়া:
// Tag coverage: a tag counts only if its value is on the allowed list.
const teams = ['checkout', 'catalog', 'data'];
const envs = ['prod', 'dev'];
const rows = `vm-web-1,checkout,prod,420
vm-web-2,Checkout,prod,420
db-main,checkout,prod,960
bucket-img,catalog,prod,130
vm-search,catalog,prod,310
vm-test-7,,dev,240
nat-gw-a,,,180
lb-old,,prod,90
vm-ml-exp,data,,520
snap-2023,,,110`.split('\n').map(line => {
const [id, team, env, usd] = line.split(',');
return { id, team, env, usd: Number(usd) };
});
const total = rows.reduce((s, r) => s + r.usd, 0);
const pct = n => (100 * n / total).toFixed(1) + '%';
const good = rows.filter(r => teams.includes(r.team) && envs.includes(r.env));
const goodUsd = good.reduce((s, r) => s + r.usd, 0);
console.log(`resources: ${rows.length}, total: $${total}`);
console.log(`fully tagged: ${good.length}/${rows.length} by count, ${pct(goodUsd)} by cost`);
const byTeam = {};
for (const r of rows) {
const key = teams.includes(r.team) ? r.team : '(unallocated)';
byTeam[key] = (byTeam[key] || 0) + r.usd;
}
console.log('\ncost by team');
for (const [k, v] of Object.entries(byTeam).sort((a, b) => b[1] - a[1])) {
console.log(` ${k.padEnd(14)} $${String(v).padStart(5)} ${pct(v)}`);
}
console.log('\nfix these first (no valid team, biggest cost)');
rows.filter(r => !teams.includes(r.team)).sort((a, b) => b.usd - a.usd)
.forEach(r => console.log(` ${r.id.padEnd(10)} $${r.usd} team="${r.team}"`));মোট $3380. fully tagged: 4/10 by count, 53.8% by cost: সংখ্যায় ৪০% হলেও খরচে ৫৩.৮%, কারণ দামি জিনিসগুলোতেই tag আছে। Unallocated বেরিয়েছে $ 1040 30.8%.
তালিকার প্রথমেই vm-web-2 $420 team="Checkout". Tag আছে, কিন্তু বড় হাতের C-এর কারণে তালিকায় মেলেনি। একটি অক্ষরের জন্য $৪২০ দলহীন। vm-ml-exp এই তালিকায় নেই, কারণ তার team ঠিক আছে: খরচ data দলে গেছে, যদিও env না থাকায় পূর্ণ-tag হিসেবে গোনা হয়নি। দুটি মাপ তাই আলাদা প্রশ্নের উত্তর দেয়।
একই কাজ server বা CI-তে টেক্সট দিয়েও হয়। Provider-এর inventory থেকে পাওয়া CSV থেকে untagged জিনিস খোঁজার একটি নমুনা, পর্ব ৯-এর হাতিয়ার দিয়ে। এখানে CSV-টি ব্লকের ভেতরেই বানানো:
#!/usr/bin/env bash
set -euo pipefail
cat > inventory.csv <<'CSV'
id,type,region,team,env,usd
i-0a1,vm,ap-south-1,checkout,prod,420
i-0a2,vm,ap-south-1,checkout,,420
db-m1,database,ap-south-1,checkout,prod,960
b-img,bucket,ap-southeast-1,catalog,prod,130
i-0c3,vm,ap-southeast-1,,dev,240
nat-1,nat,ap-south-1,,,180
lb-07,loadbalancer,ap-south-1,,prod,90
i-0d9,vm,us-east-1,data,,520
CSV
echo "== missing team or env (biggest cost first) =="
awk -F, 'NR > 1 && ($4 == "" || $5 == "")' inventory.csv |
sort -t, -k6,6nr |
awk -F, '{ printf "%-6s %-13s team=%-9s env=%-5s $%d\n", $1, $2,
($4 == "" ? "-" : $4), ($5 == "" ? "-" : $5), $6 }'
echo
echo "== cost by team =="
awk -F, 'NR > 1 { t = ($4 == "" ? "(unallocated)" : $4); c[t] += $6 }
END { for (k in c) printf "%-14s %d\n", k, c[k] }' inventory.csv |
sort -k2,2nr
echo
echo "== gate =="
awk -F, 'NR > 1 { n++; all += $6; if ($4 != "" && $5 != "") { ok++; good += $6 } }
END { p = 100 * good / all
printf "tagged: %d/%d, %.1f%% of cost\n", ok, n, p
print (p < 80 ? "FAIL: below the 80% target" : "PASS") }' inventory.csv-F, বলে কমা দিয়ে ঘর ভাগ করতে। প্রথম awk শুধু সেই সারি রাখে যাতে চতুর্থ বা পঞ্চম ঘর ফাঁকা, আর sort -t, -k6,6nr খরচের ঘর ধরে বড় থেকে ছোট সাজায়। তাই তালিকার প্রথমে i-0d9 ... team=data env=- $520. খেয়াল করুন, ওই VM-এর region us-east-1, যা একটি guardrail ধরত।
দলের হিসাবে (unallocated) 510, আর শেষে tagged: 3/8, 51.0% of cost ও FAIL: below the 80% target. CI-তে এই জায়গায় exit 1 দিলে একটি সত্যিকারের gate হবে। এখানে দেখানোর জন্য শুধু লেখা ছাপা হয়েছে।
দলভিত্তিক budget
হিসাব জানা গেলে দলকে তা দেখাতে হয়। দুটি ধাপ আছে। Showback মানে “আপনাদের খরচ এত”, শুধু দেখানো। Chargeback মানে সেই টাকা দলের বাজেট থেকে সত্যিই কাটা। শুরু করুন showback দিয়ে, কারণ tag অসম্পূর্ণ থাকলে chargeback ঝগড়া বাড়ায়। NAT বা transit hub-এর মতো ভাগের খরচ ব্যবহারের অনুপাতে ভাগ করুন, অথবা আলাদা “platform” লাইনে দেখান।
প্রতিটি account-এ একটি budget থাকুক, যেমন vending-এর $৮০০. শুধু প্রকৃত খরচে নয়, পূর্বাভাসেও সতর্কতা দিন, যাতে মাসের ১২ তারিখেই বোঝা যায় মাস শেষে কোথায় দাঁড়াবে। মনে রাখুন budget alert সাধারণত খরচ থামায় না। Sandbox-এ স্বয়ংক্রিয় ব্যবস্থা নেওয়া যায়, production-এ বন্ধ করে দিলে সেটিই outage. বিস্তারিত অঙ্ক আর FinOps-এর চর্চা পর্ব ৭৩-এ।
৭ · Quota — ঈদের আগে সীমা দেখে নেওয়া
ঈদের আগে বাসের টিকিটের ভিড়ের কথা ভাবুন। কাউন্টারে আগে থেকে যত সিট বরাদ্দ, তার বেশি বিক্রি হবে না, চাহিদা যতই হোক। বাড়তি বরাদ্দের আবেদন করতে হয়, আর সেটি ঈদের আগের রাতে করলে দেরি হয়ে যায়।
Provider প্রতিটি account-এ সীমা বসায়, এটিই quota বা service limit. কারণ দুটি: ভুল বা চুরি করা account যেন লাখ টাকার VM চালাতে না পারে, আর একজনের চাহিদা যেন অন্যের ক্ষতি না করে। সীমা দুই রকম:
- Soft limit: আবেদন করলে বাড়ে। যেমন অনেক provider-এ region প্রতি VM-এর vCPU.
- Hard limit: বাড়ে না, নকশা বদলাতে হয়। কোন সীমাটি কোন ধরনের, তা provider আর সময়ভেদে আলাদা, তাই নথি দেখে নিন।
নতুন account-এ সীমা প্রায়ই কম থাকে। এজন্যই vending-এর সময় একটি quota template রাখা ভালো। AWS-এ Service Quotas নামে সার্ভিস আছে, Azure আর Google Cloud-এও Quotas পাতা আছে। নিচে AWS CLI-এর উদাহরণ, এখানে চালানো হয়নি:
# সাধারণ on-demand VM-এর vCPU সীমা দেখা
aws service-quotas get-service-quota \
--service-code ec2 --quota-code L-1216C47A --region ap-south-1
# বাড়ানোর আবেদন (quota code, মান আর region নিজের জন্য মিলিয়ে নিন)
aws service-quotas request-service-quota-increase \
--service-code ec2 --quota-code L-1216C47A \
--desired-value 773 --region ap-south-1এবার হিসাব। একটি অনলাইন বাজার অ্যাপ ঈদের সেলের জন্য বড় হবে। আজ দিন ০, সেল দিন ১৪-তে। সেলের ৫ দিন আগে থেকে load test চালানো হবে, আর সেই test-এর জন্যও সীমা লাগবে। তাই আবেদনের শেষ দিন = ১৪ − ৫ − আবেদনে লাগা সময়। পরিকল্পিত peak-এর ওপর ২০% নিরাপত্তা রাখা হবে।
// Quota headroom check before an Eid sale. All numbers are assumed.
const SAFETY = 1.2; // keep 20% above the planned peak
const SALE_DAY = 14; // today is day 0
const TEST_DAYS = 5; // load test must start this many days before the sale
const quotas = [
{ name: 'vcpu-on-demand', limit: 320, used: 164, extra: 480, lead: 7, canRaise: true },
{ name: 'public-ip', limit: 5, used: 4, extra: 3, lead: 2, canRaise: true },
{ name: 'fn-concurrency', limit: 1000, used: 300, extra: 900, lead: 5, canRaise: true },
{ name: 'read-replicas', limit: 5, used: 1, extra: 4, lead: 3, canRaise: true },
{ name: 'targets-per-tg', limit: 120, used: 30, extra: 120, lead: 0, canRaise: false },
{ name: 'load-balancers', limit: 50, used: 6, extra: 2, lead: 0, canRaise: true },
];
for (const q of quotas) {
const peak = q.used + q.extra;
const safe = Math.ceil(peak * SAFETY);
const free = q.limit - peak;
let status = 'OK';
if (safe > q.limit) status = peak > q.limit ? 'OVER' : 'TIGHT';
let todo = '';
if (status !== 'OK') {
todo = q.canRaise
? `ask ${safe}, file by day ${SALE_DAY - TEST_DAYS - q.lead}`
: 'cannot raise: redesign';
}
console.log(`${q.name.padEnd(15)} ${String(peak).padStart(4)}/${String(q.limit).padEnd(4)} free ${String(free).padStart(4)} ${status.padEnd(5)} ${todo}`);
}প্রথম লাইনটি হাতে মিলিয়ে নিন। ব্যবহৃত ১৬৪ vCPU, বাড়তি ৪৮০, মোট peak ৬৪৪. সীমা ৩২০, অর্থাৎ ৩২৪ কম। ৬৪৪ × ১.২ = ৭৭২.৮, ওপরে নিলে ৭৭৩. আবেদনে ৭ দিন ধরলে শেষ দিন ১৪ − ৫ − ৭ = ২. আউটপুটে তাই 644/320 free -324 OVER ask 773, file by day 2. অর্থাৎ পরশুর মধ্যেই আবেদন করতে হবে।
read-replicas 5/5 free 0 TIGHT: peak ঠিক সীমায়, হাতে কিছু নেই। একটি replica বদলাতে হলেই সীমা পার। আর targets-per-tg 150/120 ... cannot raise: redesign: এটি বাড়ে না, তাই আবেদন নয়, দ্বিতীয় একটি target group বা load balancer যোগ করার নকশা লাগবে। সেটি সবচেয়ে আগে ধরা ভালো, কারণ এর সমাধানে কোড লাগে। আসল সীমা আর ধরন provider-এর নথি থেকে নিন।
Quota থাকা মানে যন্ত্র থাকা নয়। Quota হলো অনুমতি, capacity reservation হলো জায়গা ধরে রাখা। একটি zone-এ নির্দিষ্ট instance type শেষ হয়ে গেলে quota থাকলেও VM পাবেন না। বড় সেলের আগে instance type-এ বৈচিত্র্য রাখুন, প্রয়োজনে capacity ধরে রাখুন। আর quota শুধু vCPU নয়: API-র rate limit, IP, DNS query, log ingestion, সবই সীমায় ধাক্কা খেতে পারে। পর্ব ১৭-এর autoscaling-ও সীমায় পৌঁছে চুপ করে থেমে যায়, তাই ব্যবহারের ৮০%-এ একটি alert দিন।
৮ · Compliance — সহজ ভাষায় এরা কী চায়
গার্মেন্টস কারখানায় বিদেশি ক্রেতার অডিট হয়। অডিটর শুধু জিজ্ঞেস করেন না “অগ্নি-নিরাপত্তা আছে?”, তিনি মহড়ার খাতা, মেয়াদসহ অগ্নিনির্বাপক আর স্বাক্ষরিত তালিকা দেখেন। কারখানা নিরাপদ হওয়া আর তা প্রমাণ করতে পারা, দুটি আলাদা কাজ। Compliance মূলত দ্বিতীয়টি নিয়ে।
| নাম | কী ধরনের | সহজ ভাষায় কী চায় | ফল |
|---|---|---|---|
| ISO/IEC 27001 | আন্তর্জাতিক মান (সর্বশেষ বড় সংস্করণ ২০২২) | তথ্য-নিরাপত্তা পরিচালনার একটি ব্যবস্থা: ঝুঁকি চিহ্নিত করা, নিয়ন্ত্রণ বেছে নেওয়া, মাপা, উন্নত করা | স্বীকৃত সংস্থার সনদ, নির্দিষ্ট মেয়াদে পুনঃনিরীক্ষা |
| SOC 2 | AICPA-র কাঠামোয় স্বাধীন CPA-র attestation | Security বাধ্যতামূলক; availability, processing integrity, confidentiality আর privacy থেকে দরকারমতো বেছে নিয়ে নিয়ন্ত্রণ দেখানো | রিপোর্ট, সনদ নয়। Type I এক দিনের নকশা, Type II একটি সময়কালে কার্যকারিতা |
| PCI DSS | PCI SSC-র মান, কার্ড শিল্পের চুক্তিভিত্তিক শর্ত | কার্ডের নম্বর সুরক্ষা: network ভাগ, encryption, প্রবেশ নিয়ন্ত্রণ, log, পরীক্ষা | আকারভেদে স্ব-মূল্যায়ন বা বাইরের নিরীক্ষকের রিপোর্ট |
| GDPR | EU আইন, ২০১৮ সালের মে থেকে প্রযোজ্য | EU-তে থাকা মানুষের ব্যক্তিগত ডেটার বৈধ ভিত্তি, উদ্দেশ্য-সীমা, মোছার অধিকার, ফাঁস হলে দ্রুত জানানো | সনদ নয়, আইন। লঙ্ঘনে বড় জরিমানা হতে পারে |
PCI DSS-এর একটি ব্যবহারিক শিক্ষা হলো আওতা ছোট রাখা। কার্ডের নম্বর আপনার server-এ না এলে, যেমন পেমেন্ট প্রদানকারীর hosted পাতায় পাঠিয়ে শুধু token রাখলে, নিরীক্ষার পরিধি অনেক কমে। আলাদা account এই সীমাটি পরিষ্কার রাখে। GDPR-এর ক্ষেত্রে মনে রাখুন, আপনার কোম্পানি বাংলাদেশে হলেও EU-র মানুষকে পণ্য বা সেবা দিলে তা প্রযোজ্য হতে পারে। সিদ্ধান্তটি আইনজীবীর সঙ্গে আলোচনার বিষয়, প্রকৌশলীর একার নয়।
Provider-এর রিপোর্ট আর আপনার ভাগ
Provider নিজের data center আর platform-এর নিরীক্ষা করায়, আর রিপোর্টগুলো গ্রাহককে দেয়: AWS Artifact, Microsoft-এর Service Trust Portal, Google Cloud-এর Compliance Reports Manager. একটি shared compliance report থেকে আপনি ভৌত নিরাপত্তার মতো নিয়ন্ত্রণ “উত্তরাধিকারে” পান, নিজে আলাদা করে প্রমাণ দিতে হয় না। কিন্তু পর্ব ২-এর shared responsibility এখানেও খাটে। Provider-এর ISO সনদ থাকলেও আপনার খোলা bucket-এর দায় আপনারই। এসব রিপোর্ট শুধু নির্দিষ্ট service আর region-এর জন্য হয়, তাই আওতার তালিকাও মিলিয়ে নিন।
Evidence as code
পুরোনো পদ্ধতি: অডিটের আগের মাসে সবাই মিলে screenshot তোলা। সেটি ক্লান্তিকর, আর এক দিনের ছবি দিয়ে ছয় মাসের কার্যকারিতা বোঝায় না। Evidence as code মানে প্রমাণ নিজে থেকে জমা হয়, প্রতিদিন। প্রতিটি নিয়ন্ত্রণের সঙ্গে একটি স্বয়ংক্রিয় পরীক্ষা জুড়ে দেওয়া হয়, তার ফল সময়সহ পরিবর্তন-অযোগ্য storage-এ যায়।
| নিয়ন্ত্রণ | স্বয়ংক্রিয় প্রমাণ |
|---|---|
| Production-এ পরিবর্তন review ছাড়া যায় না | Git-এর branch protection আর merge-এর ইতিহাস |
| Disk আর storage encrypted | দৈনিক detective নিয়মের ফল, প্রতিটি account-এর |
| প্রাক্তন কর্মীর প্রবেশ বন্ধ হয় | HR তালিকা বনাম SSO-র তুলনার log |
| Backup পুনরুদ্ধার পরীক্ষিত | মাসিক restore test-এর pipeline রিপোর্ট |
| Audit log চালু | Log archive-এ প্রতিদিনের ফাইল গণনা |
এই ধারণার সঙ্গে policy as code-এর সম্পর্ক ঘনিষ্ঠ। নিয়ম কোডে থাকে, Git-এ review হয়, তার পরীক্ষাও লেখা যায়। পর্ব ৫৫-এ হাতে-কলমে আসবে। এবার একটি কাল্পনিক SOC 2 Type II প্রস্তুতি দেখি: ৬০টি নিয়ন্ত্রণ, ছয় মাসের সময়কাল।
| মোট নিয়ন্ত্রণ | |
| প্রমাণের উৎস | |
| পরিষ্কার পাস | |
| খোলা ফাঁক | |
| Deviation | |
| Exception |
- আওতা ঠিক করা। কোন পণ্য, কোন account, কোন Trust Services বিষয়, কোন ছয় মাস। PCI বা অন্য ব্যবসার account বাদ রাখলে কাজ ছোট হয়। ৬০টি নিয়ন্ত্রণের তালিকা হলো।
- নিয়ন্ত্রণ আর প্রমাণ জোড়া। প্রতিটির একজন মালিক আর একটি প্রমাণের উৎস ঠিক হলো। ৪২টির প্রমাণ automation থেকে আসে, ১৮টি মানুষের কাজ, যেমন ত্রৈমাসিক access review.
- প্রমাণ মেলানো। ড্যাশবোর্ড বলছে ৫৬টি পাস, ৪টিতে ফাঁক। অডিটর আসার আগেই নিজেরা ফাঁক দেখা, এটিই আসল প্রস্তুতি।
- ফাঁক বাছাই। ৪টির দুটি শুধু প্রমাণ না-পাওয়া, কাজটি ঠিকই হয়েছিল। একটি সত্যিকারের ভুল: মার্চের access review হয়নি। একটি পুরোনো VM-এর disk এখনো encrypted নয়।
- ঠিক করা। হারানো দুটি প্রমাণ পুরোনো log থেকে পাওয়া গেল, তাই পাস হলো ৫৮টি। মার্চের ভুল আর ফেরানো যায় না। এটি Type II রিপোর্টে deviation হিসেবে থাকবে, সঙ্গে কারণ আর সংশোধন। সময়কালের ভেতরের ঘটনা পরে মুছে ফেলা যায় না। বাকি রইল VM-টি।
- Exception. ওই VM ৯০ দিনের মধ্যে সরানো হবে। ততদিন isolated subnet-এ, বাড়তি নজরদারিতে। ঝুঁকির মালিক স্বাক্ষর করলেন, মেয়াদসহ খাতায় উঠল। ফলে হিসাব: ৫৮ + ১ + ১ = ৬০.
- অডিটর আসেন। তিনি সব প্রমাণ দেখেন না, নমুনা নেন: যেমন ১,২০০টি পরিবর্তনের ভেতর থেকে কয়েকটি। স্বয়ংক্রিয় প্রমাণ থাকায় উত্তর দিতে মিনিট লাগে, সপ্তাহ নয়। শেষে রিপোর্ট পান, যেখানে deviation আর তার ব্যবস্থাপনা লেখা থাকে। সৎ রিপোর্ট দুর্বল নয়।
Exception — নিয়ম ভাঙার নিয়ম
বাস্তবে সব নিয়ম সবসময় মানা যায় না। একটি পুরোনো vendor যন্ত্র হয়তো নির্দিষ্ট region-এই চলে। Exception না থাকলে মানুষ লুকিয়ে পথ খোঁজেন, যা অনেক খারাপ। একটি ভালো exception-এ পাঁচটি জিনিস থাকে: কোন নিয়ম, কেন, ঝুঁকির মালিক কে, কোন বিকল্প সুরক্ষা আছে, আর কবে মেয়াদ শেষ। মেয়াদহীন exception আসলে স্থায়ী নিয়ম বদল, শুধু নাম আলাদা। Exception-ও Git-এ রাখলে guardrail কোড নিজেই তা পড়তে পারে, আর মেয়াদ শেষে নিজে থেকে নিয়ম ফিরে আসে।
বাংলাদেশের প্রেক্ষাপট
এখানে সতর্কভাবে বলা দরকার। ব্যাংক, আর্থিক প্রতিষ্ঠান, MFS, টেলিকম, স্বাস্থ্য বা সরকারি ডেটা নিয়ে কাজ করলে নিয়ন্ত্রক সংস্থার আলাদা শর্ত থাকতে পারে। যেমন আর্থিক খাতের জন্য বাংলাদেশ ব্যাংকের ICT নিরাপত্তা-বিষয়ক নির্দেশনা আছে। সরকারের আইন-ওয়েবসাইট bdlaws.minlaw.gov.bd অনুযায়ী, ২০২৫ সালের অধ্যাদেশের জায়গায় এখন ব্যক্তিগত উপাত্ত সুরক্ষা আইন, ২০২৬ (২০২৬ সনের ৬৩ নং আইন) আর জাতীয় উপাত্ত ব্যবস্থাপনা আইন, ২০২৬ (২০২৬ সনের ৮০ নং আইন) আছে। দুটিরই তারিখ ১০ এপ্রিল ২০২৬। প্রথম আইনের কিছু ধারা পরে গেজেট প্রজ্ঞাপনে কার্যকর হওয়ার কথা, তাই এখানে কোনো বিধান উদ্ধৃত করছি না (পর্ব ৫-ও দেখুন)। কোনো পুরোনো ব্লগ বা AI-এর কথায় ধারা বা শর্ত ধরে নেবেন না, মূল লেখা পড়ুন। ডেটা দেশের ভেতরে রাখতে হবে কি না, বিদেশি cloud-এ কী অনুমতি লাগবে, তা সংশ্লিষ্ট সংস্থার সর্বশেষ নথি আর আইনজীবীর পরামর্শে ঠিক করুন। প্রকৌশলীর কাজ হলো সিদ্ধান্তটি কার্যকর করা, যেমন region guardrail দিয়ে data residency-র শর্ত মানা।
৯ · যে governance দলকে ধীর করে না — paved road
খারাপ governance-এর চেহারা সবাই চেনেন। নতুন account-এর জন্য ছয় সপ্তাহের টিকিট, প্রতি পরিবর্তনে কমিটির সভা। ফল কী? মানুষ পথ খোঁজেন: ব্যক্তিগত কার্ডে আলাদা account, অফিসের নিয়মের বাইরে shadow IT. নিয়ম যত কষ্টকর, তা এড়ানোর চেষ্টা তত বেশি।
মাঠের আলপথে হাঁটা যায়, কিন্তু কাদা, দেরি আর পড়ে যাওয়ার ভয় আছে। পাশেই পাকা রাস্তা থাকলে কাউকে জোর করতে হয় না, সবাই সেদিকেই যান। Paved road মানে নিরাপদ পথটিকেই সবচেয়ে সহজ পথ বানানো। আল বন্ধ করা হয় না, শুধু সেখানে হাঁটলে দায়টি বেশি নিজের।
- নিয়মকে কোডে নিন। মানুষের অনুমোদন শুধু উঁচু ঝুঁকির কাজে থাকুক। বাকিটা pipeline আর guardrail-এ।
- ঝুঁকি অনুযায়ী স্তর। Sandbox-এ প্রায় স্বাধীন, dev-এ মাঝারি, prod-এ কড়া। সব জায়গায় prod-এর নিয়ম মানে সবার শেখা বন্ধ।
- ব্যর্থ হলে পথ দেখান। “AccessDenied”-এর সঙ্গে কারণ, সঠিক পথ আর exception-এর লিংক দিন।
- Template আগে দিন। Module, pipeline আর account vending তৈরি থাকলে সঠিক কাজটি লিখতেই হয় না। পর্ব ৬২-তে এটিকেই golden path আর platform হিসেবে দেখব।
- Governance-কেও মাপুন। নতুন account পেতে কত সময় লাগে, কতগুলো exception খোলা, কত % guardrail detective থেকে preventive হলো, unallocated কত। নতুন account যদি এক ঘণ্টায় আসে আর detective finding কমতে থাকে, তাহলে আপনি ঠিক পথে।
Paved road দেখায় কোথায় সহজে যাওয়া যায়।
আরও গভীরে: AWS-এর “Organizing Your AWS Environment Using Multiple Accounts” whitepaper, Microsoft-এর Cloud Adoption Framework আর Google-এর enterprise foundations blueprint-এ এই নকশাগুলো বিস্তারে আছে। মাপকাঠি হিসেবে CIS Benchmarks, NIST SP 800-53 আর Cloud Security Alliance-এর Cloud Controls Matrix-ও প্রচলিত। SCP সর্বোচ্চ সীমা টানে, অধিকার দেয় না; AWS-এ পরে resource-কেন্দ্রিক resource control policy-ও এসেছে। Open Policy Agent-এর মতো টুল একই নিয়ম pipeline, Kubernetes আর API-তে চালায়। খুঁটিনাটি সংস্করণভেদে বদলায়, তাই সর্বশেষ নথি দেখুন।
পরীক্ষা ও ইন্টারভিউতে:
- IAM থাকতে আলাদা account কেন? Account শক্ত নিরাপত্তা, quota আর বিলের সীমা; IAM-এর ভুল সেই দেয়াল পেরোয় না।
- SCP কি অনুমতি দেয়? না। সর্বোচ্চ সীমা টানে; কাজের জন্য IAM-এর allow-ও লাগে, আর স্পষ্ট Deny সবসময় জেতে।
- Preventive বনাম detective? প্রথমটি কাজ ঘটার আগে আটকায়, দ্বিতীয়টি পরে শনাক্ত করে। নতুন নিয়ম detective-এ শুরু করা নিরাপদ।
- SOC 2 Type I আর II-র পার্থক্য? Type I একটি দিনের নকশা, Type II একটি সময়কাল জুড়ে কার্যকারিতা।
- Quota থাকলেই কি VM পাবেন? না। Quota অনুমতি, capacity আলাদা; zone-এ ধরন ফুরিয়ে গেলে তৈরি ব্যর্থ হতে পারে।
১০ · AI-এর যুগে governance
AI খুব দ্রুত SCP, Azure Policy বা Terraform লিখে দেয়। Governance-এর কোডের ভুল কিন্তু অন্য কোডের মতো নয়: একটি ভুল নিয়ম একসঙ্গে সব account-এ লাগে। AI-এর ভুলগুলো চিনে রাখুন:
| AI যা প্রায়ই করে | বিপদ | যাচাই |
|---|---|---|
"Action": "*" দিয়ে region Deny | IAM, SSO-র মতো global কাজ আটকে যায় | Provider-এর হালনাগাদ উদাহরণ, test OU |
Exception-এ * অনুমতি, 0.0.0.0/0 খোলা, storage public | Guardrail থাকার অর্থই থাকে না | Least privilege, policy check |
| অস্তিত্বহীন condition key, flag বা quota code | নিয়ম চুপচাপ কাজ করে না, বা ভুল সীমা | সরকারি নথিতে প্রতিটি নাম মেলানো |
Key বা token সরাসরি কোডে, latest tag, বাদ পড়া API version | ফাঁস, আর হঠাৎ ভাঙা | Secret scan, version pin |
| পুরোনো আইনের ধারা বা বানানো clause উদ্ধৃতি | ভুল সিদ্ধান্ত, আইনি ঝুঁকি | মূল আইন, নিরীক্ষক, আইনজীবী |
| Quota বা budget ভুলে যাওয়া, খরচের হিসাব নেই | Deploy থেমে যায়, বিল বাড়ে | Quota check, budget alert |
terraform destroy, kubectl delete, rm -rf, সতর্কতা ছাড়া | Shared account-এ বড় ক্ষতি | plan, --dry-run, diff পড়া |
AI-কে নিয়ম লিখতে বলার সময় কাজটি যাচাইয়ের দিকে ঘুরিয়ে দিন। আসল account id, key বা কোম্পানির গোপন নাম কখনো prompt-এ দেবেন না:
AI-এর লেখা governance কোড চালুর আগে
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।
প্র ০১একটি account-এ সব রাখলে সবচেয়ে খারাপ কী হতে পারে? এর কোনো বাস্তব উদাহরণ আছে?
সবচেয়ে পরিচিত উদাহরণগুলোর একটি Code Spaces নামের একটি code-hosting কোম্পানি। প্রকাশিত বিবরণ অনুযায়ী, ২০১৪ সালের জুনে তাদের ওপর DDoS আক্রমণের সঙ্গে টাকা দাবি আসে। আক্রমণকারী তাদের cloud control panel-এর পরিচয় পেয়ে গিয়েছিলেন। কোম্পানি তা আটকানোর চেষ্টা করলে তিনি VM, storage আর backup-এর বড় অংশ মুছে দেন। অল্প সময়ের মধ্যেই কোম্পানিটি জানায়, তারা আর ব্যবসা চালাতে পারছে না।
এখানে কারিগরি শিক্ষা হলো, backup ছিল, কিন্তু একই পরিচয়ের হাতের নাগালে। একটি ঘরে সব ডিম, আর সেই ঘরের একটিই চাবি। Provider-এর একাধিক zone এই ঝুঁকিকে ঠেকায় না, কারণ সমস্যাটি হার্ডওয়্যারের নয়, পরিচয়ের। Delete করার API সব zone-এ একসঙ্গে কাজ করে।
এখন কী কী ভিন্ন হলে বিপর্যয় ছোট হতো? Backup আলাদা account-এ থাকলে, যেখানে production-এর পরিচয়ের মোছার অধিকার নেই। সেখানে object lock থাকলে মালিকও মেয়াদের আগে মুছতে পারতেন না। Root পরিচয়ে শক্ত MFA থাকলে চুরিই কঠিন হতো। Audit log অন্য account-এ গেলে তদন্তে সুবিধা হতো। এই প্রতিটি ব্যবস্থাই ইতিমধ্যে প্রচলিত ছিল বা পরে প্রচলিত হয়, কিন্তু সব একসঙ্গে পেতে হলে একটি নকশা লাগে, যা ছোট কোম্পানিগুলো প্রায়ই পরে করবে ভেবে ফেলে রাখে।
ছোট দলের জন্য কি এটি বাড়াবাড়ি? শুরুতে গাছ বড় হওয়ার দরকার নেই। তিনটি account-ও যথেষ্ট কাজের: workload, log আর backup. খরচ প্রায় নেই, লাভ বিশাল। আর যে দিন আপনার কাছে কোনো গ্রাহকের আসল ডেটা এল, সেদিনই দেয়াল তোলার সঠিক সময়।
মূল উপলব্ধি: Availability zone যন্ত্রের ব্যর্থতা থেকে বাঁচায়। Account-এর দেয়াল বাঁচায় মানুষের ভুল আর চুরি যাওয়া পরিচয় থেকে। দুটিকে এক ভাবা মানেই একটি বড় ফাঁক রেখে দেওয়া।
প্র ০২Compliance সনদ থাকলেই কি প্রতিষ্ঠানটি নিরাপদ? তাহলে অডিট করে লাভ কী?
না, compliance আর security এক নয়। সবচেয়ে আলোচিত উদাহরণ ২০১৩ সালের শেষে যুক্তরাষ্ট্রের খুচরা বিক্রেতা Target-এর ডেটা চুরি, যেখানে কয়েক কোটি কার্ডের তথ্য বেহাত হয়। প্রকাশিত বক্তব্য অনুযায়ী, কোম্পানিটি ওই বছরই PCI DSS-এর নিরীক্ষা পেরিয়েছিল। তাদের নিরাপত্তা টুল থেকে সতর্কবার্তা এসেছিল বলেও পরে জানা যায়, কিন্তু সময়মতো কাজ হয়নি।
কেন এমন হয়? অডিট একটি নমুনা দেখে, একটি নির্দিষ্ট আওতা আর সময়ের। আক্রমণকারী আওতা মানেন না। Compliance একটি ন্যূনতম তালিকা। মান পূরণের পরেও নতুন ঝুঁকি আসে, মানুষ ভুল করেন, আর সবচেয়ে বিপজ্জনক হলো “চেকলিস্ট মানসিকতা”, যেখানে লক্ষ্য হয়ে যায় অডিট পেরোনো, নিরাপদ হওয়া নয়। SOC 2 রিপোর্টও এই কারণে পুরোটা পড়তে হয়: আওতার বাইরে কী আছে, কোন deviation লেখা, আর গ্রাহকের কী কী দায়িত্ব বলা হয়েছে।
তাহলে কি অডিট অর্থহীন? একদমই নয়। তিনটি বড় লাভ আছে। প্রথমত, এটি একটি বাইরের চাপ, যা access review বা backup পরীক্ষার মতো “পরে করব” কাজগুলো সময়মতো করায়। দ্বিতীয়ত, এটি একটি সাধারণ ভাষা। প্রতিটি গ্রাহক আলাদা করে আপনার নিরাপত্তা প্রশ্নমালা পাঠানোর বদলে একটি রিপোর্ট দেখেন। তৃতীয়ত, অনেক ব্যবসা ছাড়া এটি না থাকলে বিক্রিই হয় না: বড় ব্যাংক বা বিদেশি গ্রাহক SOC 2 বা ISO 27001 ছাড়া চুক্তি নাও করতে পারেন।
সঠিক ক্রম হলো ঝুঁকি থেকে নিয়ন্ত্রণ, তারপর প্রমাণ। আগে ভাবুন আপনার প্রকৃত ঝুঁকি কী, সে অনুযায়ী নিয়ন্ত্রণ বসান, তারপর দেখুন সেগুলো মান পূরণ করে কি না। উল্টো পথে গেলে কাগজ জমে, নিরাপত্তা বাড়ে না।
মূল উপলব্ধি: Compliance হলো মেঝে, ছাদ নয়। এটি বলে আপনি ন্যূনতম কাজটি করেছেন আর প্রমাণ দিতে পারেন। নিরাপদ থাকা একটি চলমান কাজ, যা অডিটের দিনে শেষ হয় না।
প্র ০৩সব নিয়ম preventive করে দিলেই তো হয়। Detective নিয়ম রাখার দরকার কী?
শুনতে যুক্তিসংগত, কিন্তু বাস্তবে প্রতিটি কড়া নিয়মের একটি দাম আছে। এই দামের চারটি দিক বুঝে নেওয়া দরকার।
- Blast radius উল্টে যায়। Preventive নিয়ম হলো একটি কেন্দ্রীয় পরিবর্তন, যা শত শত account-এ একসঙ্গে লাগে। ভুল হলে outage আপনিই বানালেন। Region Deny-তে global service-এর ব্যতিক্রম না দিলে SSO বা IAM-এর কাজ আটকে যেতে পারে, ঠিক ঘটনার সময়েই।
- সব কিছু আগে থেকে বলা যায় না। “এই ফাইলে আসল গ্রাহকের ডেটা আছে” বা “এই IAM অধিকার ৯০ দিন ব্যবহার হয়নি”, এগুলো API call-এর মুহূর্তে জানা যায় না। ঘটনা জমার পরেই ধরা সম্ভব। Identity ব্যবহারের হিসাব, অনিয়মিত আচরণ, এগুলো স্বভাবে detective.
- ঝুঁকি জমে ওঠে যোগফলে। অনেক ঝুঁকি একটি কাজ থেকে নয়, কয়েকটি বৈধ কাজের যোগফল থেকে আসে। প্রতিটি কাজ আলাদাভাবে নিয়ম মানলেও মিলিয়ে একটি পথ খুলে যেতে পারে। একটি নিয়ম সেটি একবারে দেখতে পায় না।
- মানুষের আচরণ। খুব কড়া নিয়ম shadow IT তৈরি করে। আবার নতুন নিয়মের প্রভাব জানার একমাত্র ভালো উপায় হলো আগে detective রূপে চালিয়ে দেখা, কতগুলো সত্যিকারের কাজ আটকাত।
উল্টোভাবে, শুধু detective-ও যথেষ্ট নয়। Public bucket এক মিনিট খোলা থাকলেও crawler তা পেতে পারে। Finding-এর তালিকা জমে গেলে কেউ পড়েন না, যাকে alert fatigue বলে। তাই সাধারণ নীতি হলো: যা কখনোই ঠিক নয় (log বন্ধ করা, root ব্যবহার, অননুমোদিত region), তা preventive. যা প্রসঙ্গনির্ভর, তা detective, সঙ্গে স্পষ্ট মালিক আর সময়সীমা। আর নিরাপদ সংশোধন থাকলে auto-remediation, সতর্কতার সঙ্গে। AWS Control Tower-ও তার নিয়ন্ত্রণগুলোকে preventive, detective আর proactive ভাগে দেখায়, যা এই বিভাজনের একটি বাস্তব রূপ।
মূল উপলব্ধি: Preventive আর detective প্রতিদ্বন্দ্বী নয়, একই নিয়মের দুটি জীবনধাপ। নিয়ম জন্ম নেয় detective হয়ে, আস্থা পেলে preventive হয়।
প্র ০৪Region guardrail দিয়ে ডেটা Singapore-এ রাখলেই কি data residency-র আইনি দায় মিটে যায়?
না, আর এই প্রশ্নে প্রকৌশলীরা প্রায়ই সরল উত্তর দিয়ে ফেলেন। Region guardrail শুধু বলে নতুন resource কোথায় তৈরি হবে। এতে তিনটি ফাঁক থাকে।
প্রথম, ডেটা কি শুধু region-এই থাকে? কিছু global service-এর control plane, metadata, log, CDN cache, support-এর ticket-এ দেওয়া ফাইল, বাইরের SaaS monitoring, এগুলো অন্য দেশে যেতে পারে। Backup-এর cross-region কপি নিজেই একটি স্থানান্তর। তাই পুরো ডেটা-প্রবাহের মানচিত্র লাগে।
দ্বিতীয়, আইন শুধু ভূগোল দেখে না। ইউরোপের ঘটনাটি শিক্ষণীয়। জুলাই ২০২০-এ EU-র শীর্ষ আদালত Schrems II মামলায় EU-US Privacy Shield বাতিল করে। আদালতের যুক্তির কেন্দ্রে ছিল যুক্তরাষ্ট্রের নজরদারি আইনের আওতায় ইউরোপীয়দের ডেটার সুরক্ষা। পরে নতুন কাঠামো এসেছে, আর তা নিয়েও বিতর্ক আছে। এছাড়া যুক্তরাষ্ট্রের ২০১৮ সালের CLOUD Act অনুযায়ী মার্কিন প্রদানকারীর কাছে থাকা ডেটা নির্দিষ্ট আইনি প্রক্রিয়ায় চাওয়া যেতে পারে, ডেটা অন্য দেশে থাকলেও। এখান থেকেই data sovereignty আর sovereign cloud-এর আলোচনা। অর্থাৎ “ডেটা কোথায়” আর “ডেটার ওপর কার আইন খাটে” আলাদা প্রশ্ন।
তৃতীয়, প্রমাণ। নিয়ন্ত্রক বা অডিটর জানতে চাইবেন, শুধু নিয়ম নয়, তা যে সবসময় মানা হয়েছে তার প্রমাণ। এখানে detective রিপোর্ট আর সময়সহ guardrail-এর ইতিহাস কাজে লাগে। Encryption-এ চাবি নিজের নিয়ন্ত্রণে রাখা (পর্ব ৩৩) অনেক ক্ষেত্রে ঝুঁকি কমায়, যদিও আইন একে কতটা স্বীকার করে তা ভিন্ন হতে পারে।
বাংলাদেশের প্রেক্ষাপটে অংশ ৮-এ নাম দেওয়া দুটি ২০২৬ সালের আইন দেখুন। নির্দিষ্ট শর্ত খাত অনুযায়ী আলাদা হতে পারে, আর কিছু ধারা এখনো কার্যকর হওয়ার অপেক্ষায়। তাই সিদ্ধান্তটি আইন ও নিয়ন্ত্রক দিক থেকে আসবে, প্রকৌশলী সেটিকে ডেটা-মানচিত্র, guardrail আর প্রমাণে রূপ দেবেন।
মূল উপলব্ধি: Region guardrail প্রয়োজনীয় একটি হাতিয়ার, কিন্তু সে আইনি উত্তর নয়। সে শুধু একটি সিদ্ধান্ত কার্যকর করে, যা অন্য কেউ নিয়েছেন।
প্র ০৫Central platform বা নিরাপত্তা দল কীভাবে “না বলার দপ্তর” হয়ে ওঠে? এটি ঠেকানোর পথ কী?
পথটি প্রায় সবসময় ভালো উদ্দেশ্য দিয়ে শুরু হয়। একটি ঘটনার পর সিদ্ধান্ত হয়, “এখন থেকে সব পরিবর্তন আমরা দেখব।” কিছুদিন চলে। দল বাড়ে, পরিবর্তন বাড়ে, কিন্তু অনুমোদনকারী সেই কয়েকজন। Queue লম্বা হয়। Lead time বেড়ে যায়, আর অনুমোদনকারীরা চাপে পড়ে ভালোভাবে না পড়েই সই করতে থাকেন, ফলে নিরাপত্তাও বাড়ে না।
এর পক্ষে গবেষণার তথ্যও আছে। Accelerate (২০১৮) বইয়ে Forsgren, Humble আর Kim লিখেছেন, বাইরের কমিটির অনুমোদন দ্রুততার সঙ্গে নেতিবাচকভাবে জড়িত, আর পরিবর্তন-ব্যর্থতার হার কমানোর সঙ্গে এর কোনো সম্পর্ক পাওয়া যায়নি। এটি জরিপভিত্তিক গবেষণার ফল, সব প্রতিষ্ঠানের জন্য চূড়ান্ত রায় নয়, কিন্তু ইঙ্গিতটি স্পষ্ট।
আরেকটি ফাঁদ হলো মাপ নিয়ে। Tag coverage ৯০% লক্ষ্য ঠিক করলেন, আর দেখলেন বহু resource-এ team=unknown. Goodhart-এর সূত্র নামে পরিচিত কথাটি এখানে খাটে: মাপ যখন লক্ষ্য হয়ে যায়, সে আর ভালো মাপ থাকে না। তাই এখানে মানের তালিকা আর খরচভিত্তিক মাপ, দুটিই লাগে।
সমাধান “নিয়ম তুলে দেওয়া” নয়, নিয়মের রূপ বদলানো। “Paved road” কথাটি Netflix-এর প্রকৌশল লেখায় জনপ্রিয় হয়, আর Spotify-র “golden path” একই ঘরানার। ভাবনাটি হলো: কেন্দ্রীয় দল সিদ্ধান্ত নেওয়া ছেড়ে পণ্য বানায়। নিরাপদ module, প্রস্তুত pipeline, এক ঘণ্টায় account. দল সেই পথে গেলে আর অনুমোদন লাগে না, কারণ নিয়ম পথের ভেতরেই। পথের বাইরে গেলে স্বাধীনতা আছে, তবে তার দায় আর পর্যালোচনা বেশি। আর দলের “গ্রাহক” হলেন developer: তাঁদের অসন্তোষ একটি অগ্রাধিকারের সংকেত।
মূল উপলব্ধি: মানুষ দিয়ে পাহারা বাড়ে যোগ করে, কোড দিয়ে পাহারা বাড়ে গুণ করে। ভালো central দলের সাফল্য মাপা হয় তাদের কতগুলো “হ্যাঁ” দরকার হলো না, তা দিয়ে।
অনুশীলন
কোনো cloud account লাগবে না। সংখ্যাগুলো কাল্পনিক, নিজে হিসাব করে তারপর উত্তর মেলান।
-
Quota আর coverage-এর হিসাব: (ক) একটি account-এ vCPU সীমা ৫০০, ব্যবহৃত ২১০. সেলে ১০০টি ৪-vCPU VM যোগ হবে। ২০% নিরাপত্তাসহ কত সীমা চাইবেন? (খ) মোট মাসিক খরচ $১২,০০০, পূর্ণ-tag করা অংশ $৯,০০০, team-সহ অংশ $১০,২০০. Tag coverage (খরচে) আর unallocated কত?
(ক) বাড়তি ১০০ × ৪ = ৪০০ vCPU. Peak = ২১০ + ৪০০ = ৬১০, যা ৫০০-র চেয়ে ১১০ বেশি। ৬১০ × ১.২ = ৭৩২, তাই ৭৩২ চাইবেন।
(খ) Coverage = ৯,০০০ ÷ ১২,০০০ = ৭৫%. Unallocated হলো যে খরচে কোনো team নেই: ১২,০০০ − ১০,২০০ = $১,৮০০, অর্থাৎ ১৫%. বাকি $১,২০০ দলের ঘাড়ে পড়েছে, তবে env-এর মতো অন্য tag ভাঙা।
-
নকশা সমালোচনা: একটি কাল্পনিক fintech স্টার্টআপ বলছে: “আমাদের একটি account. Dev আর prod আলাদা VPC-তে। Backup একই account-এর আলাদা bucket-এ। সব developer-এর admin আছে, কিন্তু সবাই বিশ্বস্ত। Audit log চালু, একই account-এ।” চারটি বড় দুর্বলতা বলুন, আর সবচেয়ে ছোট পরিবর্তনের প্রস্তাব দিন।
- VPC network ভাগ করে, পরিচয় ভাগ করে না। Admin চাবি ফাঁস হলে dev থেকেই prod মোছা যায়।
- Backup-এর ওপর একই পরিচয়ের মোছার অধিকার। Backup আর আসল ডেটা একসঙ্গে যেতে পারে।
- “বিশ্বস্ত” কোনো নিয়ন্ত্রণ নয়। ভুল আর চুরি যাওয়া key বিশ্বাস দেখে আসে না।
- Log একই account-এ, তাই প্রমাণ মোছা যায়। অডিটরকে দেখানোর মতো separation of duties নেই।
ছোট প্রস্তাব: Organization চালু করে চারটি account: prod, dev, log archive, backup. Prod-এ মানুষের স্থায়ী admin নয়, সীমিত সময়ের role. Root-এ guardrail: log বন্ধ নিষেধ, region সীমা। Backup-এ object lock. বড় landing zone এখন দরকার নেই।
-
ফল আগে বলুন: গাছটি হলো root → workloads → prod. Root-এ:
us-east-1নিষেধ (Deny). Workloads-এ:teamtag ছাড়া তৈরি নিষেধ (Deny). Prod-এ: ৮-vCPU-র বেশি VM হলে finding (detective). তিনটি অনুরোধ prod account থেকে, IAM সব ক্ষেত্রে allow করে: (ক)ap-south-1,team=pay, ৪ vCPU. (খ)ap-south-1,team=pay, ১৬ vCPU. (গ)us-east-1, tag নেই, ৪ vCPU. প্রতিটির শেষ অবস্থা কী, আর (খ)-র পরে IAM-এর allow মুছে ফেললে (ক) আবার চালালে কী হবে?- (ক) তৈরি হবে, কোনো finding নেই।
- (খ) তৈরি হবে, আর একটি finding উঠবে। Detective কাজ থামায় না।
- (গ) আটকাবে। Region আর tag, দুটি Deny-ই মেলে, একটিই যথেষ্ট। VM তৈরি হবে না, ব্যর্থ চেষ্টা audit log-এ উঠবে।
- IAM allow মোছার পর (ক): নতুন অনুরোধ আটকাবে, কারণ guardrail অনুমতি দেয় না। IAM-এ allow না থাকলে কোনো পথ নেই। আগে তৈরি VM চলতেই থাকবে, কারণ অনুমতি যাচাই হয় API call-এর সময়।
-
কমান্ডের কাজ: এই পর্বের
find_untagged.sh-এর ডেটা নিয়ে এমন একটিawkলাইন লিখুন, যা অনুমোদিত region (ap-south-1,ap-southeast-1)-এর বাইরের resource-এর id আর মাসিক খরচ ছাপায়। কোন resource আসবে?awk -F, 'NR > 1 && $3 != "ap-south-1" && $3 != "ap-southeast-1" { print $1, $6 }' inventory.csvআউটপুট হবে
i-0d9 520, কারণ একমাত্র ওই VM-এর regionus-east-1. এটি একটি detective পরীক্ষা। Guardrail আগে থাকলে সম্ভবত এই VM তৈরিই হতো না, আর guardrail চালুর আগের resource খুঁজতে এমন রিপোর্টই লাগে।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি নতুন দলের account vending-এর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- 📝 Git-এ account-এর অনুরোধ ফাইল
- ✅ স্বয়ংক্রিয় যাচাই আর অনুমোদন
- 🏗️ Account তৈরি করে সঠিক OU-তে বসানো
- 🧰 Baseline: log, network, budget
- 🔑 দলকে SSO role দিয়ে হস্তান্তর
একটি কোম্পানি dev আর prod একই cloud account-এর দুটি VPC-তে রেখেছে। Account আলাদা করলে প্রধান বাড়তি লাভ কোনটি?
- Network দুটি প্রথমবারের মতো আলাদা হবে
- VM-এর গতি বাড়বে
- পরিচয়, quota আর বিল আলাদা হয়ে blast radius ছোট হবে
- Cloud-এর খরচ সবসময় কমবে
একটি AWS account-এর একজন developer-এর IAM policy-তে সব কাজের allow আছে। Organization-এর SCP বলছে নির্দিষ্ট region-এর বাইরে Deny. তিনি সেই region-এর বাইরে VM চাইলে কী হবে?
- তৈরি হবে, কারণ IAM-এ allow আছে
- আটকাবে, কারণ স্পষ্ট Deny allow-কে হারায়
- তৈরি হবে, শুধু একটি finding উঠবে
- পুরো account বন্ধ হয়ে যাবে
মাসিক cloud খরচ $৫,০০০. এর মধ্যে $৪,২০০-তে সঠিক team tag আছে। Unallocated খরচ কত?
- $৪,২০০, অর্থাৎ ৮৪%
- $১,০০০, অর্থাৎ ২০%
- $৪০০, অর্থাৎ ৮%
- $৮০০, অর্থাৎ ১৬%
ঈদের সেলের আগে vCPU quota বাড়িয়ে ১,০০০ করা হয়েছে। সেলের দিন তবু একটি zone-এ VM তৈরি ব্যর্থ হতে পারে কেন?
- Quota শুধু অনুমতি, ওই zone-এ সেই ধরনের যন্ত্র ফুরিয়ে যেতে পারে
- Quota সেলের দিন নিজে থেকে কমে যায়
- Quota বাড়ালে সব tag মুছে যায়
- Budget alert নিজে থেকে VM তৈরি বন্ধ করে দেয়
SOC 2 Type II রিপোর্ট সম্পর্কে কোন কথাটি ঠিক?
- এটি শুধু একটি দিনের নিয়ন্ত্রণের নকশা দেখে
- এটি EU-র একটি আইন, যা সরকার সনদ হিসেবে দেয়
- এটি একটি সময়কাল জুড়ে নিয়ন্ত্রণের কার্যকারিতা নিয়ে স্বাধীন নিরীক্ষকের রিপোর্ট
- Provider-এর SOC 2 থাকলে গ্রাহকের আর কোনো দায়িত্ব থাকে না
একটি ভালো compliance exception-এ কোনটি অবশ্যই থাকা উচিত?
- স্থায়ী অনুমোদন, যাতে বারবার পর্যালোচনা না লাগে
- ঝুঁকির মালিক, বিকল্প সুরক্ষা আর মেয়াদ শেষের তারিখ
- অডিটর যেন না জানেন, সে ব্যবস্থা
- সংশ্লিষ্ট দলের সবাইকে admin অধিকার দেওয়া
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Account হলো শক্ত দেয়াল: dev, prod, log, security আলাদা রাখুন; management account-এ workload নয়।
- Landing zone আর vending নতুন account-কে জন্ম থেকেই নিয়ম মানা করে তোলে।
- Guardrail অনুমতি দেয় না, সীমা টানে। নতুন নিয়ম detective-এ শুরু করে ধাপে ধাপে preventive করুন।
- Tag coverage খরচে মাপুন, unallocated কমান; quota আগেভাগে গুনে আবেদন করুন, আর quota আর capacity আলাদা মনে রাখুন।
- Compliance মানে প্রমাণ, তা কোড দিয়ে জমান। মেয়াদসহ exception রাখুন, আর নিরাপদ পথটিকেই সবচেয়ে সহজ পথ বানান।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ৩৬ · Container কেন — image, container, registry আর VM-এর সাথে তুলনাপরবর্তী পর্বমডিউল ৭-এর শুরু: Docker-এর পৃথিবীতে প্রবেশ।
- ক্লাউড কম্পিউটিং ও DevOps · কোর্স হোম৮১টি পর্বপুরো কোর্সের রোডম্যাপ।
- System Design · নিরাপত্তার নকশাগভীরে যানবড় system-এ পরিচয়, ডেটা আর আস্থার সীমা।
- Software Engineering · ঝুঁকি ও মান ব্যবস্থাপনাপাশের ট্র্যাকঝুঁকি চিহ্নিত করা আর সামলানোর সাধারণ পদ্ধতি।
- Software Engineering · Git নিরাপত্তাপাশের ট্র্যাকBranch protection আর signing, যা evidence-এর কাঁচামাল।
- পর্ব ৬ · Cloud ব্যবহারের পথআগের পর্বAccount, tag আর budget alert-এর প্রথম পরিচয়।