SSL/TLS (Secure Sockets Layer / Transport Layer Security) হল একটি নিরাপত্তা প্রোটোকল যা ইন্টারনেটের মাধ্যমে ডেটা ট্রান্সমিশনকে নিরাপদ করে। Apache Kafka-তে SSL/TLS এনক্রিপশন ব্যবহার করা হয়, যাতে Kafka ক্লাস্টার এবং তার ক্লায়েন্টদের মধ্যে যেকোনো ধরনের ট্রাফিক এনক্রিপ্ট করা যায়, যেমন প্রডিউসার এবং কনজিউমার থেকে বার্তা পাঠানো এবং গ্রহণ। এটি ডেটার গোপনীয়তা, অখণ্ডতা এবং অথেন্টিকেশন নিশ্চিত করতে সাহায্য করে, বিশেষ করে যখন ক্লাস্টারের কম্পোনেন্টগুলি বিভিন্ন নেটওয়ার্কে চলে।
এখানে আলোচনা করা হবে কিভাবে SSL/TLS দিয়ে Kafka ট্রাফিক এনক্রিপ্ট করা যায় এবং সেটি কিভাবে কনফিগার করতে হয়।
১. Kafka-তে SSL/TLS এনক্রিপশন কীভাবে কাজ করে?
SSL/TLS দিয়ে Kafka ক্লাস্টার এবং ক্লায়েন্টের মধ্যে যোগাযোগ সুরক্ষিত করতে নিম্নলিখিত তিনটি মূল নিরাপত্তা সুবিধা পাওয়া যায়:
- এনক্রিপশন (Encryption): ডেটা ট্রান্সমিশনের সময় ট্রাফিক এনক্রিপ্ট হয়, যা তৃতীয় পক্ষের দ্বারা পড়া বা পরিবর্তন করা অসম্ভব করে।
- অথেন্টিকেশন (Authentication): ক্লায়েন্ট এবং সার্ভার উভয়েরই সনাক্তকরণ করা হয়, যা নিরাপত্তা নিশ্চিত করে।
- ডেটা ইন্টেগ্রিটি (Data Integrity): ট্রান্সমিশন চলাকালীন ডেটার অখণ্ডতা নিশ্চিত হয়, যাতে কোনোভাবে ডেটা পরিবর্তিত না হয়।
Kafka-তে SSL/TLS কনফিগারেশন সম্পন্ন করতে, আপনাকে Kafka ব্রোকার এবং ক্লায়েন্ট উভয়ের মধ্যে সঠিক সার্টিফিকেট সেটআপ করতে হবে।
২. SSL/TLS কনফিগারেশন পদ্ধতি
Kafka ব্রোকার এবং ক্লায়েন্টের জন্য SSL/TLS কনফিগারেশন করতে কিছু নির্দিষ্ট পদক্ষেপ অনুসরণ করতে হয়:
২.১. SSL সার্টিফিকেট জেনারেট করা
Kafka-তে SSL ব্যবহার করতে হলে প্রথমে একটি সার্টিফিকেট অথরিটি (CA) থেকে সার্টিফিকেট তৈরি করতে হবে অথবা নিজেই একটি self-signed certificate তৈরি করতে পারেন। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো কীভাবে SSL সার্টিফিকেট তৈরি করতে হয়।
CA সার্টিফিকেট তৈরি: আপনি OpenSSL ব্যবহার করে একটি CA সার্টিফিকেট এবং প্রাইভেট কি জেনারেট করতে পারেন।
openssl genpkey -algorithm RSA -out ca-key.pem -aes256 openssl req -new -x509 -key ca-key.pem -out ca-cert.pem -days 3650Kafka ব্রোকার সার্টিফিকেট এবং প্রাইভেট কি তৈরি: Kafka ব্রোকারের জন্য সার্টিফিকেট এবং প্রাইভেট কী তৈরি করুন:
openssl genpkey -algorithm RSA -out kafka-key.pem -aes256 openssl req -new -key kafka-key.pem -out kafka-req.pem openssl x509 -req -in kafka-req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out kafka-cert.pem -days 3650Kafka ক্লায়েন্ট সার্টিফিকেট তৈরি: Kafka ক্লায়েন্টের জন্য একইভাবে সার্টিফিকেট তৈরি করতে হবে:
openssl genpkey -algorithm RSA -out client-key.pem -aes256 openssl req -new -key client-key.pem -out client-req.pem openssl x509 -req -in client-req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 3650
২.২. Kafka ব্রোকার কনফিগারেশন
Kafka ব্রোকারে SSL কনফিগার করতে আপনাকে server.properties ফাইলে কিছু নির্দিষ্ট প্যারামিটার সেট করতে হবে:
Kafka ব্রোকার কনফিগারেশন (server.properties):
নিম্নলিখিত কনফিগারেশনগুলি ব্রোকারের
server.propertiesফাইলে যুক্ত করুন:listeners=SSL://localhost:9093 advertised.listeners=SSL://your-broker-ip:9093 listener.security.protocol=SSL ssl.keystore.location=/path/to/kafka-keystore.jks ssl.keystore.password=<keystore-password> ssl.key.password=<key-password> ssl.truststore.location=/path/to/kafka-truststore.jks ssl.truststore.password=<truststore-password> ssl.client.auth=requiredlisteners: SSL সংযোগের জন্য ব্রোকারের পোর্ট নম্বর নির্ধারণ করে (এখানে 9093 ব্যবহার করা হয়েছে)।ssl.keystore.location: ব্রোকারের প্যাকেজ করা সার্টিফিকেট এবং প্রাইভেট কি ফাইলের অবস্থান।ssl.truststore.location: সার্ভারের সাথে বিশ্বাসযোগ্য ক্লায়েন্ট সার্টিফিকেটগুলোর জন্য ট্রাস্টস্টোর।ssl.client.auth: ক্লায়েন্ট অথেন্টিকেশন কার্যকর করতেrequiredসেট করা হয়েছে।
Keystore এবং Truststore তৈরি:
Kafka সার্ভার এবং ক্লায়েন্টের জন্য যথাযথ keystore এবং truststore তৈরি করতে আপনাকে
keytoolব্যবহার করতে হবে:Keystore তৈরি:
keytool -genkey -keyalg RSA -alias kafka -keystore kafka-keystore.jks -validity 3650Truststore তৈরি:
keytool -import -file ca-cert.pem -keystore kafka-truststore.jks
২.৩. Kafka ক্লায়েন্ট কনফিগারেশন
Kafka ক্লায়েন্ট (প্রডিউসার বা কনজিউমার) কনফিগারেশনের জন্য নিম্নলিখিত SSL সেটিংস প্রয়োজন:
Kafka প্রডিউসার কনফিগারেশন (Java):
Properties props = new Properties(); props.put("bootstrap.servers", "your-broker-ip:9093"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("security.protocol", "SSL"); props.put("ssl.truststore.location", "/path/to/kafka-truststore.jks"); props.put("ssl.truststore.password", "<truststore-password>"); props.put("ssl.keystore.location", "/path/to/kafka-keystore.jks"); props.put("ssl.keystore.password", "<keystore-password>"); props.put("ssl.key.password", "<key-password>");Kafka কনজিউমার কনফিগারেশন (Java):
Properties props = new Properties(); props.put("bootstrap.servers", "your-broker-ip:9093"); props.put("group.id", "test"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("security.protocol", "SSL"); props.put("ssl.truststore.location", "/path/to/kafka-truststore.jks"); props.put("ssl.truststore.password", "<truststore-password>"); props.put("ssl.keystore.location", "/path/to/kafka-keystore.jks"); props.put("ssl.keystore.password", "<keystore-password>"); props.put("ssl.key.password", "<key-password>");
৩. SSL/TLS-এ Kafka ট্রাফিক এনক্রিপশন ব্যবহারের সুবিধা
৩.১. ডেটার সুরক্ষা
Kafka ট্রাফিক SSL/TLS এনক্রিপশন ব্যবহারের মাধ্যমে ডেটা ট্রান্সমিশন সুরক্ষিত হয়, যা তৃতীয় পক্ষের দ্বারা মেসেজ পড়া বা পরিবর্তন করা প্রতিরোধ করে।
৩.২. অথেন্টিকেশন এবং অথোরাইজেশন
SSL/TLS প্রটোকল ক্লায়েন্ট এবং সার্ভারের মধ্যে অথেন্টিকেশন নিশ্চিত করে, এবং এটি সিস্টেমের নিরাপত্তা বাড়ায়।
৩.৩. রেগুলেটরি কমপ্লায়েন্স
অনেক ক্ষেত্রে, যেমন ব্যাংকিং বা স্বাস্থ্যখাত, ডেটা এনক্রিপশন একটি প্রয়োজনীয় রেগুলেটরি চাহিদা। SSL/TLS এনক্রিপশন এই ধরনের কমপ্লায়েন্স নিশ্চিত করতে সাহায্য করে।
সারাংশ
SSL/TLS দিয়ে Kafka ট্রাফিক এনক্রিপশন ব্যবহারের মাধ্যমে আপনি Kafka ক্লাস্টারের মধ্যে ডেটার গোপনীয়তা এবং নিরাপত্তা নিশ্চিত করতে পারেন। এটি কেবল ডেটা এনক্রিপ্ট করেই না, বরং ক্লায়েন্ট এবং সার্ভারের মধ্যে অথেন্টিকেশন এবং
Read more