การบันทึก SSH และการจัดการเซสชันโดยใช้ AWS SSM

เผยแพร่แล้ว: 2022-03-11

การตั้งค่าเครื่องมือหรือสคริปต์ที่กำหนดเองเพื่อเก็บบันทึก SSH บน Linux อาจเป็นเรื่องที่น่าเบื่อหน่ายและเกิดข้อผิดพลาดได้ง่าย

วิศวกรสามารถใช้ rootsh , screen หรือยูทิลิตีอื่นเพื่อบันทึกกิจกรรมของผู้ใช้ได้ แต่ถ้าสิทธิ์ของผู้ใช้ไม่ได้รับการตั้งค่าอย่างถูกต้อง ผู้ใช้ที่มีทักษะสามารถลบบันทึกการตรวจสอบเพื่อปกปิดร่องรอยของพวกเขาได้ อีกทางเลือกหนึ่งคือการตั้งค่าการบันทึกที่ระดับเคอร์เนล แต่ความเชี่ยวชาญที่จำเป็นสำหรับสิ่งนั้นนั้นไม่ธรรมดา

โชคดีที่มีวิธีบันทึกกิจกรรมของผู้ใช้โดยไม่ต้องเขียนแม้แต่คำสั่ง Linux แม้แต่คำสั่งเดียว! เราต้องการบริการเหล่านี้:

  • EC2
  • IAM (การจัดการข้อมูลประจำตัวและการเข้าถึง)
  • KMS (บริการจัดการคีย์)
  • บันทึก CloudWatch (และ/หรือ S3)
  • AWS Systems Manager (เดิมชื่อ SSM)

เรามาดูวิธีการตั้งค่าแต่ละอย่างกัน

EC2 และ IAM

โดยปกติแล้ว การเปิดใช้อินสแตนซ์ EC2 นั้นค่อนข้างง่าย แต่มีงานหลักอย่างหนึ่งที่ต้องทำในระหว่างการเปิดตัว: เราจำเป็นต้องแนบบทบาท IAM กับอินสแตนซ์ของเรา มิฉะนั้น เราจะไม่สามารถบรรลุผลลัพธ์ที่คาดหวังตามรายละเอียดในตอนท้ายนี้ บทความ.

บทบาท IAM ที่เราเชื่อมโยงกับอินสแตนซ์ EC2 ของเราต้องมีนโยบาย AmazonSSMManagedInstanceCore ในตัว รวมถึงนโยบายนี้ (แนบมาในรูปแบบอินไลน์หรือที่จัดการโดยลูกค้า):

 { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:PutLogEvents" ], "Effect": "Allow", "Resource": "*" } ] }

นอกเหนือจากบทบาท IAM แล้ว โดยทั่วไปเราใช้การกำหนดค่าอินสแตนซ์ EC2 นี้:

  • ระบบปฏิบัติการ คือ Amazon Linux 2 เนื่องจากโดยค่าเริ่มต้นจะมาพร้อมกับ AWS Systems Manager Agent (SSM Agent) ที่ติดตั้งไว้ (เช่นการแจกแจงของ Ubuntu ซึ่งเป็นตัวเลือกด้วย)
  • ประเภทอิน สแตนซ์คือ t3.micro (แต่ประเภทใดก็ได้)
  • กลุ่มความปลอดภัย เริ่มต้นที่ AWS กำหนดให้กับ VPC จะทำงาน เนื่องจากเราไม่จำเป็นต้องเปิดพอร์ต SSH สำหรับแบบฝึกหัดนี้

เราสามารถเริ่มตั้งค่า KMS โดยไม่ต้องรอให้อินสแตนซ์ EC2 เปิดเครื่อง

KMS

เราต้องการคีย์ KMS หากเราต้องการให้บันทึกเซสชันทั้งหมดที่ส่งไปยัง CloudWatch ได้รับการเข้ารหัส ไปที่บริการ KMS และสร้างคีย์

สกรีนช็อตของ AWS พร้อมเบรดครัมบ์ "KMS" "คีย์ที่จัดการโดยลูกค้า" และ "สร้างคีย์" ปัจจุบันอยู่ที่ขั้นตอนที่ 1: "กำหนดค่าคีย์" "ประเภทคีย์" สามารถตั้งค่าเป็น "สมมาตร" (เลือกไว้) หรือ "อสมมาตร" ภายใต้ "ตัวเลือกขั้นสูง" การตั้งค่า "แหล่งที่มาของวัสดุหลัก" อาจเป็น "KMS" (เลือกไว้), "ภายนอก" หรือ "ที่เก็บคีย์ที่กำหนดเอง (CloudHSM)"
ขั้นตอนที่ 1: การเลือกประเภทคีย์สมมาตร

สกรีนช็อตของ AWS ที่มีเบรดครัมบ์เหมือนกัน ตอนนี้อยู่ที่ขั้นตอนที่ 2: "เพิ่มป้ายกำกับ" ฟิลด์นามแฝงถูกตั้งค่าเป็น "cwlg" ฟิลด์คำอธิบายที่เลือกได้จะถูกเว้นว่างไว้ และฟิลด์แท็กเสริมไม่มีแท็กเพิ่ม
ขั้นตอนที่ 2: ตั้งชื่อคีย์ของเรา

สกรีนช็อตของ AWS ที่มีเบรดครัมบ์เหมือนกัน ตอนนี้อยู่ที่ขั้นตอนที่ 3: "กำหนดสิทธิ์การดูแลระบบคีย์" ฟิลด์แรก "Key administrators" มีช่องค้นหาว่างพร้อมผลลัพธ์ 10 แถว (หน้า 1 จาก 3) พร้อมคอลัมน์ Name, Path และ Type เฉพาะแถวแรก (โดยมีค่าคอลัมน์ที่เกี่ยวข้อง "admin," "/" และ "User") เท่านั้นที่มีการเลือกช่องทำเครื่องหมายที่เกี่ยวข้อง อีกช่องหนึ่ง "การลบคีย์" มีตัวเลือกเดียว "อนุญาตให้ผู้ดูแลระบบคีย์ลบคีย์นี้" ซึ่งได้เลือกช่องทำเครื่องหมายไว้ด้วย
ขั้นตอนที่ 3 (ไม่บังคับ): การมอบหมายผู้ดูแลระบบ

เราแนะนำให้มอบหมายผู้ดูแลระบบเพื่อให้ผู้ใช้รายอื่นจัดการคีย์ได้นอกเหนือจากผู้ใช้รูทบัญชี AWS แต่ถ้าคนอื่นไม่ต้องการการเข้าถึง เราสามารถข้ามขั้นตอนที่ 3 ได้

ที่นี่เราเลือก "ผู้ดูแลระบบ" ผู้ใช้ IAM เป็นผู้ดูแลระบบหลัก แต่เราสามารถเลือกผู้ใช้หรือบทบาทใดก็ได้ เรายังสามารถเลือกปิดการอนุญาตการลบคีย์สำหรับผู้ดูแลระบบได้

สกรีนช็อตของ AWS ที่มีเบรดครัมบ์เหมือนกัน ตอนนี้อยู่ที่ขั้นตอนที่ 4: "กำหนดสิทธิ์การใช้งานคีย์" ช่องแรก "บัญชีนี้" มีผลการค้นหาเหมือนกับในขั้นตอนที่ 3 แต่ไม่มีการตรวจสอบ ฟิลด์อื่น "บัญชี AWS อื่น" ไม่มีอะไรเพิ่มเข้าไป
ขั้นตอนที่ 4: ข้ามหน้าการกำหนดผู้ใช้

เราจะไม่กำหนดผู้ใช้ให้กับคีย์นี้ เนื่องจากเราต้องการใช้คีย์นี้โดยบริการ CloudWatch Logs เท่านั้นสำหรับการดำเนินการเข้ารหัสและถอดรหัสบันทึก SSH

สกรีนช็อตของ AWS ที่มีเบรดครัมบ์เหมือนกัน ตอนนี้อยู่ที่ขั้นตอนที่ 5: "ตรวจสอบ" ฟิลด์แรก "การกำหนดค่าคีย์" แสดงรายการ "ประเภทคีย์" เป็น "สมมาตร" "ข้อมูลจำเพาะของคีย์" เป็น "SYMMETRIC_DEFAULT" "การใช้คีย์" เป็น "เข้ารหัสและถอดรหัส" และ "ต้นกำเนิด" เป็น "AWS_KMS ." ฟิลด์ถัดไป "นามแฝงและคำอธิบาย" แสดงรายการนามแฝงหนึ่งรายการ "cwlg" โดยไม่มีคำอธิบาย ช่องถัดไป "แท็ก" ไม่แสดงข้อมูล ฟิลด์สุดท้าย "นโยบายคีย์" รวมกล่องข้อความที่เติมนโยบายไว้ล่วงหน้าในรูปแบบ JSON
ขั้นตอนที่ 5: ตรวจสอบการกำหนดค่าของเราและสลับนโยบายคีย์เริ่มต้น

ในหน้ารีวิว เราจะต้องเปลี่ยนนโยบายคีย์ที่สร้างโดย KMS เนื่องจากไม่มีการอนุญาตสำหรับ CloudWatch Logs ในการใช้คีย์ เราจะแทนที่ด้วยนโยบายนี้:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow access to CloudWatch Log", "Effect": "Allow", "Principal": { "Service": "logs.REGION.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT_ID:*" } } } ] }

ตรวจสอบให้แน่ใจว่าได้เปลี่ยนตัวยึดตำแหน่งทั้งหมด:

  • ACCOUNT_ID กลายเป็นรหัสบัญชี AWS ของเรา
  • USERNAME จะกลายเป็นชื่อผู้ใช้ของผู้ดูแลระบบที่เลือกไว้ในขั้นตอนที่ 3 หากเราเลือกไม่ใช้ขั้นตอนนั้น เราจะลบบล็อกคำสั่งที่สอง (อันที่มี "Sid": "Allow access for Key Administrators" )
  • REGION กลายเป็นรหัสระบุภูมิภาคที่เรากำลังปรับใช้บริการ (เช่น us-west-1 )

ด้วยเหตุนี้ KMS ก็พร้อมที่จะไป

กลุ่มบันทึก CloudWatch

ต่อไป เราจำเป็นต้องมีกลุ่ม CloudWatch Log (และ/หรือบัคเก็ต S3—ดูด้านล่าง) ซึ่งตัวแทน SSM สามารถส่งบันทึกเซสชัน SSH ได้ มาสร้างมันกันเถอะ

สกรีนช็อตของ AWS พร้อมเบรดครัมบ์ "CloudWatch" "บันทึก CloudWatch" "กลุ่มบันทึก" และ "สร้างกลุ่มบันทึก" ไม่มีแถบด้านข้างแบบหลายขั้นตอน ช่องแรก "รายละเอียดกลุ่มบันทึก" มีสามช่องย่อย: "ชื่อกลุ่มบันทึก" (ตั้งค่าเป็น "ssm-session-demo") "การตั้งค่าการเก็บรักษา" (ตั้งค่าเป็น "ไม่มีวันหมดอายุ" จากเมนูแบบเลื่อนลง) และ "คีย์ KMS ARN - ไม่บังคับ" (ตั้งค่าให้สั้นลงที่ขึ้นต้นด้วย "arn:aws:kms") ช่องที่สอง "แท็ก" ไม่มีแท็ก
การสร้างกลุ่มบันทึก “CloudWatch Logs”

สังเกตช่อง ARN ของคีย์ KMS: AWS ให้ค่าที่จำเป็นที่นี่หลังจากสร้างคีย์ในขั้นตอนที่ 5 ของส่วน KMS

(หากเราไม่ได้เชื่อมโยงนโยบายที่ถูกต้องกับคีย์ KMS ของเราก่อนหน้านี้ ทำให้บริการ CloudWatch Logs ใช้คีย์ได้ เราจะได้รับข้อผิดพลาดเกี่ยวกับคีย์ KMS ณ จุดนี้)

การจัดเก็บบันทึก SSH ในถัง S3

สำหรับการจัดเก็บบันทึกกิจกรรมด้วย S3 แทน—หรือนอกเหนือจาก—บันทึก CloudWatch เราจำเป็นต้องเพิ่มการอนุญาตเหล่านี้ในโปรไฟล์อินสแตนซ์ EC2 ของเราเป็นนโยบายแยกต่างหาก (หรือรวมด้วยตนเองกับการอนุญาตอื่นๆ ที่เราอาจจำเป็นต้องเชื่อมโยง):

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::BUCKET_NAME/*" }, { "Effect": "Allow", "Action": [ "s3:GetEncryptionConfiguration" ], "Resource": "*" }, { "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": "*" } ] }

ในข้อมูลโค้ดด้านบน อย่าลืมแทนที่ตัวยึดตำแหน่ง BUCKET_NAME

ตอนนี้เราได้ตั้งค่าที่ใดที่หนึ่งเพื่อจัดเก็บบันทึก—บันทึกของ CloudWatch, บัคเก็ต S3 หรือทั้งสองอย่าง— เราก็พร้อมที่จะเข้าสู่เซสชัน SSH แล้ว

ตัวจัดการเซสชัน AWS Systems Manager

นี่คือขั้นตอนสำคัญขั้นสุดท้าย ซึ่งเรากำหนดค่าการเข้าถึงที่ปลอดภัยไปยังเครื่อง Linux ของเราสำหรับการตรวจสอบและบันทึกเซสชัน SSH เราจะเริ่มที่แดชบอร์ดตัวจัดการเซสชัน

สกรีนช็อตของแดชบอร์ด AWS Session Manager พร้อมหัวข้อ "มันทำงานอย่างไร" "เหตุใดจึงต้องใช้ Session Manager" "เริ่มต้นใช้งาน" "ทรัพยากรเพิ่มเติม" และ "เริ่มเซสชัน" ที่มุมขวาบน ส่วนหลังมีปุ่ม "เริ่มเซสชัน" สีส้มและปุ่ม "กำหนดค่าการตั้งค่า" สีขาว
ขั้นตอนที่ 1: เริ่มต้นใช้งานแดชบอร์ด

บนแดชบอร์ด ให้คลิกปุ่ม "กำหนดค่าการตั้งค่า" สีขาวที่ด้านขวาบนกล่อง "เริ่มเซสชัน" เพื่อเปิดใช้งานการบันทึกเซสชัน

ในหน้าการตั้งค่า เราจะพบส่วนต่างๆ ที่เราสามารถสำรวจได้ แต่เราจะเน้นที่การสตรีมบันทึกเซสชัน SSH ไปยัง CloudWatch หรือ S3 เพื่อให้เราเห็นสิ่งที่เกิดขึ้นภายในเครื่อง Linux ของเราได้อย่างรวดเร็ว

สกรีนช็อตของส่วน AWS ชื่อ "การบันทึก CloudWatch" การตั้งค่าแรกเรียกอีกอย่างว่า "การบันทึก CloudWatch" มีช่องทำเครื่องหมายที่ระบุว่าเปิดใช้งานซึ่งถูกเลือกไว้ การตั้งค่าถัดไป "เลือกตัวเลือกการบันทึกที่คุณต้องการ" ได้เลือก "บันทึกเซสชันสตรีม (แนะนำ)" แทน "อัปโหลดบันทึกเซสชัน" การตั้งค่าถัดไป "บังคับใช้การเข้ารหัส" มีช่องทำเครื่องหมาย "อนุญาตเฉพาะกลุ่มบันทึก CloudWatch ที่เข้ารหัส" ที่เลือกไว้ การตั้งค่าสุดท้าย "กลุ่มบันทึก CloudWatch" ได้เลือก "เลือกชื่อกลุ่มบันทึกจากรายการ" แทน "ป้อนกลุ่มบันทึกในกล่องข้อความ" ด้านล่างเป็นรายการ "กลุ่มบันทึก CloudWatch" โดยเลือก "ssm-session-demo" มีคอลัมน์ที่เกี่ยวข้อง "การเข้ารหัส" (ตั้งค่าเป็น "เข้ารหัส"), "เหตุการณ์หมดอายุหลังจาก" (ตั้งค่าเป็น "ไม่มีวันหมดอายุ"), "ตัวกรองเมตริก" (ตั้งค่าเป็น 0), "ไบต์ที่เก็บไว้" (ตั้งค่าเป็น 0) และ การประทับเวลา "เวลาสร้าง"
ขั้นตอนที่ 2a: เปิดใช้งานการบันทึก CloudWatch

หลังจากส่วน "การบันทึก CloudWatch" จะมีส่วน "การบันทึก S3" ที่เราสามารถเลือกถังได้

สกรีนช็อตของส่วน AWS ที่ชื่อ "การบันทึก S3" การตั้งค่าแรก "ส่งบันทึกเซสชันไปยัง S3" มีช่องทำเครื่องหมาย "เปิดใช้งาน" ที่เลือกไว้ การตั้งค่าถัดไปคือ "บังคับใช้การเข้ารหัส" มีช่องทำเครื่องหมาย "อนุญาตเฉพาะบัคเก็ต S3 ที่เข้ารหัส" ที่ทำเครื่องหมายไว้ การตั้งค่าถัดไปคือ "เลือกที่เก็บข้อมูล S3" ได้เลือก "เลือกชื่อที่เก็บข้อมูลจากรายการ" แทน "ป้อนชื่อที่เก็บข้อมูลในกล่องข้อความ" ด้านล่างนั้น "ssm-session-demo" ถูกเลือกจากรายการดรอปดาวน์ ฟิลด์สุดท้าย "คำนำหน้าคีย์ S3 - ไม่บังคับ" ว่างเปล่า
ขั้นตอนที่ 2b: เปิดใช้งานการบันทึก S3

เมื่อกำหนดค่าการบันทึก SSH แล้ว เราสามารถ SSH ลงในเครื่อง Linux และรันคำสั่งบางอย่างเพื่อดูว่ากิจกรรมนั้นถูกจับหรือไม่

เรามาเริ่มเซสชันกันเลย ในหน้าเดียวกัน เราจะพบแท็บ "เซสชัน" ซึ่งเราสามารถเริ่มเซสชันได้ การคลิกปุ่ม "เริ่มเซสชัน" จะทำให้เรามีรายชื่อเครื่อง EC2 ที่เราสามารถเริ่มเซสชันได้:

สกรีนช็อตของ AWS พร้อมเบรดครัมบ์ AWS Systems Manager, ตัวจัดการเซสชัน และเริ่มเซสชัน ช่องค้นหา "อินสแตนซ์เป้าหมาย" ไม่มีการกรอกข้อความค้นหา และมีเพียงผลลัพธ์เดียว โดยมีการตั้งค่า "ชื่ออินสแตนซ์" เป็น "การสาธิต SSM"
ขั้นตอนที่ 3: เลือกอินสแตนซ์ EC2 ของเราเพื่อเริ่มเซสชัน SSH ด้วย

หากเราไม่เห็นอินสแตนซ์ EC2 Linux ของเราในรายการ เราควรตรวจสอบว่าอินสแตนซ์อยู่ในสถานะกำลังทำงานและมีสิทธิ์ IAM ที่เชื่อมโยงกับอินสแตนซ์ดังที่เราอธิบายไว้ก่อนหน้านี้หรือไม่

ข้อผิดพลาดในการจัดการตัวแทน SSM “ไม่รองรับบันทึกการสตรีม”

ในกรณีที่เราได้รับข้อผิดพลาดว่ารุ่น SSM Agent ที่ติดตั้งบนเครื่อง EC2 ของเราไม่รองรับการสตรีมบันทึก CloudWatch ไม่ต้องกังวล มีวิธีแก้ไขที่ไม่เจ็บปวด

สกรีนช็อตของข้อความแสดงข้อผิดพลาด AWS พร้อมข้อความสีขาวบนพื้นหลังสีแดง X วงกลมอยู่ถัดจากข้อความ "เวอร์ชัน SSM Agent ที่ติดตั้งบนอินสแตนซ์นี้ไม่สนับสนุนการสตรีมบันทึกไปยัง CloudWatch อัปเดต SSM Agent เป็นเวอร์ชันล่าสุด หรือปิดใช้งานตัวเลือกบันทึกการสตรีมในการตั้งค่าของคุณ"
ข้อผิดพลาด "รุ่นตัวแทน SSM ที่ล้าสมัย" ที่อาจเกิดขึ้น

ในการอัปเดต SSM Agent เราต้องไปที่ Run Command ในแผงด้านซ้ายของบริการ AWS Systems Manager

ภาพหน้าจอของแดชบอร์ด AWS Systems Manager Run Command พร้อมส่วน "วิธีการทำงาน" "คุณลักษณะและประโยชน์" "กรณีการใช้งานและบล็อกโพสต์" "เอกสารประกอบ" และ "จัดการอินสแตนซ์ของคุณ" ที่มุมขวาบน ส่วนนั้นมีเพียงปุ่ม "เรียกใช้คำสั่ง" สีส้มเท่านั้น
ขั้นตอนที่ 1: เริ่มต้นด้วยแดชบอร์ด "เรียกใช้คำสั่ง"

เมื่อเราไปถึงที่นั่นแล้ว เราสามารถคลิกที่ปุ่ม "เรียกใช้คำสั่ง" สีส้ม ซึ่งนำไปสู่หน้าใหม่ที่เราสามารถกรอกพารามิเตอร์บางอย่างได้

สกรีนช็อตของ AWS พร้อมเบรดครัมบ์ AWS Systems Manager, Run Command และ Run a command ช่องค้นหาชื่อ "เอกสารคำสั่ง" แสดงรายการ 10 แถว (หน้า 4 จากมากกว่า 5 รายการ) โดยเลือกหนึ่งรายการชื่อ "AWS-UpdateSSMAgent" มี "Amazon" ในคอลัมน์ "Owner" และ "Windows, Linux" ในคอลัมน์ "Platform types" ช่องที่ด้านล่าง "เวอร์ชันเอกสาร" มี "1 (ค่าเริ่มต้น)" ที่เลือกจากรายการดรอปดาวน์
ขั้นตอนที่ 2: การเลือกเอกสารคำสั่ง

เราจะเริ่มต้นด้วยการเลือก AWS-UpdateSSMAgent จากรายการ

ภาพหน้าจอของส่วน AWS ชื่อ "เป้าหมาย" ช่องแรกเรียกอีกอย่างว่า "เป้าหมาย" มีตัวเลือก "ระบุแท็กอินสแตนซ์" "เลือกอินสแตนซ์ด้วยตนเอง" (เลือกไว้) และ "เลือกกลุ่มทรัพยากร" ที่ด้านล่างสุดคือช่องค้นหา "อินสแตนซ์" ที่ไม่มีข้อความค้นหา โดยมีเพียงผลลัพธ์เท่านั้น ให้เลือก "SSM Demo" ID อินสแตนซ์ที่เกี่ยวข้องในแถวจะถูกคัดลอกไปยังกล่องที่อยู่เหนือ "อินสแตนซ์" ที่มีเครื่องหมาย X
ขั้นตอนที่ 3: การเลือกอินสแตนซ์ EC2 ที่มีตัวแทน SSM ที่ต้องการการอัปเดต

เมื่อเลือกแล้ว เราจะเลื่อนลงมาจนเห็นส่วน "เป้าหมาย" ที่นั่น เราจำเป็นต้องเลือกอินสแตนซ์ EC2 ที่เราต้องการอัปเดต SSM Agent จากนั้นกดปุ่ม "เรียกใช้" ในตอนท้าย การดำเนินการนี้จะส่งเราไปยังหน้าที่เราสามารถติดตามความคืบหน้าของการอัปเดตได้

สกรีนช็อตของ AWS พร้อมเบรดครัมบ์ "AWS Systems Manager" "Run Command" และ "Command ID" (ตามด้วย GUID) ส่วนแรก "สถานะคำสั่ง" จะแสดงตัวบ่งชี้ความสำเร็จ เช่นเดียวกับแถวเดียวของส่วนถัดไป "เป้าหมายและผลลัพธ์" ซึ่งแสดงรายการอินสแตนซ์เดียวจากก่อนหน้า นอกจากนี้ยังมีส่วนที่ไม่ได้ขยายสองส่วนที่ด้านล่าง "คำอธิบายคำสั่ง" และ "พารามิเตอร์คำสั่ง"
ขั้นตอนที่ 4: ตรวจสอบความคืบหน้าในการอัปเดตของเรา

การอัปเดตตัวแทนไม่ควรใช้เวลานานกว่าห้านาที เมื่อเสร็จแล้ว เราควรจะสร้างเซสชันกลับมาในตัวจัดการเซสชันได้

ณ จุดนี้ เราควรจะเริ่มเซสชัน SSH

สกรีนช็อตของ AWS พร้อม ID เซสชันและ ID อินสแตนซ์เหนือเทอร์มินัล พรอมต์คือ "sh-4.2$" และป้อนคำสั่ง "whoami" และ "pwd" โดยมีเอาต์พุต "ssm-user" และ "/usr/bin" ตามลำดับ
เซสชัน SSH โดยใช้ตัวแทน SSM ผ่าน AWS Systems Manager Session Manager

หลังจากรันคำสั่งสองสามคำสั่ง ให้ไปที่กลุ่มบันทึก CloudWatch Logs (หรือบัคเก็ต S3 ของเราที่ไม่แสดง) และยืนยันว่ามีการบันทึกกิจกรรม

สกรีนช็อตของ AWS พร้อมเบรดครัมบ์ "CloudWatch" "CloudWatch Logs" "กลุ่มบันทึก" "ssm-session-demo" และ ID เซสชันของขั้นตอนก่อนหน้า ส่วนเดียวคือช่องค้นหา "บันทึกเหตุการณ์" โดยมีแถวที่แต่ละแถวมีการประทับเวลาและข้อความในรูปแบบ JSON หนึ่งในนั้นถูกขยายเพื่อเผยให้เห็น JSON ที่พิมพ์อย่างสวยงามและมีปุ่มสีขาวทางด้านขวาที่มีป้ายกำกับว่า "คัดลอก"
เหตุการณ์บันทึก SSH ถูกบันทึกใน CloudWatch Logs

ตอนนี้เรามีการตั้งค่าแล้ว โดยเปิดใช้งานการเข้ารหัสขณะพัก บันทึกทุกคำสั่งที่ทำงานในเครื่อง Linux ของเรา

อันที่จริง ทุก คำสั่งอาจมากกว่าที่เราต้องการ: ความลับใดๆ ที่ให้หรือสร้างขึ้นระหว่างเซสชันจะถูกบันทึกไว้ใน CloudWatch หรือ S3 และทุกคนที่มีสิทธิ์ที่จำเป็นสามารถเห็นได้ เพื่อป้องกันสิ่งนั้น เราสามารถใช้ stty -echo; read passwd; stty echo; stty -echo; read passwd; stty echo; สำหรับแต่ละความลับที่เราต้องจัดเตรียมในระหว่างเซสชัน

โซลูชันการบันทึก SSM/SSH AWS ที่ยอดเยี่ยมพร้อมข้อแม้เล็กน้อย

Session Manager เป็นเครื่องมือที่มีประโยชน์ในการเข้าถึง Virtual Machine ของเราจากระยะไกลใน AWS โดยไม่ต้องเปิดพอร์ต 22 อันที่จริง เราไม่สามารถสร้างบันทึก SSH ด้วยวิธีนี้ได้ หากเราใช้การส่งต่อพอร์ตหรือการเชื่อมต่อ SSH โดยตรงในฐานะตัวจัดการเซสชัน บันทึกย่อเอกสาร

อย่างไรก็ตาม การรวม Session Manager กับการบันทึกเซสชันเป็นโซลูชันที่มีประสิทธิภาพสำหรับการควบคุมและตรวจสอบกิจกรรมภายใน VM นอกจากนี้ เราจะไม่เรียกเก็บเงินสำหรับการใช้บริการตัวจัดการเซสชัน เราจ่ายเฉพาะอินสแตนซ์ EC2 และ CloudWatch Logs หรือบัคเก็ต S3 สำหรับการจัดเก็บบันทึกเท่านั้น

สำหรับผู้อ่านที่ชอบวิดีโอบทช่วยสอน ฉันได้กล่าวถึงขั้นตอนที่คล้ายกันมากบน YouTube อย่างละเอียดถี่ถ้วนแล้ว


อ่านเพิ่มเติมในบล็อก Toptal Engineering:

  • กรณีศึกษา: เหตุใดฉันจึงใช้ AWS Cloud Infrastructure สำหรับผลิตภัณฑ์ของฉัน