21.5
CloudHSM বনাম KMS
পুরোপুরি তোমার নিয়ন্ত্রণে থাকা নিজস্ব hardware, high availability, KMS custom key store, আর কোনটায় কী সুবিধা তার তুলনা।
14 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি পারবে
- AWS CloudHSM কী, বুঝিয়ে বলতে: তোমার নিজের VPC-তে বসানো dedicated, single-tenant hardware security module, যেখানে hardware সামলায় AWS আর user ও key সামলাও শুধু তুমি।
- দায়িত্ব ঠিকমতো ভাগ করতে: AWS কী করে, IAM কী নিয়ন্ত্রণ করে, কোন কাজ শুধু HSM user-রাই পারে, আর credential হারালে AWS কেন তোমার key ফিরিয়ে দিতে পারে না।
- পরীক্ষায় FIPS 140 নিয়ে যা আসে তা বলতে: এখনকার তথ্য (CloudHSM-এর hsm2m.medium আর KMS দুটোই FIPS 140-3 Level 3), আর যেসব পুরোনো প্রশ্ন এখনো “KMS = Level 2” বলে, সেগুলোর উত্তর কীভাবে দেবে।
- কয়েকটা Availability Zone জুড়ে HSM-এর cluster বানিয়ে CloudHSM-কে highly available করতে, আর একটা মাত্র HSM থাকলে কী বিপদ, বলতে।
- KMS custom key store দিয়ে S3, EBS, RDS আর অন্য service-এ নিজের HSM ব্যবহার করতে, এর শর্ত আর সীমা জানতে, আর কখন external key store লাগে বুঝতে।
- যেসব কাজে সরাসরি CloudHSM লাগে (PKCS#11, JCE, CNG, SSL/TLS offload, TDE, নিজের CA-র private key) সেগুলো চিনতে, আর scenario-র keyword দেখে KMS আর CloudHSM-এর মধ্যে ঠিকটা বাছতে।
#CloudHSM কেন: যখন KMS-এ কুলায় না
লেসন ২১.২-এ তুমি AWS KMS দেখেছ: AWS নিজের hardware security module-এ তোমার key বানায় আর পাহারা দেয়, সব AWS service সেগুলো ব্যবহার করতে পারে, আর key-প্রতি মাসে খরচ এক ডলার। বেশিরভাগ কাজে এটাই সঠিক উত্তর। এই লেসন সেইসব ক্ষেত্র নিয়ে, যেখানে এটা যথেষ্ট না, কারণ কোনো নিয়ম, কোনো auditor বা কোনো পুরোনো application এমন নিয়ন্ত্রণ চায় যা একটা shared, পুরোপুরি managed service দিতে পারে না। পরীক্ষায় KMS আর CloudHSM পাশাপাশি রেখে একটা বাছতে বলা খুব প্রিয় প্রশ্ন, তাই পুরো লেসন শেষ হবে একটা তুলনায়।
#HSM জিনিসটা কী
Hardware security module (HSM) হলো একটাই কাজের জন্য বানানো আলাদা একটা computer: cryptographic key বানানো, জমা রাখা আর ব্যবহার করা, এমনভাবে যে key কখনো খোলা অবস্থায় তার বাইরে যায় না। Application তাকে ডেটা পাঠায় আর ফল ফেরত পায় (ciphertext, plaintext, signature), key কখনো পায় না। এটা tamper-resistant: case খুললে, ফুটো করলে বা ভেতরে probe ঢোকালে সে নিজের key মুছে ফেলে। ব্যাংক, card network, certificate authority আর সরকার বহু বছর ধরে HSM ব্যবহার করছে। KMS নিজেও HSM-এর ওপরই চলে; পার্থক্য হলো HSM-এর মালিক কে আর নিয়ন্ত্রণ কার হাতে।
#CloudHSM তোমাকে কী দেয়
AWS CloudHSM তোমাকে AWS cloud-এ HSM ভাড়া দেয়:
- Dedicated, single-tenant hardware। প্রতিটা HSM শুধু তোমার; অন্য কোনো customer-এর key তাতে থাকে না। উল্টো দিকে KMS multi-tenant: অনেক customer-এর key একই AWS HSM-এর বহরে থাকে, software দিয়ে আলাদা করা।
- তোমার VPC-তে। প্রতিটা HSM তোমার বাছাই করা subnet-এ একটা elastic network interface হিসেবে বসে, private IP address নিয়ে। তোমার application নিজের network দিয়েই তার কাছে যায়।
- Hardware সামলায় AWS, key সামলাও তুমি। AWS device বসায়, firmware patch করে, ঠিক চলছে কি না নজর রাখে, নষ্ট hardware বদলে দেয় আর encrypted backup নেয়। HSM user আর key বানাও তুমি, আর সেগুলো ব্যবহার করতে পারো শুধু তুমিই: তোমার HSM-এ AWS-এর কোনো login নেই। Slide এক লাইনে বলে দেয়: KMS মানে encryption-এর software সামলায় AWS; CloudHSM মানে AWS encryption-এর hardware দেয়।
- Standard crypto interface। তোমার software HSM-এর সাথে কথা বলে CloudHSM client SDK দিয়ে: একটা PKCS#11 library, Java-র জন্য একটা JCE provider, Windows-এর জন্য CNG আর key storage provider, আর একটা OpenSSL engine। On-premises HSM-এর জন্য লেখা software অল্প বদলেই চলে আসে।
- Symmetric আর asymmetric দুই ধরনের key: AES key, RSA আর ECC key pair, HMAC key, signing আর hashing, random number। KMS-এও এই ধরনের key আছে, কিন্তু CloudHSM তার HSM যত algorithm আর key length সমর্থন করে সবই দেয়, আগে থেকে ঠিক করা ছোট তালিকা না।
- প্রতি HSM-এর প্রতি ঘণ্টা ধরে bill, আগাম কোনো খরচ নেই আর কোনো free tier নেই (us-east-1-এ HSM-ঘণ্টায় প্রায় ১.৬০ USD, কিছু Region-এ বেশি; high availability-র জন্য দুটো HSM মানে মাসে ২,০০০ USD-এর বেশ ওপরে)। KMS-এর free tier আছে, আর বেশিরভাগ কাজে খরচ কয়েক cent।
#কে কী করে
CloudHSM বোঝার সবচেয়ে কাজের ছবি হলো: কে কী ছুঁতে পারে তার একটা তালিকা।
| কে | যা পারে | যা পারে না |
|---|---|---|
| AWS | HSM বসানো, firmware patch, স্বাস্থ্য দেখা, নষ্ট hardware বদলানো, cluster-এর (encrypted) backup নেওয়া, তোমার VPC পর্যন্ত network চালানো | তোমার HSM-এ login, তোমার key ব্যবহার, পড়া বা বের করা, HSM-এর password reset |
| IAM user আর role (AWS API) | Cluster আর HSM বানানো, দেখা, tag দেওয়া, মুছে ফেলা, backup restore ও copy করা (infrastructure-এর CRUD) | HSM-এ login বা ভেতরের কোনো key ব্যবহার |
| HSM admin (একজন HSM user) | HSM user বানানো ও সামলানো, policy ঠিক করা, key share করা, cluster activate করা | Encryption-এর জন্য key ব্যবহার (ওটা crypto user-এর কাজ) |
| Crypto user (একজন HSM user) | Key বানানো, import, (wrap করে) export, ব্যবহার আর মুছে ফেলা: encrypt, decrypt, sign, verify | অন্য user সামলানো |
এর তিনটা ফল:
- দুটো আলাদা permission ব্যবস্থা। AWS API দিয়ে কে cluster সামলাবে, তা ঠিক করে IAM। আর কে key ব্যবহার করবে, তা ঠিক করে HSM user, যারা আছে শুধু HSM-এর ভেতরে। CloudHSM-এর পুরো permission পাওয়া একজন IAM administrator-ও কিছু decrypt করতে পারে না; কিন্তু সে HSM মুছে ফেলতে পারে, তাই IAM-ও শক্ত রাখতে হবে।
- AWS তোমার key উদ্ধার করতে পারে না। HSM password-এর কোনো copy AWS রাখে না, কোনো গোপন দরজাও নেই। সব admin আর crypto user-এর credential হারালে key, আর সেই key দিয়ে encrypt করা সবকিছু, চিরতরে হারানো। কমপক্ষে দুজন admin রাখো, credential আলাদা আলাদা জায়গায় offline রাখো, আর quorum authentication চালু করো (স্পর্শকাতর কাজে N জন কর্মকর্তার মধ্যে M জনের অনুমোদন লাগবে)। Admin-রা multi-factor authentication-ও ব্যবহার করতে পারে।
- Channel-টা end-to-end encrypted। Client SDK HSM-এর সাথে এমন channel-এ কথা বলে যা AWS পড়তে পারে না (তোমার নিয়ন্ত্রণের certificate দিয়ে TLS)। HSM-এর security group-এ client-এর জন্য port 2223 থেকে 2225 খোলা থাকতে হবে।
CloudHSM-এ কে কী নিয়ন্ত্রণ করে
ঢাকার একটা ব্যাংক তাদের card আর payment-এর key রাখে CloudHSM-এ। দেখো কে hardware ছুঁতে পারে, কে cluster সামলাতে পারে, আর key ব্যবহার করতে পারে কেবল কে।
পরিস্থিতি
App ঢোকে HSM-এর user হয়ে, IAM user হয়ে না, আর key কখনো HSM ছেড়ে বের হয় না।
HSM-টা ব্যাংকের নিজের subnet-এ একটা network interface হিসেবে বসে, private IP নিয়ে। App-এ চলে CloudHSM client SDK, যেটা HSM পর্যন্ত একটা end-to-end encrypted channel খোলে: এর ভেতর দিয়ে কী যাচ্ছে AWS পড়তে পারে না।
#FIPS 140: level মানে কী, আর পরীক্ষা কী চায়
FIPS 140 হলো cryptographic module-এর জন্য মার্কিন সরকারের standard, NIST-এর validation program-এর অধীনে স্বীকৃত lab-এ যাচাই হয়। এর চারটা security level আছে; এখানে দরকারি দুটো:
- Level 2: tamper evidence (কেউ বাক্স খুললে seal দেখে বোঝা যায়) আর role-ভিত্তিক authentication।
- Level 3: tamper resistance (module হামলা টের পেয়ে নিজের key মুছে দেয়), পরিচয়-ভিত্তিক authentication, আর key যে interface দিয়ে যায় সেগুলোর শারীরিক আলাদা থাকা।
২০২১ সাল থেকে নতুন validation-এ FIPS 140-2-এর জায়গা নিয়েছে FIPS 140-3; level-গুলোর মানে মোটামুটি একই।
আজকের তথ্য:
- CloudHSM: এখনকার HSM type hsm2m.medium (২০২৪ থেকে) FIPS 140-3 Level 3 validated। পুরোনো hsm1.medium ছিল FIPS 140-2 Level 3; এপ্রিল ২০২৫ থেকে নতুন cluster-এ এটা নেওয়া যায় না, ৩১ মার্চ ২০২৬-এ এর support শেষ হয়েছে, আর চালু cluster-গুলো hsm2m.medium-এ সরিয়ে নেওয়া হয়েছে। Cluster বানানোর সময়ই বাছতে হয় FIPS mode (শুধু FIPS-অনুমোদিত algorithm) নাকি non-FIPS mode (আরও বেশি algorithm, শুধু hsm2m.medium-এ), পরে mode বদলানো যায় না।
- KMS: এর HSM ২০২৩ সালে FIPS 140-2 Level 3-এ validated হয়েছে, আর এখন FIPS 140-3 Level 3। ২০২৩-এর আগে ছিল Level 2; notes আর অনেক course-এর “KMS = Level 2” কথাটা সেখান থেকেই এসেছে।
#High availability: কয়েকটা Availability Zone জুড়ে cluster
একটা HSM মানে একটা Availability Zone-এ একটা device। তোমার একমাত্র HSM নষ্ট হলে key লাগে এমন প্রতিটা কাজ তার সাথে সাথেই ব্যর্থ, আর ওই key দিয়ে encrypt করা ডেটা নতুন HSM চালু না হওয়া পর্যন্ত decrypt করা যায় না। অর্থাৎ তুমি ব্যবস্থা না করলে CloudHSM highly available না।
তুমি যা বানাও তার একক হলো cluster:
- একটা cluster-এ থাকে ১ থেকে ২৮টা HSM (default quota প্রতি account-এ প্রতি Region-এ ৬টা HSM), একটা Region-এর আলাদা আলাদা AZ-এর subnet-এ বসানো।
- CloudHSM HSM-গুলোকে sync-এ রাখে: একটা HSM-এ বানানো key বা user নিজে থেকেই বাকিগুলোতে copy হয়। HSM থেকে HSM-এ key তোমাকে কখনো নিজে copy করতে হয় না।
- Client SDK সব HSM-এ load ভাগ করে দেয়, আর কোনোটা নষ্ট হলে সেটা বাদ দেয়, তাই বেশি HSM মানে বেশি কাজের ক্ষমতাও।
- CloudHSM কমপক্ষে প্রতি ২৪ ঘণ্টায় একবার cluster-এর encrypted backup নেয়, আর একই Region-এ তোমার হয়ে রেখে দেয়। Backup restore হয় শুধু CloudHSM hardware-এ; AWS তা পড়তে পারে না। Disaster recovery-র জন্য backup অন্য Region-এ copy করে সেখানে তা থেকে cluster বানাতে পারো।
- কোনো HSM নষ্ট হলে CloudHSM সেটা বদলে দেয়, আর নতুন HSM ভরে ওঠে cluster থেকে (একমাত্র HSM হলে সর্বশেষ backup থেকে, তাই ওই backup-এর পরে বানানো key হারিয়ে যায়)।
Production-এর জন্য AWS-এর পরামর্শ আলাদা AZ-এ কমপক্ষে দুটো HSM, আর বদলানোর সময়টুকুও একটা HSM-এ চালানো সম্ভব না হলে তিন বা তার বেশি। একটা cluster অন্য VPC থেকেও ব্যবহার করা যায় (যেমন VPC peering দিয়ে, লেসন ২২.১), যদি network-এর পথ থাকে আর security group client-কে অনুমতি দেয়।
কয়েকটা Availability Zone জুড়ে CloudHSM cluster
একটা HSM মানেই single point of failure। দেখো দুই AZ-এ দুটো HSM-এর cluster কীভাবে key মিলিয়ে রাখে আর একটা AZ পড়ে গেলেও কাজ চালিয়ে যায়, আর একটা মাত্র থাকলে কী হয়।
পরিস্থিতি
একটা HSM-এ যা করো, CloudHSM তা বাকিগুলোতে copy করে দেয়; client SDK request সব HSM-এ ভাগ করে পাঠায়।
App একটা নতুন signing key বানায়। Request-টা গিয়ে পড়ে AZ a-র HSM 1-এ।
#নিজের HSM দিয়ে AWS service চালানো: KMS custom key store
S3, EBS, RDS, DynamoDB, Lambda আর বাকিরা integrate করে KMS-এর সাথে, CloudHSM-এর সাথে না। তাদের কোনো “আমার HSM ব্যবহার করো” setting নেই। কোনো নিয়ম যদি বলে তোমার S3 bucket আর EBS volume যে key দিয়ে সুরক্ষিত সেগুলো dedicated hardware-এ থাকতে হবে, তাহলে সেতু হলো তোমার CloudHSM cluster-এর ওপর বসানো একটা KMS custom key store (KMS এর নাম দিয়েছে AWS CloudHSM key store):
Cluster তৈরি রাখো
একই account আর Region-এ একটা সক্রিয় cluster, যাতে আলাদা AZ-এ কমপক্ষে দুটো সক্রিয় HSM। তাতে kmsuser নামে একটা আলাদা crypto user বানাও।
Key store বানাও আর connect করো
KMS-এ একটা custom key store বানাও যেটা cluster-কে দেখায় (cluster-এর trust anchor certificate আর kmsuser-এর password দিয়ে), তারপর connect করো। KMS cluster পর্যন্ত network-এর পথ বানায়, kmsuser হয়ে login করে আর তার password বদলে ফেলে।
এতে KMS key বানাও
এমন একটা symmetric KMS key বানাও যার origin এই key store। KMS তোমার HSM-এর ভেতরে একটা 256-bit AES key বানায়; সেটা বের করা যায় না, আর কখনো খোলা অবস্থায় HSM ছাড়ে না।
অন্য যেকোনো customer managed key-এর মতো ব্যবহার করো
ওই key বেছে নাও S3 default encryption, EBS volume, RDS database বা Secrets Manager secret-এর জন্য। Service যথারীতি KMS-কে ডাকে; KMS key policy আর IAM দেখে, তারপর cryptographic কাজটা চালায় তোমার HSM-এ।
কী পাও: KMS-এর integration আর key policy-র নিয়ম, key-এর প্রতিটা ব্যবহারের CloudTrail log (key store-এর ID সহ), আর তোমার দিকে HSM audit log। যেকোনো সময় key store disconnect করতে পারো; disconnect থাকা অবস্থায় কেউ তার key ব্যবহার করতে পারে না, এটা ব্যাংকের নিজের হাতের kill switch।
সীমাগুলো, যেগুলো পরীক্ষায় ভালো ফাঁদ হয়:
- শুধু symmetric encryption key। Custom key store-এ asymmetric, HMAC বা multi-Region key নেই, import করা key material-ও নেই।
- নিজে থেকে key rotation নেই। Rotate করতে নতুন একটা KMS key বানাও আর alias সেটার দিকে সরাও (পুরোনো ডেটা KMS পুরোনো key দিয়েই decrypt করতে থাকে)।
- Key বানাতে আলাদা AZ-এ দুটো সক্রিয় HSM লাগে; বাকি সব কাজ একটাতেও চলে। প্রতিটা cluster কেবল একটা key store-এর পেছনে থাকতে পারে, আর একটা account-এ প্রতি Region-এ সর্বোচ্চ ১০টা custom key store।
- তোমার availability-ই এখন KMS-এর availability। Cluster-এর HSM চলে গেলে, key store disconnect হলে বা kmsuser-এর password বদলালে, ওই key ব্যবহার করা প্রতিটা service আর decrypt করতে পারে না।
- খরচ: KMS key-এর স্বাভাবিক দাম (key-প্রতি মাসে ১ USD আর request) আর HSM-এর ঘণ্টা।
তোমার CloudHSM cluster-এর ওপর KMS custom key store
S3 আর EBS শুধু KMS-কে ডাকতে জানে। Custom key store থাকলে তারা KMS-কেই ডাকে, কিন্তু key material আর প্রতিটা কাজ থাকে তোমার HSM-এর ভেতরে।
পরিস্থিতি
S3 যথারীতি KMS-এর কাছে data key চায়; KMS সেটা তোমার HSM দিয়ে বানিয়ে encrypt করায়।
একটা loan-এর কাগজ upload হয় SSE-KMS আর ব্যাংকের key দিয়ে, যে key থাকে custom key store-এ। যেকোনো KMS key-এর বেলায় S3 যা করে এখানেও তাই: KMS-এর কাছে একটা data key চায়।
#SSE-C আর Redshift-এর সাথে CloudHSM
Slide আরও দুটো পুরোনো integration যোগ করে:
- S3 SSE-C (লেসন ১০.৮): প্রতিটা request-এর সাথে তুমি যে key পাঠাও, S3 তা দিয়ে encrypt করে ভুলে যায়। তোমার application সেই key-গুলো CloudHSM-এ রাখতে পারে। তবে মনে রেখো: S3-কে পাঠাতে হলে key-কে HSM ছেড়ে বের হতেই হয়, তাই এতে জমা থাকা key সুরক্ষিত, কিন্তু ব্যবহারের সময়টা না। আজকের দিনে custom key store আর SSE-KMS key-কে HSM-এর ভেতরেই রাখে, সেটাই বেশি পরিচ্ছন্ন নকশা।
- Amazon Redshift (লেসন ১৭.২)-এর একটা option আছে cluster-এর encryption key একটা HSM-এ রাখার। কোন service দিয়ে Redshift তার key তোমার নিয়ন্ত্রণের hardware module-এ রাখতে পারে, প্রশ্ন এলে উত্তর CloudHSM। নতুন নকশায় Redshift সাধারণত একটা KMS key দিয়ে encrypt হয়, আর সেই key থাকতে পারে CloudHSM key store-এ।
#যেসব কাজে সরাসরি CloudHSM লাগে
কিছু software KMS-এর সাথে না, সরাসরি HSM-এর সাথে কথা বলে। এগুলোই CloudHSM-এর নিজের মাঠ:
- SSL/TLS offload। EC2-র web server (nginx, OpenSSL-সহ Apache, বা Windows-এ IIS) তাদের TLS private key রাখে CloudHSM-এ। প্রতিটা handshake-এর private key-এর ধাপটা server HSM-কে দিয়ে করায়; key কখনো server-এর disk-এ বসে থাকে না। চুরি হওয়া disk-এর copy-তে থাকে শুধু key-এর একটা reference। তোমার TLS যদি ALB, CloudFront বা API Gateway-তে শেষ হয়, সেখানে ACM certificate ব্যবহার করো (লেসন ২১.৪)।
- Transparent Data Encryption (TDE)। Oracle database আর SQL Server তাদের TDE master key রাখে CloudHSM-এ (Oracle PKCS#11 দিয়ে, SQL Server CNG দিয়ে)। এটা EC2-তে তুমি নিজে যে database চালাও তার জন্য; RDS-এর TDE-র নিজস্ব option আছে (লেসন ৭.৪)।
- তোমার নিজের certificate authority। তোমার CA যত certificate দেয় সবগুলো যে private key দিয়ে sign হয়, সেটাই তোমার সবচেয়ে দামি key; সেটা থাকে HSM-এ, sign-ও হয় সেখানে।
- Sign আর যাচাই: code signing, document signing, HMAC দিয়ে payment message-এর প্রমাণ।
- নিজস্ব application, যা PKCS#11, JCE বা CNG দিয়ে লেখা, প্রায়ই on-premises HSM থেকে সরিয়ে আনা।
CloudHSM-এ SSL/TLS offload
ব্যাংকের EC2-র web server নিজেরাই HTTPS terminate করে। TLS private key থাকে CloudHSM-এ, আর private key লাগে এমন প্রতিটা কাজের জন্য server HSM-কে বলে।
পরিস্থিতি
Certificate public, server-এই থাকে; private key দিয়ে signature হয় HSM-এর ভেতরে।
একজন গ্রাহক internet banking site খোলেন। Browser web server-এর সাথে TLS handshake শুরু করে।
#CloudHSM বনাম KMS
| AWS KMS | AWS CloudHSM | |
|---|---|---|
| Tenancy | Multi-tenant (AWS-এর shared HSM বহর) | Single-tenant (শুধু তোমার জন্য HSM) |
| Key কে সামলায় | HSM আর key-এর software চালায় AWS; তুমি key policy আর IAM দিয়ে key নিয়ন্ত্রণ করো | শুধু তুমি, HSM user দিয়ে; AWS শুধু hardware সামলায় |
| FIPS 140 | FIPS 140-3 Level 3 (২০২৩-এর আগে Level 2) | FIPS 140-3 Level 3 (hsm2m.medium; hsm1.medium ছিল 140-2 Level 3) |
| Key-এর ধরন | AWS owned, AWS managed আর customer managed key; symmetric, asymmetric, HMAC | Symmetric, asymmetric, HMAC; যেকোনো সমর্থিত algorithm আর key length; signing আর hashing |
| Interface | KMS API (HTTPS), SDK, CLI | PKCS#11, JCE, CNG আর key storage provider, OpenSSL engine (client SDK) |
| AWS service-এর সাথে integration | প্রায় সব service-এর সাথে নিজে থেকেই | সরাসরি নেই; KMS custom key store দিয়ে |
| কোথায় চলে | Regional AWS endpoint; multi-Region key সম্ভব | তোমার VPC-তে (তোমার subnet-এ network interface); peering দিয়ে অন্য VPC থেকেও পৌঁছানো যায় |
| High availability | AWS সামলায় | Cluster-এ কয়েকটা AZ-এ HSM যোগ করো তুমি |
| Access control | IAM আর key policy | Cluster API-র জন্য IAM; key-এর জন্য HSM user (admin, crypto user), quorum আর multi-factor authentication সহ |
| Audit | প্রতিটা key ব্যবহারের CloudTrail; CloudWatch metric | API call-এর CloudTrail; CloudWatch Logs-এ HSM audit log |
| Key rotation | Customer managed key-এর (আর AWS managed key-এর) নিজে থেকে rotation, সাথে চাইলেই rotation | তোমার নিজের প্রক্রিয়া |
| Acceleration | নেই | SSL/TLS offload, Oracle TDE |
| দাম | Customer managed key-প্রতি মাসে ১ USD আর request; free tier আছে | HSM-ঘণ্টা ধরে (us-east-1-এ প্রায় ১.৬০ USD); free tier নেই |
এবার নিজে সিদ্ধান্তটা নিয়ে দেখো: একটা workload-এর চাহিদায় টিক দাও, তারপর দেখো কোন option জেতে, কোন চাহিদা সেটা ঠিক করে দিল, আর কোন চাহিদাগুলো একে অন্যের সাথে মেলে না।
KMS না CloudHSM?
একটা workload-এর কী কী লাগবে টিক দাও, তারপর “ঠিক করো” চাপো। একটা start-up-এর S3 bucket, এমন একটা ব্যাংক যার key dedicated hardware-এ রাখতেই হবে অথচ EBS আর RDS-ও চাই, আর এমন একটা payment switch যার Java code JCE দিয়ে sign করে, সব চেষ্টা করে দেখো।
উত্তর দেখতে “ঠিক করো” চাপো।
#কোথায় কোথায় গোলমাল হয়
- একমাত্র HSM নষ্ট। বদলি চালু না হওয়া পর্যন্ত সব কাজ বন্ধ, আর শেষ backup-এর পরে বানানো key হারানো। আলাদা AZ-এ দুই বা তার বেশি HSM চালাও।
- HSM credential হারানো। AWS reset করতে পারে না, key-ও উদ্ধার করতে পারে না। কমপক্ষে দুজন admin রাখো, credential offline রাখো, quorum authentication ব্যবহার করো।
- Client connect করতে পারে না। Cluster-এর security group client থেকে port 2223 থেকে 2225 খোলেনি, client এমন VPC-তে যেখান থেকে HSM-এর subnet-এ route নেই, বা client SDK-এর version hsm2m.medium-এর জন্য পুরোনো (Client SDK 5 লাগে)।
- Custom key store key বানাতে পারে না। আলাদা AZ-এ দুটোর কম সক্রিয় HSM, বা store disconnect করা।
- Custom key store-এর অধীনে সবকিছু decrypt হওয়া বন্ধ। Store disconnect হয়েছে, cluster-এ কোনো সক্রিয় HSM নেই, বা কেউ kmsuser-এর password বদলেছে। Connection state-এ নজর রাখো, আর kmsuser শুধু KMS-এর জন্য রাখো।
- কেউ custom key store-এ নিজে থেকে rotation বা multi-Region key আশা করছে। দুটোর কোনোটাই নেই; হাতে rotation-এর পরিকল্পনা করো, আর প্রতি Region-এ একটা করে key store রাখো।
- একজন IAM user cluster মুছে দিল। CloudHSM API-র IAM permission key ব্যবহার করতে না পারলেও infrastructure ধ্বংস করতে পারে। এগুলো সীমিত রাখো, আর backup রাখো (DR-এর জন্য অন্য Region-এ copy করা)।
- ভুল cluster mode। FIPS mode-এ বানানো cluster non-FIPS algorithm ব্যবহার করতে পারে না, আর mode বদলানো যায় না; backup-ও restore হয় শুধু একই mode-এর cluster-এ।
- বিশাল অপ্রত্যাশিত bill। ব্যবহার হোক বা না হোক, HSM যতক্ষণ আছে ততক্ষণ প্রতি ঘণ্টার bill। Test-এর HSM মুছে ফেলো, আর dedicated hardware-এর কোনো দরকার না থাকলে KMS নাও।
#System design-এ CloudHSM
- নিয়ন্ত্রিত core system: একটা ব্যাংক, একটা payment switch বা একটা সরকারি পরিচয়পত্রের system, যার key dedicated hardware-এ রাখতেই হবে, সে ব্যবহার করে তিন-AZ-এর একটা cluster, AWS service-এর জন্য একটা custom key store, আর নিজের payment ও signing software-এর জন্য সরাসরি PKCS#11 বা JCE access।
- Private PKI: ভেতরের certificate authority-র root বা issuing CA-র key থাকে CloudHSM-এ। নিজে HSM না চালিয়ে managed private CA চাইলে বিকল্প AWS Private CA (লেসন ২১.৪)।
- On-premises থেকে migration: যে application আগে থেকেই on-premises HSM-এর সাথে PKCS#11-এ কথা বলে, সে EC2-তে সরে এসে অল্প code বদলে CloudHSM-এর সাথে কথা বলে।
- KMS-এর সাথে স্তরে স্তরে সুরক্ষা: বেশিরভাগ ডেটায় সাধারণ KMS key; শুধু যেসব system-এর নাম নিয়ন্ত্রক সংস্থা বলেছে সেগুলোতে custom key store। এতে bill আর operational চাপ দুটোই কম থাকে।
#নিজে করে দেখো
CloudHSM-এ HSM-ঘণ্টা ধরে সত্যিকারের টাকা লাগে, তাই শেষে সব মুছে ফেলো। এই command-গুলো AWS CLI v2 আর Client SDK 5-এর CloudHSM CLI ব্যবহার করে। Password-গুলো শুধু placeholder: script-এ কখনো আসল password লিখবে না।
# 1. Create a cluster in FIPS mode across two private subnets in different AZs
aws cloudhsmv2 create-cluster --hsm-type hsm2m.medium --mode FIPS \
--subnet-ids subnet-0a1b2c3d4e5f60001 subnet-0a1b2c3d4e5f60002
# { "Cluster": { "ClusterId": "cluster-1a23b4cdefg", "State": "CREATE_IN_PROGRESS", "HsmType": "hsm2m.medium", "Mode": "FIPS", ... } }
# 2. Add the first HSM, then read the cluster's certificate signing request
aws cloudhsmv2 create-hsm --cluster-id cluster-1a23b4cdefg --availability-zone ap-southeast-1a
aws cloudhsmv2 describe-clusters --filters clusterIds=cluster-1a23b4cdefg \
--query 'Clusters[0].[State,Certificates.ClusterCsr]' --output text > cluster.csr
# UNINITIALIZED -----BEGIN CERTIFICATE REQUEST----- ...
# 3. Sign it with your own CA (openssl here), then initialize the cluster
openssl x509 -req -days 3652 -in cluster.csr -CA customerCA.crt -CAkey customerCA.key \
-CAcreateserial -out cluster.crt
aws cloudhsmv2 initialize-cluster --cluster-id cluster-1a23b4cdefg \
--signed-cert file://cluster.crt --trust-anchor file://customerCA.crt
# 4. On an EC2 client with Client SDK 5: activate the cluster and create users
sudo /opt/cloudhsm/bin/configure-cli -a 10.0.1.25 # the HSM's private IP
/opt/cloudhsm/bin/cloudhsm-cli interactive
# aws-cloudhsm > cluster activate (set the admin password)
# aws-cloudhsm > login --username admin --role admin
# aws-cloudhsm > user create --username kmsuser --role crypto-user
# aws-cloudhsm > user create --username payments --role crypto-user
# 5. Add a second HSM in another AZ (needed for HA and for a custom key store)
aws cloudhsmv2 create-hsm --cluster-id cluster-1a23b4cdefg --availability-zone ap-southeast-1b
aws cloudhsmv2 describe-clusters --filters clusterIds=cluster-1a23b4cdefg \
--query 'Clusters[0].Hsms[].[HsmId,AvailabilityZone,State]' --output table
# | hsm-111aaa222bbb | ap-southeast-1a | ACTIVE |
# | hsm-333ccc444ddd | ap-southeast-1b | ACTIVE |
# 6. Create and connect a KMS custom key store on the cluster
aws kms create-custom-key-store --custom-key-store-name bank-hsm-store \
--cloud-hsm-cluster-id cluster-1a23b4cdefg \
--trust-anchor-certificate file://customerCA.crt \
--key-store-password '<kmsuser-password>'
# { "CustomKeyStoreId": "cks-1234567890abcdef0" }
aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0 \
--query 'CustomKeyStores[0].ConnectionState'
# "CONNECTED"
# 7. Create a KMS key whose material lives in your HSMs, and use it with S3
aws kms create-key --origin AWS_CLOUDHSM --custom-key-store-id cks-1234567890abcdef0 \
--description "loan documents" --query 'KeyMetadata.[KeyId,Origin]'
# [ "1234abcd-12ab-34cd-56ef-1234567890ab", "AWS_CLOUDHSM" ]
aws s3 cp loan-2026-0042.pdf s3://bank-loans-example/ --sse aws:kms \
--sse-kms-key-id 1234abcd-12ab-34cd-56ef-1234567890ab
# 8. Copy the latest backup to another Region for DR
aws cloudhsmv2 describe-backups --filters clusterIds=cluster-1a23b4cdefg \
--query 'Backups[-1].BackupId' --output text
# backup-abcdefghijk
aws cloudhsmv2 copy-backup-to-region --destination-region ap-south-1 --backup-id backup-abcdefghijk
# 9. Clean up (keys in the store first, then the store, the HSMs and the cluster)
aws kms schedule-key-deletion --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --pending-window-in-days 7
aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
aws cloudhsmv2 delete-hsm --cluster-id cluster-1a23b4cdefg --hsm-id hsm-333ccc444ddd
aws cloudhsmv2 delete-hsm --cluster-id cluster-1a23b4cdefg --hsm-id hsm-111aaa222bbb
aws cloudhsmv2 delete-cluster --cluster-id cluster-1a23b4cdefg
Console-এও চেষ্টা করো: cluster-এর CloudWatch Logs group খুলে তোমার login আর key বানানোর HSM audit log entry দেখো, তারপর একই key-এর KMS call খুঁজে বের করো CloudTrail-এ। Custom key store মোছা যায় শুধু তার key-গুলো চলে যাওয়ার পরে (waiting period শেষে)।
#সারসংক্ষেপ
মূল কথাগুলো
- CloudHSM = তোমার VPC-তে dedicated, single-tenant HSM। Hardware সামলায় AWS; user আর key সামলাও শুধু তুমি। AWS তোমার key ব্যবহার করতে পারে না, আর credential হারালে key উদ্ধারও করতে পারে না।
- IAM সামলায় cluster (API); key নিয়ন্ত্রণ করে HSM user (admin, crypto user)। Log: API call-এর জন্য CloudTrail, HSM audit log যায় CloudWatch Logs-এ।
- FIPS: CloudHSM-এর hsm2m.medium FIPS 140-3 Level 3; KMS-ও এখন Level 3 (২০২৩-এর আগে Level 2)। পুরোনো প্রশ্ন এখনো “KMS = Level 2” বলতে পারে; ভরসা রাখো এই keyword-গুলোয়: single-tenant, exclusive control, PKCS#11/JCE/CNG, SSL/TLS offload, TDE।
- High availability: কয়েকটা AZ-এ HSM নিয়ে একটা cluster, নিজে থেকেই sync হয় আর client SDK load ভাগ করে; একটা HSM মানে single point of failure। Backup কমপক্ষে দিনে একবার, অন্য Region-এ copy করা যায়।
- AWS service CloudHSM ব্যবহার করে শুধু KMS custom key store দিয়ে (শুধু symmetric key, নিজে থেকে rotation নেই, multi-Region key নেই, key বানাতে আলাদা AZ-এ দুটো সক্রিয় HSM)। Key পুরোপুরি AWS-এর বাইরে → external key store (XKS)।
- KMS: multi-tenant, প্রায় সব service-এর সাথে integrated, নিজে থেকে rotation, free tier, সস্তা। CloudHSM: HSM-ঘণ্টা ধরে দাম, free tier নেই, চালাও তুমি।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
AWS CloudHSM-এ AWS কী সামলায়?
নিজেকে যাচাই করোপ্রশ্ন
একজন administrator একটা CloudHSM cluster-এর সব HSM admin আর crypto user-এর password হারিয়ে ফেলেছেন। AWS Support কী করতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
Tenancy নিয়ে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
CloudHSM client SDK কোন কোন standard cryptographic interface দেয়?
নিজেকে যাচাই করোপ্রশ্ন
CloudHSM-এর একটা HSM তোমার network-এ কোথায় দেখা যায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি একটাই CloudHSM HSM চালায়। Management জানতে চায় কীভাবে এটা highly available হবে। উত্তর কী?
নিজেকে যাচাই করোপ্রশ্ন
দুই HSM-এর একটা cluster-এর HSM 1-এ একটা key বানানো হলো। HSM 2 যাতে সেটা ব্যবহার করতে পারে, দলকে কী করতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা cluster-এ একটাই HSM। সেটা নষ্ট হলো ১১:৫০-এ, আর শেষ backup নেওয়া হয়েছিল রাত ২টায়। ১১:৪০-এ একটা key বানানো হয়েছিল। সম্ভাব্য ফল কী?
নিজেকে যাচাই করোপ্রশ্ন
একজন নিয়ন্ত্রক বলছেন, S3 bucket আর EBS volume যে key দিয়ে encrypt হয় তা বানানো আর ব্যবহার করা যাবে শুধু কোম্পানির নিয়ন্ত্রণের dedicated, single-tenant HSM-এ। Architect কী বানাবেন?
নিজেকে যাচাই করোপ্রশ্ন
একটা CloudHSM cluster-এর ওপর বসানো custom key store-এ KMS key বানানোর আগে cluster-কে কোন দুটো শর্ত মানতে হবে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
CloudHSM key store-এর KMS key-এ কোন দুটো feature সমর্থিত NOT?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা incident-এর সময় ব্যাংক চায় কিছু না মুছেই সব AWS service-কে তার HSM-ভিত্তিক KMS key ব্যবহার থেকে এখনই আটকাতে। কী করতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানিকে S3 SSE-KMS ব্যবহার করতেই হবে, কিন্তু তাদের নিয়ম বলছে key material AWS-এ কখনো রাখা যাবে না, dedicated HSM-এও না। কোনটা মানায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা application-এর Java service on-premises HSM-এ JCE provider দিয়ে লেনদেন sign করে। কোম্পানি এগুলো EC2-তে সরাচ্ছে, আর সবচেয়ে কম code বদলাতে চায়। কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
EC2-র web server নিজেরাই TLS terminate করে, আর security দল চায় TLS private key কখনো server-এ জমা না থাকুক। AWS-এর নিজস্ব উত্তর কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা Oracle database চলে EC2-তে। তার TDE master key রাখতে হবে FIPS-validated, single-tenant HSM-এ। কোন service?
নিজেকে যাচাই করোপ্রশ্ন
একটা পুরোনো practice প্রশ্ন বলছে: কোম্পানির key-এর জন্য FIPS 140-2 Level 3 validated, dedicated hardware লাগবে। প্রত্যাশিত উত্তর কী, আর কেন?
নিজেকে যাচাই করোপ্রশ্ন
KMS-এর HSM-এর এখনকার FIPS 140 validation কী?
নিজেকে যাচাই করোপ্রশ্ন
CloudHSM-এর HSM type আর cluster mode নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একজন IAM user-এর IAM policy সব CloudHSM API action-এর অনুমতি দেয়। এই user কোন দুটো কাজ করতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
HSM-গুলো সক্রিয় থাকলেও একটা দল তাদের নতুন EC2 client cluster-এর সাথে connect করতে পারছে না। সবচেয়ে সম্ভাব্য কারণ কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
CloudHSM audit করার সময় কোন দুটো তথ্য কোথায় যায়?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা start-up তাদের RDS database আর S3 bucket এমন key দিয়ে encrypt করতে চায় যা audit করা যায় আর প্রতি বছর rotate হয়, সবচেয়ে কম খরচ আর পরিশ্রমে। কোন option?
নিজেকে যাচাই করোপ্রশ্ন
AWS CloudHSM-এর দাম কীভাবে ধরা হয়?
নিজেকে যাচাই করোপ্রশ্ন
Slide বলছে S3 SSE-C-এর সাথে CloudHSM ভালো option। এই নকশার মূল সমঝোতাটা কী?
নিজেকে যাচাই করোপ্রশ্ন
VPC B-র একটা application-কে একই Region-এর VPC A-তে থাকা একটা CloudHSM cluster ব্যবহার করতে হবে। কী করলে কাজ হবে?
নিজেকে যাচাই করোপ্রশ্ন
কোন service এই বর্ণনার সাথে মেলে: multi-tenant, প্রায় সব AWS service-এর সাথে integrated, আর নিজে থেকে key rotate করতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
একজন সহকর্মী বলছেন: CloudHSM-এও জরুরি অবস্থায় AWS আমাদের key পড়তে পারে, ঠিক KMS-এর মতো। কোনটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
তুলনার slide বলছে, KMS key যে Region-এ বানানো তার বাইরে ব্যবহার করা যায় না। আজকের সঠিক ছবি কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা ব্যাংকের লাগবে (১) নিজের PKCS#11 payment software-এর জন্য dedicated HSM আর (২) ঠিক সেই HSM-এর key দিয়ে S3 আর RDS-এর encryption। সবচেয়ে সহজ নকশা কোনটা?