ฉันควรทำอย่างไรหาก Alibaba Cloud AccessKey รั่วไหลสอนวิธีกำหนดค่าสิทธิ์บทบาท RAM
ทีมเทคนิคหลายทีมต้องเผชิญกับ "ความหวาดกลัวตอนเที่ยงคืน": จู่ๆก็ได้รับการโทรแบบอนุกรมที่เป็นอันตรายหรือการแจ้งเตือนทาง SMS จาก Alibaba Cloud "บัญชีของคุณตรวจพบความเสี่ยงจากการรั่วไหลของ AccessKey และทรัพยากรบางส่วนถูกเรียกว่าผิดปกติความถี่สูง..."
เมื่อฉันลงชื่อเข้าใช้คอนโซลบิลก็ระเบิดและแฮกเกอร์ยังสร้างเซิร์ฟเวอร์เป็นชุดเพื่อขุด
ต้นตอของทั้งหมดนี้มักเป็นเพราะรูปภาพช่วยประหยัดปัญหาโดยตรงในรหัสไฟล์กำหนดค่าหรือคลังสินค้าสาธารณะ GitHub
บัญชีหลัก AccessKey(AK/SK)
。 AK ของบัญชีหลักเปรียบเสมือนคีย์หลักของบ้านของคุณเมื่อรั่วไหลทรัพย์สินบนคลาวด์ทั้งหมดจะเทียบเท่ากับการเปิดให้แฮกเกอร์อย่างสมบูรณ์
วันนี้ฉันจะไม่พูดถึงทฤษฎีเสมือนจริงหรือเรื่องไร้สาระจับมือคุณโดยตรงเพื่อสร้างสองแนวป้องกัน:
ประการแรกการหยุดเลือดฉุกเฉิน5นาทีหลังจาก AK รั่วไหลประการที่สองวิธีใช้บทบาท RAM (Role) เพื่อกำจัดอันตรายที่ซ่อนอยู่ของฮาร์ดโค้ด AK อย่างสมบูรณ์
ขั้นตอนที่1: ห้ามเลือดฉุกเฉิน! การไหลฉุกเฉิน5นาทีรั่วไหลโดย AccessKey
หากคุณพบหรือสงสัยว่า AK รั่วไหลอย่าลังเลที่จะดำเนินการต่อไปนี้ทันทีความล่าช้าอีกหนึ่งนาทีคือการสูญเสียเงินจริง
ขั้นตอนที่1: ปิดใช้งานหรือลบ AK ที่เกี่ยวข้องในเครือข่ายทั้งหมด
ลงชื่อเข้าใช้คอนโซล Alibaba Cloud ทันทีและคลิกที่รูปโปรไฟล์ $ \ rightarrow $ ที่มุมขวาบนเพื่อเลือก "การจัดการ AccessKey"
ค้นหา AccessKey (ไม่ว่าจะเป็นบัญชีหลักหรือบัญชีย่อย) ที่แจ้งว่ารั่วไหล
คลิก "ปิดใช้งาน" ก่อนในขณะนี้คำขอเครือข่ายภายนอกทั้งหมดที่ใช้ AK จะรายงานข้อผิดพลาด403ทันที
หลังจากยืนยันว่าไม่ส่งผลกระทบต่อธุรกิจการผลิตหลักให้คลิก "ลบ" อย่างเด็ดขาด
ขั้นตอนที่2: ตรวจสอบ "แบ็คดอร์" ที่แฮกเกอร์ทิ้งไว้
หลังจากแฮกเกอร์ได้รับ AK สิ่งแรกคือการใช้สคริปต์อัตโนมัติเพื่อสร้างทรัพยากรเป็นชุด
ไปที่รายการอินสแตนซ์ ECS และรายการเซิร์ฟเวอร์แอปพลิเคชันน้ำหนักเบาสลับไปยังภูมิภาคต่างๆ (ปักกิ่งเซี่ยงไฮ้เซินเจิ้นฮ่องกงสหรัฐอเมริกาฯลฯ) และดูว่ามีเซิร์ฟเวอร์เพิ่มเติมที่อธิบายไม่ได้หรือไม่ถ้ามีให้ปล่อยทันที
ไปที่คอนโซล ActionTrail เพื่อตรวจสอบว่า AK เรียก API ใดในช่วง24ชั่วโมงที่ผ่านมาและค้นหาทรัพยากรที่แฮกเกอร์ใช้
ขั้นตอนที่สอง: การกำหนดค่าพื้นฐานของบทบาท RAM และสิทธิ์ขั้นต่ำ
หลังจากลบ AK รหัสโครงการเก่าจะยุบโดยตรงเนื่องจากต้องการสิทธิ์ในการอ่านและเขียน OSS หรือเรียกใช้บริการคลาวด์อื่นๆ
เราไม่สามารถสร้างบัญชีหลักใหม่ได้วิธีที่ถูกต้องคือ:
ใช้บทบาท RAM (RAM Role) เพื่อให้โปรแกรมที่ทำงานบน Alibaba Cloud ได้รับสิทธิ์ชั่วคราวโดยอัตโนมัติโดยไม่ต้องใช้คีย์
ด้านล่างนี้เราใช้ "ให้โปรแกรมบนคลาวด์เซิร์ฟเวอร์ ECS สามารถอ่านและเขียนถังเก็บข้อมูล OSS ได้อย่างปลอดภัย" เป็นตัวอย่างสำหรับการกำหนดค่าการต่อสู้จริง
ขั้นตอนที่1: สร้างตัวละคร RAM (สร้าง "ตัวตน" จากอากาศบางๆ
)
ค้นหาในคอนโซลและป้อน "การควบคุมการเข้าถึง RAM"
คลิกที่ "บทบาท" $ \ rightarrow $ "สร้างตัวละคร" ในเมนูด้านซ้าย
เลือกประเภทเอนทิตีที่เชื่อถือได้เป็น "Alibaba Cloud Service" แล้วคลิกถัดไป
ประเภทบทบาท: เลือก "บทบาทบริการปกติ"
ชื่อตัวละคร: ตั้งชื่อที่เข้าใจง่ายเช่น ECS-OSS-Reader-Role
เลือกบริการที่น่าเชื่อถือ: เนื่องจากเราต้องการโพสต์บทบาทนี้บนเซิร์ฟเวอร์คลาวด์เราจึงเลือก "Cloud Server" (ECS) ที่นี่
คลิกตกลง.
ขั้นตอนที่2: การอนุญาตที่ถูกต้อง (ไม่ให้สิทธิ์พิเศษ)
ตัวละครที่สร้างขึ้นใหม่เป็นแผ่นกระดาษเปล่าที่ไม่มีสิทธิ์เราจำเป็นต้องออกใบอนุญาตให้เป็นไปตาม "หลักการสิทธิ์ขั้นต่ำ"
ค้นหา ECS-OSS-Reader-Role ที่คุณเพิ่งสร้างขึ้นในรายการบทบาทและคลิก "เพิ่มสิทธิ์" ทางด้านขวา
ขอบเขตการอนุญาต: เลือกบัญชี Alibaba Cloud ทั้งหมด (ค่าเริ่มต้น)
กลยุทธ์การเลือก: ถ้าเพียงแค่อ่าน OSS: ค้นหาและติ๊ก AliyunOSSReadOnlyAccess (อ่านอย่างเดียวเข้าถึง OSS) ถ้าคุณต้องการอ่านและเขียน OSS: ค้นหาและติ๊ก AliyunOSSFullAccess (จัดการ OSS)
คลิกตกลง.
ขั้นตอนที่3: ผูกบทบาทกับ ECS Cloud Server
ขั้นตอนนี้สำคัญมากเทียบเท่ากับการวาง "ใบอนุญาต" นี้ไว้ที่หน้าผากของเซิร์ฟเวอร์เฉพาะ
ไปที่คอนโซล "Cloud Server ECS" และค้นหาอินสแตนซ์ที่รันโค้ดของคุณ
คลิกที่ "เพิ่มเติม" $ \ rightarrow $ "ตัวอย่างการตั้งค่า" $ \ rightarrow $ "ให้/ถอนบทบาท RAM" ทางด้านขวา
ในเมนูแบบเลื่อนลงให้เลือก ECS-OSS-Reader-Role ที่คุณเพิ่งสร้างขึ้น
คลิกตกลง.
ขั้นตอนที่สาม: การเปลี่ยนแปลงรหัส-อำลา AK การเข้ารหัสแบบแข็งโดยสิ้นเชิง
ตอนนี้เซิร์ฟเวอร์ของคุณมีสถานะทางกฎหมายเราจะไปแก้ไขโค้ดของโครงการและใส่บรรทัดที่น่ารังเกียจเหล่านั้น
AccessKeyId
และ
AccessKeySecret
ลบทั้งหมด
SDK ของ Alibaba Cloud มี
การฉีดแบบหมุนใบสำคัญอัตโนมัติ
ฟังก์ชั่นเมื่อรหัสทำงานบน ECS ที่ผูกไว้กับบทบาท RAM SDK จะเข้าถึงที่อยู่ข้อมูลเมตาของเครื่องพิเศษภายในเซิร์ฟเวอร์
http
: // 100.100.100.200 /latest/meta-data/
รับโดยอัตโนมัติ
เปลี่ยน Token ชั่วคราวที่หมดอายุโดยอัตโนมัติทุกสองสามชั่วโมง
。
แม้ว่าแฮ็กเกอร์จะแอบเข้าไปในเซิร์ฟเวอร์และขโมยโทเค็นนี้แต่ก็จะล้มเหลวโดยอัตโนมัติหลังจากผ่านไปสองสามชั่วโมงและไม่สามารถใช้เป็นแบ็คดอร์ถาวรได้
ใช้ Java SDK เข้าถึง OSS เป็นตัวอย่าง:
รหัสเก่า (อันตรายมาก❌):
Java
// ห้ามเขียนแบบนี้เด็ดขาด! เมื่อรหัสอยู่ใน
อัปโหลดไปยังแพลตฟอร์มโฮสต์รหัสสาธารณะและทั้งครอบครัวก็ขึ้นสู่ท้องฟ้าทันที
String accessKeyId = "LTAI5tXXXXXX";
String accessKeySecret = "Pn7yXXXXXX";
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
รหัสใหม่ (แนะนำโดยกลยุทธ์การรักษาความปลอดภัยดั้งเดิมบนคลาวด์):
Java
Import com.aliyun.oss.OSS;
Import com.aliyun.oss. OSClientBuilder;
Import com.aliyun.credentials.Client;
Import com.aliyun.credentials.mo dels.Config;
// ไม่จำเป็นต้องใช้คีย์ข้อความใดๆเลย!
Config credentialConfig = new Config();
CredentialConfig.setType ("ecs_ram_role"); // ระบุประเภทใบรับรองสำหรับบทบาท RAM ที่ผูกพันกับ ECS
// หากเว้นว่าง SDK จะค้นหาชื่อตัวละครที่ผูกไว้กับเซิร์ฟเวอร์ปัจจุบันโดยอัตโนมัติ
// CredentialConfig.setRoleName ("ECS-OSS-Reader-Role");
Client credentialClient = new Client(credentialConfig);
// สร้างไคลเอนต์ OSS โดยใช้ข้อมูลประจำตัวชั่วคราว
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialClient);
Ultimate Line of Defense: จะป้องกันการรั่วไหลครั้งต่อไปได้อย่างไร?
อย่าส่งไฟล์คอนฟิกูเรชันที่มีข้อความที่ชัดเจน AK ในฐานรหัสสาธารณะใดๆ (เช่น GitHub, Gitee) แม้แต่คลังสินค้าส่วนตัวก็ใช้ไม่ได้การรั่วไหลจำนวนมากเกิดจากพนักงานเปลี่ยนคลังสินค้าส่วนตัวเป็นสาธารณะโดยไม่ได้ตั้งใจ
ใช้ประโยชน์จากมัน Gitignore 。เมื่อเริ่มต้นโครงการให้เพิ่ม application-prod.yml, config.json และไฟล์คอนฟิกูเรชันอื่นๆที่มีข้อมูลที่ละเอียดอ่อนลงในรายการที่ไม่สนใจทันที
วิธีการพัฒนาท้องถิ่น? หากคอมพิวเตอร์ในระบบต้องการการดีบัก AK จริงๆให้กำหนดค่า AK เป็นตัวแปรสภาพแวดล้อมของระบบคอมพิวเตอร์ของคุณ (ผ่าน export ALIBABA_CLOUD_ACCESS_KEY_ID = "xxx") ในรหัส
โดย System.getenv() ไปอ่านด้วยวิธีนี้รหัสจะสะอาดเสมอ
ความปลอดภัยไม่ใช่เรื่องเล็กน้อยคืนนี้เราจะตรวจสอบรายการที่คุณดูแลและฆ่า AK บัญชีหลักที่เข้ารหัสยากทั้งหมด!

