Kafka Distributed-Connecter ของคุณปลอดภัยแล้วหรือยัง ?

ในปัจจุบันการใช้ Kafka เป็น Tool Message Queue เริ่มนิยมกันมากขึ้นเนื่องจากมันใช้ง่ายและเร็ว แต่คุณรู้หรือเปล่าว่าสิ่งที่เราใช้ มันปลอดภัยแล้วหรือยัง วันนี้ผมจะมาทำ Basic-Authentication ให้กับตัว Connector ที่เป็นโหมดแบบ Distributed กัน

Distributed-Connector นั้นจะเป็นโหมด Connector ที่จะแชร์กันระหว่าง Kafka ใน Cluster ของเรา เหมาะสำหรับการที่เรามี Kafka หลายๆตัว ซึ่งต่างจากตัว Standalone-Connector ที่มีหน้าที่ทำของใครของมันไป แต่ในส่วนของตัว Distributed นั้นจะมีการปล่อย API ออกมาซึ่งอันตรายมากหากคุณไม่ใส่การ Authentication ใดๆลงไปเลย เพราะว่ามันสามารถเรียก API แล้วได้ข้อมูลใน Connector ทั้งหมดมาได้เลย

 

Example

ถ้าเรา curl ไปที่ http://{{ kafka.ip }}:{{ kafkaAPI:port }}/connectors เราก็จะสามารถได้ข้อมูลมาเลยว่าในตัว Connectors ของเรานั้นมีการเชื่อมต่อกับอะไรไว้อยู่บ้าง ทำให้ง่ายต่อผู้ที่ไม่หวังดีในการโจมตีในส่วนอื่นๆต่อไป ตัวอย่างดังรูป

จากที่เห็นคงคิดว่ามันคงไม่มีปัญหาอะไรใช่ไหมล่ะ แต่ถ้าเขาใส่ / แล้วตามด้วยชื่อ connector ที่เขาได้มาล่ะ

จะเห็นได้ว่า มันจะได้ข้อมูลทั้งหมดใน connector นั้นไปเลย ซึ่งยิ่งถ้าเป็นตัว connector ที่เชื่อมกับ databaseต่างๆยิ่งอันตราย เพราะฉะนั้นเราควรทำอะไรซักอย่างไว้เพื่อไม่ให้เขา curl หรือเรียก API เข้าไปตรงๆกันดีกว่า ซึ่งวิธีที่ผมแนะนำนั้นง่ายมาก แค่ทำตามด้านล่าง 5 นาทีก็ได้เล้ยย

 

Basic-Authentication

1. เปิดไฟล์ config ของ connect-distributed ขึ้นมาก่อน ซึ่งของผมอยู่ที่ ${KAFKA_HOME}/config/connect-distributed.properties

2. ใส่ extension.classes=org.apache.kafka.connect.rest.basic.auth.extension.BasicAuthSecurityRestExtension
ไว้ที่บรรทัดใดของไฟล์ก็ได้ (ในตัวอย่างผมใส่ไว้ข้างล่างสุดเลย)

3. สร้างไฟล์สำหรับเก็บ User:password มาหนึ่งไฟล์ ในที่นี้ผมให้ชื่อว่า password แล้วใส่

user: password

ลงไปข้างใน

4. สร้างไฟล์ conf ขึ้นมาหนึ่งไฟล์ ในที่นี้ผมให้ชื่อว่า kafka_server_jaas.conf ให้เรียกใช้ไฟล์ในข้อ 3

5. ไปที่ java security ใน /etc/java{version}/security/java.security แล้วเพิ่ม

login.config.url.1=file:/usr/local/bin/kafka/config/kafka_server_jaas.conf

ลงไปในบรรทัดใดของไฟล์ก็ได้เพื่อให้ java นั้นอ่านไฟล์ password ของเรา

6. สุดท้ายนี้ให้เราทำการ Restart connect-distributed ก็เป็นอันเสร็จเรียบร้อย เรามาทดสอบกันเถอะ

 

เสร็จแล้วว ทีนี้เมื่อมีคนยิง API หรือ curl เพื่อที่จะดูข้อมูลก็จะต้องมี user: password ก่อนถึงจะทำได้ ถือว่าเป็นการป้องกันให้ระบบเราปลอดภัยขึ้นในระดับนึงเลยหละ

สำหรับ Basic-Authentication ของ Distributed-connector ก็จบเพียงเท่านี้ถ้ามีอะไรขาดตกพกพร่องก็บอกได้นะครับ แล้วก็เรื่องหน้าจะมีอะไรมาใหม่นั้น อย่าลืมติดตามกันหละ



Related Articles

See All Post
Loading