সরাসরি পর্বে যান
পর্ব ১৯ · ৮০-এর মধ্যে · মডিউল ৩

Authorization model — RBAC, ABAC আর least privilege বাস্তবে

Authorization Models — RBAC, ABAC and Least Privilege in Practice

Taught in Bangla, this lesson builds the language of authorization with the access matrix, ACLs and capabilities, covers DAC, MAC, Bell-LaPadula and Biba, compares RBAC, ABAC and ReBAC with hands-on policy simulators, then explains multi-tenant isolation, PDP and PEP, policy as code, role-action test grids, decision logs, the confused deputy, and joiner-mover-leaver access reviews that catch privilege creep.

এই পর্বে যা শিখবেন

  • Access matrix, ACL আর capability দিয়ে authorization-এর ভাষা
  • DAC, MAC, Bell-LaPadula আর Biba-র মূল ভাবনা
  • RBAC, ABAC আর ReBAC-এর হিসাব, সীমা আর বেছে নেওয়ার যুক্তি
  • Multi-tenant isolation, PDP ও PEP আর policy as code
  • Role-action ছকে authorization test আর সিদ্ধান্তের log
  • Access review দিয়ে privilege creep ধরা, আর confused deputy চেনা

১ · পরিচয় জানা হলো, এবার অনুমতি — subject, object আর action

একটি কাল্পনিক অনলাইন বাজারের কথা ভাবুন। Support কর্মী রিনা নিজের password আর MFA দিয়ে ঠিকমতো login করলেন। Login-এ কোনো ভুল নেই। কিন্তু তাঁর পর্দায় এমন এক গ্রাহকের অর্ডারও খুলে গেল, যাঁর সঙ্গে তাঁর কোনো কাজ নেই। সিস্টেম জানত ইনি রিনা, কিন্তু জিজ্ঞেস করেনি রিনা এই অর্ডার দেখতে পারেন কি না।

পর্ব ১৫ থেকে ১৮ পর্যন্ত বিষয় ছিল authentication, অর্থাৎ “আপনি কে”. এই পর্বের প্রশ্ন authorization, অর্থাৎ “আপনি এখানে কী করতে পারেন”. দুটি আলাদা প্রশ্ন, আর একটির উত্তর অন্যটিকে দেয় না। OWASP Top 10-এর ২০২১ আর ২০২৫ সংস্করণে broken access control প্রথম স্থানে আছে, তাই ভুলটি বিরল নয়।

অফিসের গেটে দারোয়ান পরিচয়পত্র দেখেন। সেটি authentication. ভেতরে ঢুকে হিসাব শাখার কর্মী ক্যাশ ভল্টে যেতে পারবেন কি না, সেটি authorization. পরিচয়পত্র আসল হলেও ভল্টের দরজা খোলে না।

প্রতিটি অনুমতির সিদ্ধান্ত তিনটি জিনিস নিয়ে। Subject হলো যিনি কাজ চাইছেন: মানুষ, প্রোগ্রাম বা service. Object হলো যার ওপর কাজ হবে: ফাইল, অর্ডার, API, database-এর সারি। Action হলো কাজটি: পড়া, লেখা, মুছে ফেলা, অনুমোদন করা। এই পুরো ব্যবস্থার নাম access control.

Access matrix — এক ছকে সব নিয়ম

সব নিয়ম একটি ছকে লেখা যায়। সারিতে subject, কলামে object, ঘরে অনুমতি। Butler Lampson ১৯৭১ সালের “Protection” লেখায় এই ধারণাটি স্পষ্ট করেন। একে বলে access control matrix. OS-এর দিক থেকে এর পূর্ণ আলোচনা, domain আর revocation আছে Operating Systems-এর protection পর্বে. এখানে শুধু ব্যবহারিক সারকথা।

Subject ↓ · Object →order:1042invoice:77salary-oct
রিনা (support)read——
মিতু (finance)readread, write—
Payroll service——read, write

৫০০ জন মানুষ আর ১০,০০০টি বস্তু হলে ছকে ঘর ৫০০ × ১০,০০০ = ৫০,০০,০০০টি, যার বেশিরভাগ ফাঁকা। তাই পুরো ছক কেউ রাখে না। দুভাবে ভাগ করে রাখা হয়।

ACL: কলাম ধরে

প্রতিটি বস্তুর সঙ্গে একটি তালিকা: কে কী পারবে। ACL অনুষ্ঠানের গেটের নামের খাতার মতো। “এই ফাইল কে দেখতে পারে?” এর উত্তর সহজ, “রিনা মোট কী কী পারেন?” এর উত্তর কঠিন।

Unix ফাইলের permission, storage bucket-এর ACL

Capability: সারি ধরে

Subject-এর হাতে একটি টোকেন, যা নিজেই অনুমতি বহন করে। Capability সিনেমার টিকিট বা লকারের চাবির মতো। যার হাতে আছে সে-ই ব্যবহার করতে পারে, তাই চুরি আর প্রত্যাহার বড় প্রশ্ন।

File descriptor, সই করা share link

২ · DAC আর MAC — মালিকের ইচ্ছা, না প্রতিষ্ঠানের নিয়ম

পরের প্রশ্ন: অনুমতি দেওয়ার ক্ষমতা কার হাতে? Discretionary access control (DAC)-এ বস্তুর মালিক ঠিক করেন। নিজের খাতা কাকে দেখাবেন, সেটি আপনার ইচ্ছা। Cloud drive-এ নিজের ফাইল শেয়ার করা এই ধরনের। DAC সহজ, কিন্তু দুর্বলতা হলো আপনার নামে চলা যেকোনো প্রোগ্রাম আপনার সব অধিকার পায়। ক্ষতিকর একটি প্রোগ্রামও আপনার ফাইল অন্যকে দিয়ে দিতে পারে।

Mandatory access control (MAC)-এ নিয়ম ঠিক করে সিস্টেম, ব্যবহারকারী নন। সরকারি গোপন নথির কথা ভাবুন: নথিতে security label বসানো, কর্মকর্তার আছে অনুমোদনের স্তর, আর নথির মালিক হলেও নিজের ইচ্ছায় বাইরের কাউকে দেওয়া যায় না। Linux-এর SELinux আর AppArmor এই ধারণার বাস্তব রূপ, যা পর্ব ৩০-এ আসবে।

MAC-এর দুটি ক্লাসিক মডেল একে অপরের আয়না। Bell-LaPadula (১৯৭৩, যুক্তরাষ্ট্রের সামরিক প্রয়োজনে MITRE-তে তৈরি) গোপনীয়তা রক্ষা করে: ওপরে পড়া নিষেধ, নিচে লেখা নিষেধ। Biba (১৯৭৭) অখণ্ডতা রক্ষা করে: নিচে পড়া নিষেধ, ওপরে লেখা নিষেধ।

একই তিন স্তর, উল্টো নিয়ম

Bell-LaPadula protects secrets, Biba protects trust

Bell-LaPadula আর Biba-র তুলনা Bell-LaPadula Biba ওপরের স্তরপড়া ✗ · লেখা ✓ Subject-এর স্তর নিচের স্তরপড়া ✓ · লেখা ✗ ওপরের স্তরপড়া ✓ · লেখা ✗ Subject-এর স্তর নিচের স্তরপড়া ✗ · লেখা ✓ রক্ষা: গোপনীয়তা রক্ষা: অখণ্ডতা স্তর মানে: বাঁয়ে গোপনীয়তার মাত্রা, ডানে বিশ্বাসযোগ্যতার মাত্রা
ছবি ১৯.১ — নিয়ম দুটি উল্টো, কারণ দুটি দুই ভিন্ন ক্ষতি ঠেকায়।

যুক্তিটি সহজ। “Secret” স্তরের কর্মকর্তা “Top Secret” পড়তে পারবেন না, এটি স্বাভাবিক। কিন্তু তিনি “Public” নথিতে লিখতেও পারবেন না, কারণ মাথার গোপন তথ্য লিখে দিলেই তা নিচে ফাঁস হবে। Biba উল্টো দিকে ভাবে: হাসপাতালের অফিসিয়াল রোগীর ফাইলে যাচাইহীন তথ্য যেন না ঢোকে। যাচাইহীন তথ্য পড়ে তার ভিত্তিতে বিশ্বাসযোগ্য নথি লিখলে ভুল ওপরে উঠে যায়। ইন্টারনেট থেকে নামানো ফাইল যেন system ফাইল বদলাতে না পারে, এটিও একই চিন্তা।

সীমা: দুটি মডেল একসাথে কড়াভাবে মানলে প্রায় সব ঘর বন্ধ হয়ে যায়। Bell-LaPadula অখণ্ডতা দেখে না, Biba গোপনীয়তা দেখে না। তাই বাস্তব ব্যবস্থা এগুলো হুবহু নয়, ধারণা হিসেবে নেয়। ব্যবসায়িক সফটওয়্যারে এর চেয়ে কাজের প্রশ্ন হলো “আপনার পদ কী”, আর সেখান থেকেই RBAC.

৩ · RBAC — মানুষকে নয়, পদকে অনুমতি

একটি গার্মেন্টস কারখানায় লাইন সুপারভাইজার বদলান, কিন্তু “লাইন সুপারভাইজার” পদের দায়িত্ব একই থাকে। Role-based access control (RBAC) এই পর্যবেক্ষণের ওপর দাঁড়িয়ে। অনুমতি বসে role-এ, মানুষ বসেন role-এ। মানুষ আর অনুমতি সরাসরি জোড়া থাকে না।

কাজের হিসাব: ৫০০ জন কর্মী, প্রত্যেকের গড়ে ৩০টি অনুমতি। সরাসরি দিলে ৫০০ × ৩০ = ১৫,০০০টি সারি সামলাতে হয়। এখন ধরুন ১৫টি role, প্রতিটিতে ৩০টি অনুমতি, আর একজন গড়ে ১.২টি role নেন। তখন role-অনুমতি সারি ১৫ × ৩০ = ৪৫০, মানুষ-role সারি ৫০০ × ১.২ = ৬০০, মোট ১,০৫০। অর্থাৎ প্রায় ১৪ গুণ কম। কেউ বদলি হলে সরাসরি পদ্ধতিতে ৩০টি মুছে ৩০টি বসাতে হতো; RBAC-এ একটি সারি মুছে একটি বসালেই হয়।

NIST মডেলের চারটি স্তর

Ferraiolo ও Kuhn ১৯৯২ সালে RBAC-এর আনুষ্ঠানিক ধারণা দেন, Sandhu ও সহলেখকদের ১৯৯৬ সালের RBAC96 সেটিকে বিস্তৃত করে, আর ২০০০ সালের NIST মডেল থেকে আসে ANSI/INCITS 359 standard (২০০৪, পরে সংশোধিত)। এর স্তরগুলো একটির ওপর আরেকটি:

স্তরযা যোগ হয়উদাহরণ
Core RBACUser, role, permission আর sessionরিনা একটি session-এ শুধু support role চালু করেন
HierarchicalRole hierarchy: বড় পদ ছোট পদের অনুমতি পায়Lead পায় support-এর সব অনুমতি
Static SoDপরস্পরবিরোধী দুটি role একজনকে দেওয়াই যায় নাRefund তৈরি আর অনুমোদন একসাথে নয়
Dynamic SoDদুটি role থাকতে পারে, কিন্তু এক session-এ একসাথে নয়Cashier আর auditor টুপি এক সময়ে একটি

নিচের stepper একটি অনুরোধ অনুসরণ করে: রিনা order.read চাইছেন। লক্ষ করুন, তাঁর নিজের role-এ এই অনুমতি নেই, এটি আসছে উত্তরাধিকার থেকে।

  1. অনুরোধrinaorder.read
  2. Role খোঁজাsupportuser → role
  3. Hierarchyviewerউত্তরাধিকার
  4. সিদ্ধান্তALLOWমিলেছে
Requestপরিচয় আসে যাচাই করা session থেকে
subject = rina
action  = order.read
object  = order:1042
userRolesমানুষ থেকে role
rina  -> support
kamal -> lead
mitu  -> finance
tareq -> (কোনো role নেই)
inheritsকার্যকর role বের করা
support -> viewer
কার্যকর role = { support, viewer }
permsrole থেকে অনুমতি
support -> ticket.reply
viewer  -> order.read
কার্যকর অনুমতি = { ticket.reply, order.read }
Decisionকারণসহ ফল
ALLOW  rina order.read
কারণ: support -> viewer -> order.read
যে প্রশ্ন বাকিRBAC-এর সীমা
order.read = "অর্ডার পড়া যায়"
কিন্তু order:1042 কি রিনার টিকিটের অর্ডার?
RBAC এই প্রশ্ন করেনি
  1. অনুরোধ এলো। Subject rina, action order.read, object order:1042. পরিচয় নেওয়া হয় যাচাই করা session থেকে, request-এর ভেতরের কোনো লেখা থেকে নয়।
  2. Role খোঁজা। তালিকায় রিনার role support. তালিকায় নেই এমন কেউ হলে role ফাঁকা, আর ফল deny.
  3. Hierarchy খোলা। support উত্তরাধিকারে পায় viewer. তাই রিনার কার্যকর role দুটি: support আর viewer.
  4. অনুমতি একত্র করা। Support দেয় ticket.reply, viewer দেয় order.read. চাওয়া অনুমতিটি এই দুটির ভেতরে আছে।
  5. সিদ্ধান্ত। মিল পাওয়া গেছে, তাই ALLOW. ভালো সিস্টেম ফলের সঙ্গে কারণও রাখে: কোন role, কোন পথে। পরে তদন্তে এটিই কাজে লাগে।
  6. যা ধরা পড়েনি। RBAC বলল “রিনা অর্ডার পড়তে পারেন”, কিন্তু কোন অর্ডার তা বলেনি। শুরুর ঘটনার ভুল এখানেই। বস্তু-স্তরের যাচাই আলাদা লাগে, যা IDOR নামে পর্ব ৩৮-এ আসবে।

এবার একই খেলনা ডেটায় পুরো ছক চালিয়ে দেখুন। কেউ “সুবিধার জন্য” lead-এর উত্তরাধিকারে finance জুড়ে দিয়েছেন। Policy-র লিখিত প্রত্যাশার সঙ্গে প্রতিটি ঘর মেলানো হচ্ছে। সবকিছু memory-র ভেতরের toy ডেটা।

// Toy RBAC on in-memory data. No real system is touched.
const perms = {
  viewer: ['order.read'], support: ['ticket.reply'],
  lead: ['refund.approve'], finance: ['invoice.read', 'report.export'],
};
// senior role -> junior roles. "lead -> finance" was added "for convenience".
const inherits = { support: ['viewer'], lead: ['support', 'finance'], finance: ['viewer'] };
const userRoles = { rina: ['support'], kamal: ['lead'], mitu: ['finance'], tareq: [] };

function effective(role, seen = new Set()) {
  if (seen.has(role)) return new Set();          // a cycle must not hang the check
  seen.add(role);
  const out = new Set(perms[role] || []);
  for (const j of inherits[role] || []) for (const p of effective(j, seen)) out.add(p);
  return out;
}
function check(user, perm) {
  for (const r of userRoles[user] || []) if (effective(r).has(perm)) return true;
  return false;                                  // deny by default
}
// Test matrix: what the policy document says each user MUST get.
const actions = ['order.read', 'ticket.reply', 'refund.approve', 'invoice.read', 'report.export'];
const expected = { rina: 'YYNNN', kamal: 'YYYNN', mitu: 'YNNYY', tareq: 'NNNNN' };

let fails = 0;
console.log('user   ' + actions.map((a, i) => 'a' + (i + 1)).join('  '));
for (const u of Object.keys(expected)) {
  const row = actions.map((a, i) => {
    const got = check(u, a) ? 'Y' : 'N', bad = got !== expected[u][i];
    if (bad) { fails++; console.log('  FAIL ' + u + ' ' + a + ': want ' + expected[u][i] + ', got ' + got); }
    return got + (bad ? '!' : ' ');
  });
  console.log(u.padEnd(7) + row.join('  '));
}
console.log('cells tested:', 4 * actions.length, ' failed:', fails);

আউটপুটে FAIL kamal invoice.read: want N, got Y আর FAIL kamal report.export: want N, got Y, শেষে cells tested: 20 failed: 2. মাত্র একটি শব্দ যোগ করায় কামাল আর্থিক রিপোর্ট বের করার ক্ষমতা পেয়ে গেছেন, অথচ কেউ তাঁকে সরাসরি কিছু দেয়নি। Hierarchy-র বিপদ এটাই: একটি সম্পর্ক অনেক অনুমতি একসাথে টানে। ছক না থাকলে ভুলটি চুপচাপ থেকে যেত। লক্ষ করুন, effective ফাংশনে ঘুরপাক ঠেকানোর জন্য seen রাখা আছে।

৪ · ABAC — পদ যথেষ্ট না হলে বৈশিষ্ট্য আর পরিস্থিতি

প্রতিষ্ঠান বড় হলে RBAC-এর একটি রোগ দেখা দেয়। “ঢাকা শাখার সিনিয়র হিসাবরক্ষক”, “চট্টগ্রাম শাখার জুনিয়র হিসাবরক্ষক”, প্রতিটি মিশ্রণের জন্য একটি করে নতুন role তৈরি হয়। একে বলে role explosion. ৬টি বিভাগ, ৮টি শাখা আর ৩টি পদমর্যাদা হলে সম্ভাব্য role ৬ × ৮ × ৩ = ১৪৪টি, আর ব্যতিক্রম যোগ হলে আরও। অথচ মূল তথ্য মাত্র ৬ + ৮ + ৩ = ১৭টি মান। গুণ থেকে যোগে নামার এই চিন্তাই attribute-based access control (ABAC).

NIST SP 800-162 (Hu ও সহলেখক, জানুয়ারি ২০১৪) ABAC-কে এভাবে বোঝায়: subject, object, চাওয়া কাজ আর কখনো পরিবেশের attribute মিলিয়ে policy-র নিয়মে সিদ্ধান্ত। তাই নিয়ম লেখা হয় মানুষের তালিকায় নয়, শর্তে: “কর্মীর বিভাগ আর নথির বিভাগ এক হলে পড়া যাবে।”

ব্যাংকের লকার কক্ষের নিয়ম ভাবুন। শুধু “আপনি গ্রাহক” যথেষ্ট নয়। লকারটি আপনার হতে হবে, সময়টি ব্যাংকের সময়ের মধ্যে হতে হবে, আর সঙ্গে থাকতে হবে কর্মকর্তা। এগুলো সবই attribute: মানুষের, বস্তুর আর পরিবেশের।

অনেক নিয়ম একসাথে মিললে কী হবে? সবচেয়ে প্রচলিত উত্তর deny overrides: একটি deny মিললে সব permit বাতিল। আর কিছুই না মিললে ফল default deny. নিচের সিদ্ধান্তে রিনা (HR বিভাগ) রাত ৯টায় বেতনের ফাইল চাইছেন। দেখবেন permit মিলেও শেষ ফল আলাদা হয়।

Policy যাচাইয়ের খাতা (toy উদাহরণ)
subject.dept
object
env.hour · mfa
P1 (permit)
P2 (permit)
D1 (deny)
D2 (deny)
ফল
  1. অনুরোধ। রিনা salary-oct পড়তে চান। এখনো শুধু নাম জানা, attribute নয়।
  2. Attribute সংগ্রহ। বিভাগ hr, ফাইলের ধরন payroll, স্তর ৩, সময় ২১টা, MFA হয়েছে। এই মানগুলো HR সিস্টেম আর server-এর ঘড়ি থেকে আসে, ব্যবহারকারীর পাঠানো request থেকে নয়।
  3. P1 যাচাই। একই বিভাগে পড়া যাবে। hr = hr, তাই মিলেছে। এখানে থেমে গেলে ফল হতো allow.
  4. P2 যাচাই। এই নিয়ম auditor-এর জন্য। রিনা staff, তাই মেলেনি।
  5. D1 যাচাই। বেতনের ফাইল শুধু ৯টা থেকে ১৮টা পর্যন্ত। সময় ২১, আর ২১ ≥ ১৮, তাই deny মিলেছে।
  6. D2 যাচাই। স্তর ৩-এ MFA লাগে, আর MFA হয়েছে, তাই এই deny মেলেনি। Deny-র কারণ একটিই থাকল: D1.
  7. ফল। Deny overrides: একটি permit আর একটি deny মিললে deny জেতে। ফল DENY by D1. কোন নিয়মে আটকাল, সেটিও log-এ যাবে।
// Toy ABAC on in-memory data. The hour comes from a simulated clock.
const policies = [
  { id: 'P1', effect: 'permit', why: 'same department',
    when: (s, o, a) => a === 'read' && s.dept === o.dept },
  { id: 'P2', effect: 'permit', why: 'auditor reads non-secret',
    when: (s, o, a) => a === 'read' && s.role === 'auditor' && o.level <= 2 },
  { id: 'D1', effect: 'deny', why: 'payroll only 09-18',
    when: (s, o, a, e) => o.type === 'payroll' && (e.hour < 9 || e.hour >= 18) },
  { id: 'D2', effect: 'deny', why: 'level 3 needs MFA',
    when: (s, o, a, e) => o.level >= 3 && !e.mfa },
];
function decide(s, o, a, e) {
  const hits = policies.filter(p => p.when(s, o, a, e));
  const deny = hits.find(p => p.effect === 'deny');   // deny overrides permit
  if (deny) return `DENY  by ${deny.id} (${deny.why})`;
  const ok = hits.find(p => p.effect === 'permit');
  if (ok) return `ALLOW by ${ok.id} (${ok.why})`;
  return 'DENY  by default (no rule matched)';
}
const rina = { name: 'rina', dept: 'hr', role: 'staff' };
const mitu = { name: 'mitu', dept: 'finance', role: 'staff' };
const asif = { name: 'asif', dept: 'audit', role: 'auditor' };
const salary = { id: 'salary-oct', dept: 'hr', type: 'payroll', level: 3 };
const policyDoc = { id: 'leave-policy', dept: 'hr', type: 'doc', level: 1 };

const cases = [
  [rina, salary, 'read', { hour: 11, mfa: true }],
  [rina, salary, 'read', { hour: 21, mfa: true }],
  [rina, salary, 'read', { hour: 11, mfa: false }],
  [mitu, salary, 'read', { hour: 11, mfa: true }],
  [asif, policyDoc, 'read', { hour: 10, mfa: false }],
  [rina, policyDoc, 'delete', { hour: 10, mfa: true }],
];
for (const [s, o, a, e] of cases)
  console.log(`${s.name} ${a} ${o.id} @${e.hour}h mfa=${e.mfa}`.padEnd(38), decide(s, o, a, e));

একই মানুষ, একই ফাইল, ফল তিন রকম: সকাল ১১টায় ALLOW by P1 (same department), রাত ৯টায় DENY by D1 (payroll only 09-18), MFA ছাড়া DENY by D2 (level 3 needs MFA). মিতুর ক্ষেত্রে DENY by default (no rule matched), কারণ তাঁর বিভাগ আলাদা। RBAC-এ এই সময় আর MFA-র শর্ত প্রকাশ করতে আলাদা আলাদা role লাগত। সময় এখানে খেলনা ঘড়ি; বাস্তবে সেটি server থেকে আসবে।

ABAC-এর দাম: “এই ফাইল এখন কে কে পড়তে পারেন?” RBAC-এ তালিকা দেখলেই হয়, ABAC-এ সব মানুষ আর সব শর্ত হিসাব করতে হয়। Attribute ভুল হলে সিদ্ধান্তও ভুল, তাই attribute-এর উৎসটিও নিরাপত্তার অংশ। অনেক প্রতিষ্ঠান তাই মাঝের পথ নেয়: মোটা দাগে role, সূক্ষ্ম সীমায় শর্ত। Cloud-এ শর্তের ব্যবহার দেখুন IAM policy evaluation পর্বে.

৫ · ReBAC — সম্পর্কের পথ ধরে অনুমতি

Cloud drive-এ ফোল্ডার শেয়ার করলে ভেতরের সব ফাইল শেয়ার হয়। দলের সদস্য হলে দলের ফোল্ডার দেখা যায়। এখানে পদ বা বিভাগ নয়, প্রশ্নটি হলো এই মানুষের সঙ্গে এই বস্তুর সম্পর্কের কোনো পথ আছে কি না। এটি relationship-based access control (ReBAC). মহল্লার পরিচয়ের মতো: “আমি রহিমের ভাই, রহিম এই দোকানের মালিক”, এই শিকল ধরেই দরজা খোলে।

ReBAC-এর সবচেয়ে পরিচিত প্রকাশিত নকশা Google-এর “Zanzibar: Google's Consistent, Global Authorization System” (Pang ও সহলেখক, USENIX ATC ২০১৯)। পেপার অনুযায়ী Calendar, Drive, YouTube-সহ শত শত service-এর জন্য এটি trillion-সংখ্যক ACL সামলায়, প্রতি সেকেন্ডে কয়েক মিলিয়ন অনুরোধে। মূল ধারণাটি সরল: প্রতিটি তথ্য একটি relation tuple, অর্থাৎ “এই বস্তুর, এই সম্পর্কে, এই ব্যক্তি”. SpiceDB ও OpenFGA-র মতো কিছু open source প্রকল্প এই নকশায় অনুপ্রাণিত, উদাহরণ হিসেবে নাম দুটি জেনে রাখা যায়।

Toy share graph

Each arrow is one stored relationship

ফোল্ডার, দল আর ফাইলের সম্পর্কের গ্রাফ bashiranika group:financefolder:reports chandradoc:q3 folder:hrdoc:hr-plan memberowner viewer parent editor parent bashir থেকে doc:hr-plan-এ কোনো পথ নেই
ছবি ১৯.২ — সিদ্ধান্ত মানে গ্রাফে একটি পথ খোঁজা। পথ না পেলে deny.
// Toy ReBAC: facts are tuples [object, relation, who]. In memory only.
const tuples = [
  ['folder:reports', 'owner', 'user:anika'],
  ['folder:reports', 'viewer', 'group:finance#member'],
  ['group:finance', 'member', 'user:bashir'],
  ['doc:q3', 'parent', 'folder:reports'],
  ['doc:q3', 'editor', 'user:chandra'],
  ['doc:hr-plan', 'parent', 'folder:hr'],
];
const implied = { viewer: 'editor', editor: 'owner' };  // an owner can edit, an editor can view

function check(obj, rel, user, path = []) {
  if (path.length > 8) return null;                     // limit the walk, fail closed
  const trail = [...path, `${obj}#${rel}`];
  const next = [];                                      // places to walk next
  for (const [o, r, who] of tuples) {
    if (o === obj && r === rel && who === user) return [...trail, user];
    if (o === obj && r === rel && who.includes('#')) next.push(who.split('#'));
    if (o === obj && r === 'parent') next.push([who, rel]);   // inherit from the folder
  }
  if (implied[rel]) next.push([obj, implied[rel]]);
  for (const [o, r] of next) {
    const hit = check(o, r, user, trail);
    if (hit) return hit;
  }
  return null;
}
const asks = [['doc:q3', 'viewer', 'user:bashir'], ['doc:q3', 'editor', 'user:anika'],
  ['doc:q3', 'viewer', 'user:chandra'], ['doc:q3', 'editor', 'user:bashir'],
  ['doc:hr-plan', 'viewer', 'user:bashir']];
for (const [o, r, u] of asks) {
  const p = check(o, r, u);
  console.log(`${u} ${r} ${o}: ${p ? 'ALLOW' : 'DENY'}`);
  if (p) console.log('   ' + p.join(' <- '));
}

বাশিরের ফলাফলে পুরো পথ দেখা যায়: doc:q3#viewer <- folder:reports#viewer <- group:finance#member <- user:bashir. কেউ তাঁকে সরাসরি ফাইলটি দেয়নি। আনিকা editor পেয়েছেন কারণ ফোল্ডারের owner edit করতে পারেন। বাশির doc:q3 edit করতে পারেন না, আর doc:hr-plan-এ DENY, কারণ পথই নেই। গভীরতার সীমা (path.length > 8) গ্রাফের ঘুরপাক আটকায়, আর সীমা পেরোলে ফল deny, অর্থাৎ fail secure. একটি সম্পর্ক মুছলে তার পেছনের সব অনুমতি একসাথে চলে যায়, ReBAC-এর এটি বড় সুবিধা।

মডেলমূল প্রশ্নমানানসই কাজদুর্বল জায়গা
RBACআপনার পদ কী?অফিসের স্থির দায়িত্ব, admin প্যানেলRole explosion, বস্তু-স্তরের প্রশ্ন নেই
ABACএই পরিস্থিতিতে শর্ত মেলে?সময়, স্থান, device, সংবেদনশীলতার নিয়ম“কে কে পারেন?” হিসাব কঠিন
ReBACবস্তুর সঙ্গে আপনার সম্পর্কের পথ আছে?শেয়ারিং, দল, ফোল্ডার, সংগঠনের কাঠামোবড় গ্রাফে গতি আর consistency

৬ · Multi-tenant isolation — এক ভবনে অনেক ভাড়াটিয়া

একটি SaaS পণ্যে একই software, একই database অনেক প্রতিষ্ঠান ব্যবহার করে। এটি multi-tenancy, আর প্রতিটি প্রতিষ্ঠান একটি tenant. ফ্ল্যাটবাড়ির মতো: ছাদ, লিফট, পানির ট্যাংক অভিন্ন, কিন্তু আপনার চাবিতে পাশের ফ্ল্যাট খোলা চলবে না। এখানে একটি ভুল মানে এক গ্রাহকের ডেটা অন্য গ্রাহকের কাছে, যা সাধারণ বাগ নয়, পুরো পণ্যের বিশ্বাসের প্রশ্ন।

-- অনিরাপদ নকশা: যেকোনো tenant-এর অর্ডার আসতে পারে
SELECT * FROM orders WHERE id = :order_id;

-- নিরাপদ নকশা: tenant আসে যাচাই করা session থেকে, request থেকে নয়
SELECT * FROM orders
WHERE id = :order_id AND tenant_id = :tenant_from_session;
  • Tenant-এর উৎস: যাচাই করা session বা token, কখনো URL, form বা header-এর ব্যবহারকারী-লিখিত মান নয়।
  • এক জায়গায় ছাঁকনি: প্রতিটি query-তে হাতে শর্ত লিখলে একদিন ভুল হবেই। Data layer বা database-এর row-level security ব্যবহার করুন; দেখুন DBMS কোর্সের cloud database পর্ব.
  • ভুলে যাওয়া পথ: Cache key, background job, CSV export, search index আর log-এও tenant লাগবে। ফাঁস প্রায়ই মূল পাতায় নয়, এসব পাশের পথে হয়।
  • Support-এর বিশেষ ক্ষমতা: গ্রাহকের ডেটা দেখার অভ্যন্তরীণ tool-এ সময়সীমা, কারণ লেখা আর log বাধ্যতামূলক রাখুন।
নকশাআলাদা হওয়ার শক্তিখরচ ও ঝামেলা
একই টেবিল, tenant_id কলামসবচেয়ে কম; পুরোপুরি কোডের ওপর নির্ভরকম
প্রতি tenant-এ আলাদা schemaমাঝারিমাঝারি; migration বাড়ে
প্রতি tenant-এ আলাদা databaseবেশি; আলাদা key-ও সম্ভববেশি
প্রতি tenant-এ আলাদা cloud accountসবচেয়ে বেশিসবচেয়ে বেশি; বড় বা নিয়ন্ত্রিত গ্রাহকের জন্য

৭ · সিদ্ধান্ত আর প্রয়োগ আলাদা — PDP, PEP আর policy as code

কোডের একশ জায়গায় ছড়ানো if (user.isAdmin) একটি বড় ঝুঁকি। একটি জায়গায় ভুলে গেলেই ফাঁক, আর নিয়ম বদলালে একশ জায়গা বদলাতে হয়। তাই নকশায় দুটি কাজ আলাদা করা হয়। দরজায় দাঁড়িয়ে আটকানো, আর নিয়ম দেখে সিদ্ধান্ত নেওয়া। অফিসের দারোয়ান নিজে নিয়ম বানান না; তিনি খাতায় দেখেন বা ফোন করে জেনে নেন।

একটি অনুরোধের পথ

Decision and enforcement are separate components

PEP, PDP, PAP, PIP আর audit log-এর সম্পর্ক ব্যবহারকারী PEPদরজার পাহারা Resourceঅর্ডার, ফাইল PAPনিয়ম লেখা PDPসিদ্ধান্ত PIPattribute-এর উৎস Audit log: কে, কী, কোন নিয়মে, কী ফল ১ অনুরোধ ২ প্রশ্ন ৩ ফল ৪ allow ৫ log
ছবি ১৯.৩ — NIST SP 800-162-এর পরিভাষা: PEP প্রয়োগ করে, PDP সিদ্ধান্ত নেয়, PIP তথ্য দেয়, PAP নিয়ম রাখে।
অংশকাজযে উদাহরণে দেখবেন
PEP (enforcement point)অনুরোধ আটকে প্রশ্ন করে, ফল প্রয়োগ করেAPI middleware, gateway
PDP (decision point)Policy আর তথ্য মিলিয়ে সিদ্ধান্ত দেয়Policy engine বা একটি can() ফাংশন
PIP (information point)Attribute আর সম্পর্কের তথ্য জোগায়HR সিস্টেম, directory, database
PAP (administration point)Policy লেখা, পরিবর্তন, প্রকাশPolicy repository, admin পাতা

তিনটি নিয়ম যা কোনো মডেলেই বদলায় না

  • Deny by default: কোনো নিয়ম না মিললে, বা engine-এ ত্রুটি হলে, ফল deny. এটি পর্ব ০৩-এর default deny, যা ভুলকে নিরাপদ দিকে ঠেলে দেয়।
  • Server-এ যাচাই: Button লুকানো শুধু সুবিধা, নিরাপত্তা নয়। প্রতিটি API অনুরোধে আলাদা যাচাই লাগে, যাকে পর্ব ০৩-এ বলা হয়েছে complete mediation.
  • একটি কেন্দ্রীয় পথ: সব যাচাই একটি library বা service দিয়ে যাক। নতুন endpoint-এ যাচাই ভুলে গেলে framework নিজেই আটকাবে, এমন নকশা সবচেয়ে ভালো। এই ধারণাই reference monitor.

Policy as code

নিয়ম যদি ফাইলে লেখা কোড হয়, তবে সেটি review করা যায়, test করা যায়, পুরোনো সংস্করণে ফেরা যায়। এই চর্চা policy as code. দুটি পরিচিত উদাহরণ Open Policy Agent (OPA), যার ভাষা Rego, আর Cedar, যা AWS থেকে শুরু হওয়া একটি open source ভাষা। এগুলো উদাহরণ মাত্র, কোনো সুপারিশ নয়। নিচের দুটি ফাইল একই ধারণা দেখায়। এগুলো এখানে চালানো হয়নি; ব্যবহারের আগে official doc-এর সঙ্গে মিলিয়ে নিন, কারণ syntax version-ভেদে বদলাতে পারে।

package bazar.authz

import rego.v1

default allow := false

allow if {
    input.action == "order.read"
    "support" in input.subject.roles
    input.subject.tenant == input.resource.tenant
}
permit (
    principal in Role::"support",
    action == Action::"orderRead",
    resource
)
when { principal.tenant == resource.tenant };

forbid (principal, action, resource)
when { resource.level >= 3 && !context.mfa };

আরও গভীরে: PDP আলাদা service হলে প্রতিটি অনুরোধে network খরচ যোগ হয়, আর PDP নিজেই ব্যর্থতার একক বিন্দু হতে পারে। তাই অনেক নকশায় policy প্রতিটি service-এর পাশে local engine-এ বিতরণ হয়, আর কেন্দ্র শুধু নিয়ম ও তথ্য পাঠায়। XACML (OASIS) এই চার-অংশের ভাষা আগেই standard করেছিল। NIST SP 800-53 Rev. 5-এর AC-3, AC-5 আর AC-6 নিয়ন্ত্রণ যথাক্রমে access enforcement, separation of duties আর least privilege-কে ধরে।

৮ · প্রমাণ চাই — test ছক, সিদ্ধান্তের log আর confused deputy

Authorization test মানে একটি ছক

সাধারণ test দেখে কাজটি হয় কি না। Authorization test দেখে যার পারার কথা নয়, সে পারে না তো। পদ্ধতিটি সরল: সারিতে role, কলামে action, প্রতিটি ঘরে প্রত্যাশিত ফল, যেমনটি rbac_matrix.js-এ দেখলেন।

কাজের হিসাব: ৫টি role আর ৮টি action মানে ৫ × ৮ = ৪০টি ঘর। Object-এর তিন অবস্থা যোগ করুন: নিজের, একই tenant-এর অন্যের, অন্য tenant-এর। তখন ৪০ × ৩ = ১২০টি পরীক্ষা। সংখ্যাটি বড় মনে হলেও সমস্যা নেই, কারণ পরীক্ষাগুলো যন্ত্রে চলে, হাতে নয়। Test চালানো যায় CI-তে; policy বদলালে ছকও বদলাতে হবে, আর সেই পরিবর্তন review-তে স্পষ্ট দেখা যাবে।

Login করা ছাড়া, ভুল role, ভুল tenant, মেয়াদ শেষ হওয়া session, এই নেতিবাচক ঘরগুলোই বেশি জরুরি। এসব পরীক্ষা আপনার নিজের test পরিবেশে চলবে। চালু কোনো সিস্টেমে লিখিত অনুমতি ছাড়া অন্যের ডেটায় চেষ্টা করা অপরাধ হতে পারে; সীমা দেখুন পর্ব ০৬-এ।

সিদ্ধান্তের log

“কে এই ফাইল দেখেছিল?” তদন্তের প্রথম প্রশ্ন। তাই decision log শুধু “denied” লেখা নয়; কে, কী, কোন বস্তু, কোন নিয়ম, কোন policy সংস্করণ, সবই রাখতে হবে। সাধারণ audit log-এর সঙ্গে পার্থক্য হলো, এখানে সিদ্ধান্তের কারণ থাকে।

{
  "time": "2026-10-20T21:04:11Z",
  "request_id": "req-example-8841",
  "subject": "user-1042",
  "tenant": "tenant-demo",
  "action": "record.read",
  "object": "salary-oct",
  "decision": "deny",
  "rule": "D1",
  "policy_version": "2026-10-18",
  "source_ip": "203.0.113.10"
}

এই log থেকে যা নজরে রাখা যায়: একজন subject অল্প সময়ে অনেক ভিন্ন object-এ deny পাচ্ছেন, অন্য tenant-এর বস্তুতে যেকোনো চেষ্টা, role-এর হঠাৎ পরিবর্তন, আর অস্বাভাবিক সময়ে ব্যাপক export. Log-এ password, token বা ডেটার মূল বিষয় লিখবেন না। Log জমা করার কাঠামো দেখুন centralized logging পর্বে; নিরাপত্তার দিকটি আসবে পর্ব ৫৫-এ।

Confused deputy — আপনার ক্ষমতায় অন্যের কাজ

একটি প্রোগ্রামের নিজের অনেক অধিকার আছে, আর সে ব্যবহারকারীর হয়ে কাজ করে। ব্যবহারকারী তাকে এমন কাজ করালেন, যা নিজে পারতেন না, এই সমস্যার নাম confused deputy. নামটি Norm Hardy-র ১৯৮৮ সালের লেখা থেকে; মূল ঘটনা আর capability দিয়ে সমাধান আছে protection পর্বে. ভাবুন, অফিসের পিয়নের কাছে সব ঘরের চাবি আছে। কেউ পিয়নকে বলল, “ওই ফাইলটা এনে দিন।” পিয়ন জানতে চাইলেন না ফাইলটি ওই মানুষের জন্য কি না।

আজকের রূপ: একটি report service-এর database-এর পুরো অধিকার আছে, আর সে ব্যবহারকারীর দেওয়া report নম্বর দেখে ফাইল বের করে। Service-এর নিজের অনুমতি যাচাই হলো, কিন্তু ব্যবহারকারীর অনুমতি নয়। প্রতিরক্ষা তিনটি: কার হয়ে কাজ হচ্ছে সেই পরিচয় সঙ্গে নেওয়া ও সেই অনুমতিতে যাচাই, service-এর নিজের অধিকার ছোট রাখা, আর নাম নয় বরং সীমিত capability দেওয়া। Cross-account access-এ একটি cloud vendor-এর doc এই সমস্যার জন্যই external ID ব্যবহারের কথা বলে। URL আনার service-এর ক্ষেত্রে পর্ব ৪২ (SSRF) আর AI agent-এর ক্ষেত্রে পর্ব ৫১ একই সমস্যার দুটি নতুন চেহারা।

৯ · মানুষ বদলায়, অনুমতি থেকে যায় — joiner, mover, leaver

নকশা যত ভালোই হোক, least privilege একদিনের কাজ নয়। মানুষ চাকরিতে আসেন, বিভাগ বদলান, চলে যান। সেই তিন মুহূর্তের প্রক্রিয়াকে বলে joiner-mover-leaver (JML). সবচেয়ে অবহেলিত হলো mover: নতুন অনুমতি সবাই চায়, পুরোনোটি কেউ ফেরত দিতে বলে না। ধীরে ধীরে অনুমতি জমে যাওয়াকে বলে privilege creep. দশ বছরের পুরোনো কর্মীর account প্রায়ই পুরো অফিসের চাবির গোছা হয়ে দাঁড়ায়।

অনুমতির খাতা (কাল্পনিক; দিন সিমুলেটেড)
দিন
ঘটনা
দায়িত্ব
অনুমতি (মোট)
দরকারি
বাড়তি
SoD সংঘাত
  1. দিন ০, Joiner. রিনা support-এ যোগ দিলেন। অনুমতি দুটি: order.read, ticket.reply. দুটিই দরকারি, বাড়তি শূন্য।
  2. দিন ২০০, Mover. রিনা finance-এ গেলেন। যোগ হলো invoice.read, report.export. মোট ৪, কিন্তু দরকার ৩। ticket.reply কেউ সরায়নি, বাড়তি ১।
  3. দিন ২৬০, সাময়িক প্রকল্প। Refund জট কমাতে তাড়াহুড়োয় refund.create আর refund.approve দুটিই দেওয়া হলো। মোট ৬, দরকারি ৫, বাড়তি ১। একজনের হাতে তৈরি আর অনুমোদন, তাই toxic combination.
  4. দিন ২৯০, প্রকল্প শেষ। কেউ প্রত্যাহার করেনি, কারণ অনুমতিতে মেয়াদ ছিল না। মোট ৬, দরকার ৩, বাড়তি ৩। SoD সংঘাতও রয়ে গেছে। এই account চুরি গেলে blast radius দরকারের চেয়ে দ্বিগুণ অনুমতিজুড়ে ছড়াবে।
  5. দিন ৪০০, Access review. ব্যবহারের তথ্য দেখিয়ে দিল তিনটি অনুমতি ৯০ দিনের বেশি অব্যবহৃত। Manager নিশ্চিত করলেন, সরানো হলো। মোট ৩, বাড়তি ০, সংঘাত নেই।
  6. দিন ৫২০, Leaver. HR সিস্টেমের সংকেতে account বন্ধ হলো, session আর token বাতিল হলো, ব্যক্তিগত API key মুছল। মোট ০। শুধু login বন্ধ করা যথেষ্ট নয়; পুরোনো session বা token তখনও চলতে পারে।

এই একই হিসাব একটি ছোট report চালিয়ে দেখুন। Toy ডেটায় TODAY = 400, যা উপরের দিন ৪০০-র সঙ্গে মেলে।

// Toy role-count and access-review report. All data is invented; day numbers are simulated.
const dept = 6, branch = 8, grade = 3;
console.log(`roles if every mix is one role: ${dept} x ${branch} x ${grade} = ${dept * branch * grade}`);
console.log(`attribute values to keep instead: ${dept} + ${branch} + ${grade} = ${dept + branch + grade}`);

const TODAY = 400, STALE_DAYS = 90;
// user, permission, day last used (null = never used)
const grants = [
  ['rina', 'order.read', 395], ['rina', 'invoice.read', 398], ['rina', 'report.export', 390],
  ['rina', 'ticket.reply', 198], ['rina', 'refund.approve', 288], ['rina', 'refund.create', 285],
  ['mitu', 'invoice.read', 399], ['mitu', 'report.export', 370], ['mitu', 'user.admin', null],
  ['kamal', 'order.read', 397], ['kamal', 'ticket.reply', 396], ['kamal', 'refund.approve', 392],
];
const toxic = [['refund.create', 'refund.approve']];      // separation of duties
let unused = 0;
const byUser = {};
for (const [u, p, last] of grants) {
  (byUser[u] ||= []).push(p);
  const age = last === null ? Infinity : TODAY - last;
  if (age > STALE_DAYS) {
    unused++;
    const said = last === null ? 'never used' : `last used ${age} days ago`;
    console.log(`REVIEW ${u.padEnd(6)} ${p.padEnd(15)} ${said}`);
  }
}
for (const [u, ps] of Object.entries(byUser))
  for (const [a, b] of toxic)
    if (ps.includes(a) && ps.includes(b)) console.log(`SOD    ${u}: holds both ${a} and ${b}`);
const pct = (100 * unused / grants.length).toFixed(1);
console.log(`unused: ${unused} of ${grants.length} grants (${pct}%), window ${STALE_DAYS} days`);

প্রথম দুই লাইন role explosion-এর হিসাব: 144 বনাম 17. এরপর REVIEW rina ticket.reply last used 202 days ago সহ রিনার তিনটি অনুমতি, ঠিক stepper-এর বাড়তি তিনটি। REVIEW mitu user.admin never used বলছে অনুমতিটি কখনো লাগেইনি। SOD rina: holds both refund.create and refund.approve ব্যবহার-তথ্যের বাইরের একটি নিয়ম-ভিত্তিক ধরা। শেষে unused: 4 of 12 grants (33.3%): এক-তৃতীয়াংশ অনুমতি শুধু ঝুঁকি বহন করছে। তবে “অব্যবহৃত” মানেই “অপ্রয়োজনীয়” নয়; বছরে একবার লাগে এমন কাজ বা break-glass account ভুল করে কেটে দিলে ক্ষতি হবে। তাই শেষ সিদ্ধান্ত মানুষের।

ভালো access review কেমন

  • যিনি কাজ জানেন, তিনিই যাচাই করেন: ব্যবস্থাপক বা তথ্যের মালিক, IT একা নয়।
  • প্রমাণ সামনে থাকে: শেষ ব্যবহারের তারিখ, role-এর অর্থ সহজ ভাষায়। নইলে ৪০০ সারিতে সবাই “approve all” চাপেন, যাকে বলে rubber-stamping.
  • ঝুঁকি অনুযায়ী ঘন ঘন: admin আর আর্থিক অনুমতি বেশি ঘন, সাধারণ পড়ার অনুমতি কম। পর্ব ২০-এ privileged account-এর আলাদা ব্যবস্থা আসবে।
  • মেয়াদ দিয়ে শুরু: সাময়িক অনুমতি শুরু থেকেই মেয়াদসহ দিলে পরে সরাতে মনে রাখতে হয় না।
  • ফল বাস্তবায়ন: “সরান” লেখা হলেই কাজ শেষ নয়, সত্যিই সরেছে কি না যাচাই। NIST SP 800-53 Rev. 5-এর AC-2 আর AC-6(7) এই পর্যালোচনার কথা বলে।

পরীক্ষা ও ইন্টারভিউতে:

  • Authentication আর authorization-এর পার্থক্য? প্রথমটি পরিচয় যাচাই, দ্বিতীয়টি সেই পরিচয়ের অনুমতি যাচাই।
  • ACL আর capability? ACL বস্তুর সঙ্গে থাকে, capability subject-এর হাতে থাকে; একই matrix-এর কলাম আর সারি।
  • Bell-LaPadula-র নিয়ম? No read up, no write down; গোপনীয়তা রক্ষা করে। Biba উল্টো, অখণ্ডতা রক্ষা করে।
  • Role explosion কী, প্রতিকার কী? মিশ্রণের জন্য role গুণ হয়ে বাড়ে; ABAC-এর শর্ত দিয়ে কমানো যায়।
  • PDP আর PEP? PDP সিদ্ধান্ত নেয়, PEP সেটি অনুরোধের পথে প্রয়োগ করে।

১০ · AI-এর যুগে authorization

AI endpoint লিখে দেয় দ্রুত, আর সেই কোড চলেও। কিন্তু authorization-এর ভুল চলার সময় কোনো error দেয় না; সবার জন্য খোলা endpoint দিব্যি কাজ করে। তাই AI-এর কোডে এই অংশটি সবচেয়ে আগে পড়ুন। AI-এর উত্তরে থাকা CVE নম্বর বা standard-এর ধারা মূল উৎসে মিলিয়ে নিন, কারণ AI সেগুলো বানিয়েও বলতে পারে।

AI-এর ভুলকেন বিপজ্জনককী করবেন
Login যাচাই আছে, মালিকানা যাচাই নেইযেকোনো ব্যবহারকারী অন্যের বস্তু পায়প্রতিটি object-এ owner আর tenant যাচাই
403 এড়াতে * বা admin role দিতে বলেভুল ঠিক হয় না, ঢেকে যায়, blast radius বাড়েকোন একটি অনুমতি কম আছে, সেটি খুঁজে শুধু সেটিই দিন
Role বা tenant request body থেকে নেয়ব্যবহারকারীর লেখা মানে বিশ্বাসশুধু যাচাই করা session থেকে নিন
শুধু frontend-এ button লুকায়API খোলাই থাকেServer-এ PEP রাখুন
Access review-এ আত্মবিশ্বাসী “সব ঠিক আছে”Log না দেখেই ফলমানুষের সিদ্ধান্ত, প্রমাণসহ

AI-কে নিজের কোডের রক্ষকের চোখে পড়তে বলুন। Prompt-এ আসল secret, token বা গ্রাহকের ডেটা দেবেন না; কোডে থাকলে আগে সরিয়ে নিন।

তুমি একজন application security reviewer. নিচে আমার নিজের প্রজেক্টের API handler আছে (secret সরানো হয়েছে)। [এখানে কোড পেস্ট করুন] ১. প্রতিটি endpoint-এর জন্য একটি ছক বানাও: role, action, object-এর মালিকানা, প্রত্যাশিত ফল। ২. কোথায় মালিকানা বা tenant যাচাই নেই, লাইন উল্লেখ করে বলো। ৩. কোনো মান request থেকে বিশ্বাস করা হচ্ছে কি না দেখাও। ৪. সবচেয়ে ছোট সমাধান দাও, permission চওড়া না করে। ৫. যে নেতিবাচক test লাগবে তার তালিকা দাও। যা নিশ্চিত নও, সেটি স্পষ্ট বলো। কোনো CVE বা standard-এর উল্লেখ করলে উৎস দাও।

AI agent-ও একটি subject

যে AI agent আপনার হয়ে email পড়ে, ফাইল খোলে বা API ডাকে, সে-ই আজকের সবচেয়ে সহজ confused deputy. ডেটার ভেতরের লেখা তাকে ভুল কাজে নিতে পারে (পর্ব ৫১)। তাই তাকে আলাদা পরিচয়, সরু scope আর ছোট মেয়াদের অনুমতি দিন, ঝুঁকির কাজে মানুষের অনুমোদন রাখুন, আর তার প্রতিটি সিদ্ধান্ত log করুন।

AI-এর authorization কোড হাতে পেলে

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।

প্র ০১RBAC, ABAC আর ReBAC-এর মধ্যে নতুন একটি পণ্যে কোনটি বেছে নেবেন? “সবচেয়ে আধুনিক”টি নয় কেন?

প্রশ্নটি শুরু হওয়া উচিত আপনার নিয়মের ভাষা থেকে। প্রতিষ্ঠানের মানুষ নিয়মগুলো মুখে কীভাবে বলেন, সেটি শুনুন। “ম্যানেজার অনুমোদন করতে পারেন” মানে পদের ভাষা, RBAC. “ব্যাংক সময়ের বাইরে পারবেন না” মানে শর্তের ভাষা, ABAC. “যার সঙ্গে শেয়ার করা হয়েছে” মানে সম্পর্কের ভাষা, ReBAC.

ইতিহাসও এই শিক্ষা দেয়। ১৯৯২ সালে Ferraiolo ও Kuhn যখন RBAC-এর আনুষ্ঠানিক রূপ দেন, তাঁদের লক্ষ্য ছিল বাণিজ্যিক ও বেসামরিক প্রতিষ্ঠান, যেখানে সামরিক স্তরভিত্তিক মডেল মানায় না। প্রতিষ্ঠানগুলো RBAC নিল, কারণ পদ তাদের কাছে আগে থেকেই পরিচিত ছিল। পরে role explosion দেখা দিলে ABAC-এর চাহিদা বাড়ল, আর ২০১৪ সালে NIST-এর গাইড এল। আবার ব্যবহারকারীর তৈরি বস্তু আর শেয়ারিং বাড়ায় ReBAC-এর প্রয়োজন এল, যেখানে ২০১৯ সালের Zanzibar পেপার একটি প্রকাশিত নকশা দিল। অর্থাৎ প্রতিটি মডেল আগেরটির নির্দিষ্ট সীমা থেকে এসেছে, আগেরটিকে বাতিল করতে নয়।

একটি ছোট দোকানের হিসাব সফটওয়্যারে Zanzibar-ধরনের ব্যবস্থা অকারণ জটিলতা। জটিল ব্যবস্থায় ভুল বাড়ে, আর authorization-এর ভুল চুপচাপ থাকে। পর্ব ০৩-এর economy of mechanism এখানেও খাটে। সাধারণত সবচেয়ে সরল মডেল দিয়ে শুরু করে একটি কেন্দ্রীয় can(subject, action, object) ফাংশনের পেছনে রাখা ভালো। ভেতরের মডেল পরে বদলানো গেলেও ডাকার জায়গাগুলো বদলাতে হবে না।

বাস্তবের বেশিরভাগ বড় সিস্টেম মিশ্র। মোটা দাগে role, ডেটার সীমায় tenant আর শর্ত, শেয়ার করা বস্তুতে সম্পর্ক। প্রশ্নটি “কোন একটি মডেল” নয়, “কোন স্তরে কোন মডেল”.

মূল উপলব্ধি: মডেল বাছাই ফ্যাশনের প্রশ্ন নয়। প্রতিষ্ঠানের নিয়ম যে ভাষায় ভাবা হয়, সবচেয়ে সরল যে মডেলে তা সৎভাবে প্রকাশ করা যায়, সেটিই নিন।

প্র ০২Bell-LaPadula গাণিতিকভাবে এত গোছানো হলেও ব্যবসায়িক জগতে সরাসরি জনপ্রিয় হলো না কেন? এর পরে কী এলো?

Bell-LaPadula এসেছিল ১৯৭০-এর দশকে যুক্তরাষ্ট্রের সামরিক কম্পিউটারের প্রশ্ন থেকে: একই যন্ত্রে ভিন্ন স্তরের গোপন তথ্য থাকলে ফাঁস ঠেকানো যাবে কীভাবে? উত্তরটি গণিতে প্রমাণ করার মতো পরিষ্কার ছিল। কিন্তু মডেলের লক্ষ্য একটিই: গোপনীয়তা।

ব্যবসার প্রধান ভয় অনেক সময় ভিন্ন। ব্যাংকের কাছে হিসাবের অঙ্ক ফাঁসের চেয়ে অঙ্ক ভুলভাবে বদলে যাওয়া বেশি ভয়ংকর। Biba ১৯৭৭ সালে অখণ্ডতার আয়না-মডেল দিলেন, তবু সেটিও স্তরের ভাষায়। ১৯৮৭ সালে David Clark ও David Wilson বাণিজ্যিক নিয়ন্ত্রণ নিয়ে লিখলেন, যা Clark-Wilson model নামে পরিচিত। তাঁদের যুক্তি: ব্যবসায় ব্যবহারকারী সরাসরি তথ্য বদলান না, যাচাই করা প্রক্রিয়ার মধ্য দিয়ে বদলান, আর দায়িত্ব ভাগ থাকে। হিসাবের খাতায় ঘষে মোছা হয় না, সংশোধনী লেখা হয়। আজকের maker-checker এই চিন্তারই বংশধর।

আরেকটি গভীর সীমা হলো covert channel. Lampson ১৯৭৩ সালে confinement সমস্যা নিয়ে লিখে দেখান, নিয়ম মেনেও তথ্য বের হতে পারে। একটি প্রচলিত উদাহরণ: একটি প্রোগ্রাম disk কতটা ব্যস্ত রাখছে, সেই ধরন দেখে অন্য প্রোগ্রাম তথ্য অনুমান করে। অর্থাৎ মডেল যা বর্ণনা করে না, সেই পথে ফাঁস সম্ভব। আবার বাস্তব কাজে উঁচু স্তরের তথ্য নিচে নামানোর দরকার পড়ে, যেমন প্রতিবেদনের সারাংশ প্রকাশ। তখন বিশ্বস্ত ব্যতিক্রম লাগে, আর তাতে মডেলের পরিচ্ছন্নতা কমে।

তবু মডেলগুলো হারিয়ে যায়নি। MAC-এর লেবেলের ধারণা SELinux-এ, data classification-এ আর Biba-র ছায়া আধুনিক OS-এর integrity level-এ দেখা যায়, যা ইন্টারনেট থেকে আসা কম-বিশ্বস্ত ফাইলকে আলাদা করে।

মূল উপলব্ধি: নিরাপত্তা মডেল একটি নির্দিষ্ট ক্ষতি ঠেকায়। আপনার সবচেয়ে বড় ক্ষতি কোনটি, সেটি না জেনে মডেল বাছলে সুন্দর গণিত ভুল সমস্যার সমাধান করবে।

প্র ০৩অনুমতি সরিয়ে দিলেই কি তা সঙ্গে সঙ্গে কার্যকর? Zanzibar-এর “new enemy problem” কী শেখায়?

সহজ উত্তর “হ্যাঁ” হওয়ার কথা, কিন্তু বড় distributed system-এ তা নিশ্চিত নয়। গতি রাখতে ACL একাধিক জায়গায় কপি আর cache করা থাকে। ফলে এক জায়গায় অনুমতি সরলেও অন্য জায়গা কিছুক্ষণ পুরোনো তথ্য দেখতে পারে।

Zanzibar পেপার এই বিপদকে বলে new enemy problem, আর দুটি উদাহরণ দেয়। প্রথমটি: অ্যালিস একটি ফোল্ডার থেকে বব-কে সরালেন, তারপর চার্লিকে সেই ফোল্ডারে নতুন নথি রাখতে বললেন। পরীক্ষা যদি পুরোনো ACL দেখে, বব নতুন নথি দেখে ফেলতে পারেন। দ্বিতীয়টি: অ্যালিস একটি নথি থেকে বব-কে সরালেন, তারপর চার্লিকে নতুন বিষয়বস্তু যোগ করতে বললেন। পুরোনো ACL দিয়ে নতুন বিষয়বস্তু যাচাই হলে একই ফাঁস ঘটে। দুটি ক্ষেত্রেই ব্যাপারটি শুধু বিলম্ব নয়। ক্রম ভেঙেছে: ব্যবহারকারী যে পরিবর্তন আগে করেছেন, সিস্টেম সেটি পরে মেনেছে।

পেপারের সমাধান zookie নামের একটি অস্বচ্ছ token. বিষয়বস্তু বদলের সময় একটি সময়-চিহ্ন নেওয়া হয়, আর পরের অনুমতি-যাচাই অন্তত সেই সময়ের মতো নতুন ACL দেখবে, এই নিশ্চয়তা দেওয়া হয়। এতে বেশিরভাগ যাচাই একটু পুরোনো, দ্রুত copy থেকেও করা যায়, আবার ক্রম ভাঙে না। পেপার এজন্য Spanner-এর বৈশ্বিক সময়ক্রমের ওপর নির্ভর করে।

আপনার ছোট সিস্টেমেও প্রশ্নটি একই। Role cache-এর মেয়াদ ১৫ মিনিট হলে বরখাস্ত কর্মী ১৫ মিনিট কাজ চালাতে পারেন। JWT-তে role লেখা থাকলে token-এর মেয়াদ পর্যন্ত পুরোনো role চলতে পারে (পর্ব ১৭)। তাই সংবেদনশীল কাজে তাজা যাচাই, ছোট মেয়াদ, আর জরুরি প্রত্যাহারে cache মুছে ফেলার পথ রাখতে হয়।

মূল উপলব্ধি: Authorization শুধু “কী নিয়ম” নয়, “কোন সময়ের নিয়ম”. Cache-এর মেয়াদ একটি নিরাপত্তা সিদ্ধান্ত, শুধু কর্মক্ষমতার নয়।

প্র ০৪Confused deputy ১৯৮৮ সালের সমস্যা, তাহলে আজও কেন ফিরে আসে? AI agent কি একে আরও কঠিন করছে?

Norm Hardy-র ঘটনায় একটি compiler-এর নিজের অধিকার ছিল, আর ব্যবহারকারীর দেওয়া ফাইলের নামে সে লিখত। সমস্যা compiler-এর কোডে সাধারণ বাগ ছিল না। সমস্যা ছিল একটি প্রোগ্রাম দুজনের অধিকারে কাজ করছিল, আর কোন কাজ কার, তা আলাদা ছিল না। Hardy-র দেখানো সমাধান capability: নামের বদলে অধিকারসহ টোকেন।

আজ প্রায় প্রতিটি নকশায় এই গঠনটি আছে। Backend-এর database account সব ব্যবহারকারীর সারি পড়তে পারে। প্রকাশিত প্রতিবেদন অনুযায়ী ২০১৯ সালের Capital One ঘটনায় ভুল configuration করা একটি firewall স্তরের মাধ্যমে একটি cloud role-এর পরিচয় ব্যবহার করা হয়েছিল, আর সেই role-এর অনুমতি ছিল প্রয়োজনের চেয়ে অনেক চওড়া। রক্ষকের শিক্ষাটি পরিষ্কার: অন্যের অনুরোধে চলে এমন উপাদানের নিজের অধিকার ছোট রাখতে হবে, আর সেই অধিকার ব্যবহারে নজর রাখতে হবে। ব্যবহারের ধরন অস্বাভাবিক হলে সতর্কতা দরকার।

গঠনটি ফিরে আসে কারণ এটি সুবিধাজনক। একটি service-কে সব অধিকার দিলে কোড সহজ হয়। ব্যবহারকারীর পরিচয় প্রতিটি স্তরে বয়ে নেওয়া ঝামেলার। OAuth-এর delegated access (পর্ব ১৮) আর “on behalf of” ধরনের token এই পরিচয় বয়ে নেওয়ারই চেষ্টা।

AI agent এই গঠনকে আরও তীব্র করে। Agent-এর হাতে আপনার email, ফাইল আর API-র অধিকার। আর সে নির্দেশ আর ডেটাকে পরিষ্কারভাবে আলাদা করতে পারে না। একটি নথির ভেতরের লেখাও তার কাছে নির্দেশ মনে হতে পারে। তাই Hardy-র প্রশ্নটিই নতুন করে ওঠে: এই কাজটি কার অধিকারে, কার ইচ্ছায়? প্রতিরক্ষাও পুরোনো: সরু অধিকার, প্রতিটি কাজের জন্য আলাদা যাচাই, ঝুঁকির কাজে মানুষের অনুমোদন, পূর্ণ log.

মূল উপলব্ধি: যেকোনো মধ্যস্থতাকারী উপাদান দেখলে জিজ্ঞেস করুন: সে কার হয়ে কাজ করছে, আর যাচাই হচ্ছে কার অনুমতি? দুটির উত্তর আলাদা হলে সেখানেই ঝুঁকি।

প্র ০৫Authorization এক জায়গায় কেন্দ্রীভূত করলে সেই কেন্দ্র নষ্ট হলে কী হবে? সিদ্ধান্ত service down হলে অনুরোধ যাবে, না আটকাবে?

কেন্দ্রীয় যাচাইয়ের সুবিধা স্পষ্ট: নিয়ম এক জায়গায়, audit এক জায়গায়, পরিবর্তন একবারে। কিন্তু পর্ব ০৩-এ দেখা least common mechanism সতর্ক করে যে অভিন্ন যন্ত্র সবার একক ব্যর্থতার বিন্দু। PDP থেমে গেলে পুরো পণ্য থামতে পারে।

ডিফল্ট উত্তর fail secure: সিদ্ধান্ত না পেলে deny. কারণ fail open হলে একটি network সমস্যাই সব তালা খুলে দেয়, আর সেই সমস্যা ইচ্ছাকৃতও ঘটানো যেতে পারে। তবে পুরো সিস্টেমের দাম ভাবতে হবে। হাসপাতালের রোগীর ফাইল PDP-এর ত্রুটিতে বন্ধ হওয়া রোগীর ক্ষতি করতে পারে। সেখানে break-glass পথ রাখা হয়: জরুরি প্রবেশ, কড়া log আর পরে পর্যালোচনা। অর্থাৎ deny-ই ভিত্তি, আর ব্যতিক্রম আগে থেকে নকশা করা, হঠাৎ নয়।

বাস্তবে উপলব্ধতা বাড়াতে কয়েকটি কৌশল আছে। Policy প্রতিটি service-এর পাশে local engine-এ রাখা, যাতে সিদ্ধান্তে network না লাগে; তখন কেন্দ্র থামলেও শেষ জানা policy চলে। সিদ্ধান্ত ছোট সময়ের জন্য cache করা, যদিও এতে প্রত্যাহার দেরি হয়। Zanzibar পেপার জানায়, তারা ৯৫তম percentile-এ ১০ মিলিসেকেন্ডের কম সময় আর ৯৯.৯৯৯%-এর বেশি availability বজায় রেখেছে। সংখ্যাগুলো দেখায়, এই সেবা কতটা গুরুত্বপূর্ণ ধরা হয়, প্রতিটি প্রতিষ্ঠানের লক্ষ্য নয়।

কেন্দ্রীয় মানেই একটি বড় server নয়। “নিয়ম কেন্দ্রীয়, প্রয়োগ ছড়ানো” একটি ভালো মধ্যপথ। Policy এক repository-তে, review এক জায়গায়, কিন্তু মূল্যায়ন প্রতিটি service-এর কাছে। প্রতিটি service-এ PEP থাকবে, যাতে gateway-র পেছনের ভেতরের পথেও যাচাই হয়; zero trust-এর চিন্তাও তাই।

মূল উপলব্ধি: নিরাপত্তা আর উপলব্ধতা দুটিই লক্ষ্য। ব্যর্থতার সময় সিস্টেম কী করবে, সেটি ঘটনার রাতে নয়, নকশার সময়ই ঠিক করুন আর মহড়ায় পরীক্ষা করুন।

অনুশীলন

খাতা-কলম আর এই পাতার সিমুলেটরই যথেষ্ট। সবকিছু নিজের ডেটা বা toy ডেটায় করুন।

  1. হিসাব: একটি প্রতিষ্ঠানে ৮০০ জন কর্মী, প্রত্যেকের গড়ে ৪০টি অনুমতি। (ক) সরাসরি দিলে কতটি সারি? (খ) ২৫টি role (প্রতিটিতে ৪০টি অনুমতি) আর গড়ে ১.৫টি role হলে কতটি সারি? (গ) ৫ বিভাগ, ১০ শাখা, ৪ গ্রেডে সম্ভাব্য role কত, আর attribute মান কত? (ঘ) ৬টি role, ১০টি action আর ৩ ধরনের object মালিকানায় test ঘর কত?

    (ক) ৮০০ × ৪০ = ৩২,০০০। (খ) ২৫ × ৪০ = ১,০০০ আর ৮০০ × ১.৫ = ১,২০০, মোট ২,২০০; প্রায় ১৪.৫ গুণ কম। (গ) ৫ × ১০ × ৪ = ২০০টি role, কিন্তু attribute মান ৫ + ১০ + ৪ = ১৯টি। (ঘ) ৬ × ১০ × ৩ = ১৮০টি।

  2. আউটপুট অনুমান করুন: rbac_matrix.js-এ lead: ['support', 'finance'] বদলে lead: ['support'] করলে আউটপুটের kamal সারি আর শেষ লাইন কী হবে? আগে খাতায় লিখুন, তারপর বদলে চালান।

    FAIL লাইন আর থাকবে না। kamal সারি হবে Y Y Y N N, আর শেষ লাইন cells tested: 20 failed: 0. কামাল lead হিসেবে refund.approve পান, আর support হয়ে viewer পর্যন্ত উত্তরাধিকারে ticket.reply ও order.read পান। Finance-এর পথ বন্ধ, তাই invoice.read আর report.export নেই। ছক তখন policy-র সঙ্গে মিলে যায়।

  3. নকশা ও সমালোচনা: একটি কাল্পনিক ক্লিনিক SaaS: অনেক ক্লিনিক, প্রতিটিতে ডাক্তার, রিসেপশনিস্ট, হিসাবরক্ষক। ডাক্তার শুধু নিজের রোগীর ফাইল দেখবেন, জরুরি অবস্থায় ব্যতিক্রম লাগবে। একজন ডেভেলপার প্রস্তাব দিলেন: “role আর clinic_id request-এর JSON-এ আসবে, frontend ঠিক পাতা দেখাবে।” এই প্রস্তাবের সমস্যা বলুন, আর একটি ভালো নকশা দিন।

    সমস্যা: ব্যবহারকারীর পাঠানো মান দিয়ে সিদ্ধান্ত, ফলে পরিচয় আর tenant দুটিই অবিশ্বস্ত। Frontend যাচাই কোনো নিরাপত্তা নয়। মালিকানার কোনো যাচাই নেই।

    ভালো নকশা: Role আর clinic আসবে যাচাই করা session থেকে। RBAC দেবে মোটা দায়িত্ব। ReBAC বা মালিকানা শর্ত দেবে “এই রোগী এই ডাক্তারের”. প্রতিটি query-তে clinic ছাঁকনি, সম্ভব হলে row-level security. জরুরি প্রবেশে break-glass: কারণ লেখা, ছোট মেয়াদ, কড়া log আর পরে পর্যালোচনা। Test ছকে থাকবে অন্য ডাক্তারের রোগী আর অন্য ক্লিনিকের রোগী, দুটি নেতিবাচক ঘর। আইনি দিক থাকলে পর্ব ৭০ দেখুন।

  4. নিজের access review: নিজের একটি cloud drive আর ফোনের app permission পর্যালোচনা করুন। কতগুলো “link থাকা যে কেউ দেখতে পারে” ধরনের শেয়ার আছে? কোন app-এর ক্যামেরা বা contact অনুমতি আছে, যা ছয় মাসে কাজে লাগেনি? কেবল নিজের account দেখুন।

    সাধারণত পুরোনো প্রকল্পের শেয়ার লিংক আর একবার ব্যবহার করা app বেরিয়ে আসে। Share link মূলত capability: লিংক যার হাতে, অনুমতি তার। তাই অপ্রয়োজনীয় লিংক বন্ধ করুন, নতুন শেয়ারে নির্দিষ্ট মানুষ বা মেয়াদ দিন, আর অব্যবহৃত app-এর অনুমতি সরান। এই কাজটিই প্রতিষ্ঠানের access review-এর ছোট সংস্করণ: তালিকা, প্রমাণ, সিদ্ধান্ত, বাস্তবায়ন।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি অনুমতি-সিদ্ধান্তের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. Authentication শেষে অনুরোধ PEP-তে আসে
  2. PEP সিদ্ধান্তের জন্য PDP-কে প্রশ্ন করে
  3. PDP দরকারি attribute সংগ্রহ করে
  4. PDP সব policy যাচাই করে ফল ঠিক করে
  5. PEP ফল প্রয়োগ করে: allow হলে যেতে দেয়, নয়তো আটকায়
  6. সিদ্ধান্ত কারণসহ log-এ লেখা হয়

Access control matrix-কে কলাম ধরে ভাগ করে প্রতিটি বস্তুর সঙ্গে রাখলে কী পাওয়া যায়?

  • Capability list
  • Access control list (ACL)
  • Role hierarchy
  • Security label

Bell-LaPadula মডেলে “Secret” স্তরের একজন subject “Public” স্তরের নথি নিয়ে কী করতে পারেন?

  • পড়তে আর লিখতে দুটোই পারেন
  • শুধু লিখতে পারেন, পড়তে পারেন না
  • শুধু পড়তে পারেন, লিখতে পারেন না
  • কিছুই করতে পারেন না

একটি প্রতিষ্ঠানে ৪টি বিভাগ, ৫টি শাখা আর ৩টি গ্রেড। প্রতিটি মিশ্রণের জন্য আলাদা role বানালে role কতটি, আর এই সমস্যার নাম কী?

  • ১২টি, privilege creep
  • ২০টি, privilege creep
  • ১২টি, role explosion
  • ৬০টি, role explosion

Deny-overrides নিয়মে একটি অনুরোধে দুটি permit আর একটি deny policy মিলল। ফল কী?

  • Deny
  • Permit, কারণ permit সংখ্যায় বেশি
  • সিদ্ধান্ত মানুষের কাছে যাবে
  • প্রথম মেলা নিয়মের ফল

একটি API-র প্রতিটি অর্ডার পাতায় login যাচাই আছে, কিন্তু অর্ডারটি ওই ব্যবহারকারীর কি না যাচাই নেই। এই নকশার সবচেয়ে ভালো সংশোধন কোনটি?

  • MFA বাধ্যতামূলক করা
  • Server-পাশে প্রতিটি অনুরোধে object-এর মালিকানা ও tenant যাচাই করা
  • Frontend-এ অন্যের অর্ডারের লিংক লুকানো
  • শুধু অর্ডার নম্বর এলোমেলো করা

একজন কর্মী তিনবার বিভাগ বদলেছেন, আর প্রতিবার আগের অনুমতি রয়ে গেছে। এই সমস্যার নাম কী, আর কোন প্রক্রিয়া এটি ধরে?

  • Confused deputy, penetration test
  • Role explosion, MFA
  • Privilege creep, access review
  • Covert channel, backup

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. Authorization-এর প্রশ্ন: কে, কোন কাজ, কিসের ওপর; ACL আর capability একই matrix-এর দুই রূপ।
  2. RBAC পদ দেখে, ABAC শর্ত দেখে, ReBAC সম্পর্কের পথ দেখে; বাস্তবে মিশিয়ে ব্যবহার হয়।
  3. PEP প্রয়োগ করে, PDP সিদ্ধান্ত নেয়; ফল সবসময় server-এ, ডিফল্ট deny, আর tenant আসে যাচাই করা session থেকে।
  4. Role-action ছকে test করুন, আর সিদ্ধান্ত কারণসহ log করুন।
  5. Mover-এর সময় অনুমতি সরান, সাময়িক অনুমতিতে মেয়াদ দিন, নিয়মিত access review করুন; মধ্যস্থতাকারীর ক্ষেত্রে দেখুন যাচাই কার অনুমতিতে হচ্ছে।

পরের পর্বে: সবচেয়ে ক্ষমতাধর account-গুলো আলাদা যত্ন চায়। পর্ব ২০-এ admin account, secret vault আর just-in-time access.

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান