โหมดการเข้ารหัสและการบังคับใช้การเข้ารหัสระหว่างส่งข้อมูล

การใช้ AWS Security สำหรับนักพัฒนา

Rahul Singh

Technical Product Manager

การรับประกันสองข้อ ค่าเริ่มต้นเดียว

แอปพลิเคชันส่งอ็อบเจ็กต์ไปยัง Amazon S3 bucket วงเล็บสีเขียวที่มีป้ายกำกับ "ระหว่างส่ง" ครอบคลุมช่วงการส่งผ่านเครือข่าย ส่วนวงเล็บสีเขียวอันที่สองที่มีป้ายกำกับ "ขณะจัดเก็บ" ครอบคลุมอ็อบเจ็กต์ที่จัดเก็บไว้ อยู่เหนือหมายเหตุที่ระบุว่า SSE-S3 จะใช้งานเว้นแต่คำขอจะระบุไว้เป็นอย่างอื่น

  • ขณะจัดเก็บ: ไบต์ที่อยู่บนดิสก์
  • ระหว่างส่ง: ไบต์ที่อยู่บนเครือข่าย
การใช้ AWS Security สำหรับนักพัฒนา

การรับประกันสองข้อ ค่าเริ่มต้นเดียว

แอปพลิเคชันส่งอ็อบเจ็กต์ไปยัง Amazon S3 bucket วงเล็บสีเขียวที่มีป้ายกำกับ "ระหว่างส่ง" ครอบคลุมช่วงการส่งผ่านเครือข่าย ส่วนวงเล็บสีเขียวอันที่สองที่มีป้ายกำกับ "ขณะจัดเก็บ" ครอบคลุมอ็อบเจ็กต์ที่จัดเก็บไว้ อยู่เหนือหมายเหตุที่ระบุว่า SSE-S3 จะใช้งานเว้นแต่คำขอจะระบุไว้เป็นอย่างอื่น

  • ขณะจัดเก็บ: ไบต์ที่อยู่บนดิสก์
  • ระหว่างส่ง: ไบต์ที่อยู่บนเครือข่าย
  • ทำให้แล้ว: SSE-S3 ใช้กับทุกอ็อบเจ็กต์ใหม่
  • ยังเป็นหน้าที่คุณ: จะใช้โหมดใด และใครถือคีย์ ยังคงต้องเลือกเอง
การใช้ AWS Security สำหรับนักพัฒนา

จุดที่ plaintext สิ้นสุด

ฝั่งเซิร์ฟเวอร์

  • AWS ได้รับไบต์ที่อ่านได้
  • S3 เข้ารหัสขณะเขียนข้อมูล

 

โฟลว์แบบฝั่งเซิร์ฟเวอร์ กระบวนการของคุณถือ plaintext ส่งผ่านสาย TLS แล้ว Amazon S3 เข้ารหัสขณะเขียน แถบด้านล่างแสดงไบต์ โดยมีเส้นแบ่งแบบจุดคั่นที่ S3: ช่วงก่อนเส้นแบ่งมีป้ายกำกับ "your bytes: readable here" แสดงเป็นสีแดง ส่วนช่วงหลังเส้นแบ่งมีป้ายกำกับ "ciphertext" แสดงเป็นสีเขียว

 

การใช้ AWS Security สำหรับนักพัฒนา

จุดที่ plaintext สิ้นสุด

ฝั่งเซิร์ฟเวอร์

  • AWS ได้รับไบต์ที่อ่านได้
  • S3 เข้ารหัสขณะเขียนข้อมูล

ฝั่งไคลเอนต์

  • เข้ารหัสข้อมูลก่อนส่งออกไป
  • AWS เก็บแค่ ciphertext เท่านั้น

โฟลว์แบบฝั่งเซิร์ฟเวอร์ กระบวนการของคุณถือ plaintext ส่งผ่านสาย TLS แล้ว Amazon S3 เข้ารหัสขณะเขียน แถบด้านล่างแสดงไบต์ โดยมีเส้นแบ่งแบบจุดคั่นที่ S3: ช่วงก่อนเส้นแบ่งมีป้ายกำกับ "your bytes: readable here" แสดงเป็นสีแดง ส่วนช่วงหลังเส้นแบ่งมีป้ายกำกับ "ciphertext" แสดงเป็นสีเขียว

โฟลว์แบบฝั่งไคลเอนต์ กระบวนการของคุณเข้ารหัสก่อน แล้วส่ง ciphertext ผ่านสาย TLS จากนั้น Amazon S3 จัดเก็บสิ่งที่ได้รับมา แถบด้านล่างแสดงไบต์ โดยมีเส้นแบ่งแบบจุดคั่นอยู่ภายในกระบวนการของคุณ: ช่วงสั้น ๆ ก่อนเส้นแบ่งมีป้ายกำกับ "your bytes: readable here" แสดงเป็นสีแดง ส่วนที่เหลือทั้งหมดมีป้ายกำกับ "ciphertext" แสดงเป็นสีเขียว

การใช้ AWS Security สำหรับนักพัฒนา

4 โหมด ความแตกต่างเดียว

อัลกอริทึมเดียวกัน เจ้าของคีย์ 4 แบบ

  • โหมดจะถูกส่งมาพร้อมกับ header ของคำขอ PUT
  • SSE-S3: ใช้คีย์ของ AWS ไม่ต้องจัดการอะไรเพิ่ม
  • SSE-KMS: ใช้คีย์ของคุณเอง มี CloudTrail และ key policy ที่แนบกับคีย์ระบุว่าจะตอบสนองคำขอจากใคร

การ์ด 4 ใบเรียงซ้อนกัน ระบุชื่อ SSE-S3, SSE-KMS, DSSE-KMS และ SSE-C มีเส้นแนวตั้งด้านซ้ายไล่จากการควบคุมโดย AWS ที่ด้านบนไปจนถึงการควบคุมโดยคุณที่ด้านล่าง แต่ละการ์ดแสดงเพียงค่า header ของคำขอที่ใช้เลือกโหมดนั้น

การใช้ AWS Security สำหรับนักพัฒนา

4 โหมด ความแตกต่างเดียว

อัลกอริทึมเดียวกัน เจ้าของคีย์ 4 แบบ

  • โหมดจะถูกส่งมาพร้อมกับ header ของคำขอ PUT
  • SSE-S3: ใช้คีย์ของ AWS ไม่ต้องจัดการอะไรเพิ่ม
  • SSE-KMS: ใช้คีย์ของคุณเอง มี CloudTrail และ key policy ที่แนบกับคีย์ระบุว่าจะตอบสนองคำขอจากใคร
  • DSSE-KMS: เข้ารหัสซ้อนสองชั้นที่เป็นอิสระต่อกัน
  • SSE-C: ใช้คีย์ของคุณในทุกคำขอ และต้องดูแลรักษาเอง

การ์ด 4 ใบเรียงซ้อนกัน ระบุชื่อ SSE-S3, SSE-KMS, DSSE-KMS และ SSE-C มีเส้นแนวตั้งด้านซ้ายไล่จากการควบคุมโดย AWS ที่ด้านบนไปจนถึงการควบคุมโดยคุณที่ด้านล่าง แต่ละการ์ดแสดงเพียงค่า header ของคำขอที่ใช้เลือกโหมดนั้น

การใช้ AWS Security สำหรับนักพัฒนา

ข้อกังวลด้านต้นทุนของ SSE-KMS

สองแถว แถวแรกไม่มี Bucket Keys จะมีลูกศร 6 เส้นวิ่งจาก Amazon S3 ไปยัง AWS KMS หนึ่งเส้นต่อคำขอแต่ละอ็อบเจ็กต์ ส่วนแถวที่มี Bucket Keys จะมีลูกศรเพียงเส้นเดียวออกจากคีย์ระดับบัคเก็ตที่เก็บไว้ภายใน S3 หมายเหตุด้านล่างระบุว่า Bucket Keys ใช้ไม่ได้กับ DSSE-KMS

  • ไม่มี Bucket Keys: เรียก KMS หนึ่งครั้งต่อหนึ่งอ็อบเจ็กต์
  • มี Bucket Keys: ใช้คีย์อายุสั้นหนึ่งตัว นำกลับมาใช้ซ้ำ
  • ใช้ไม่ได้กับ DSSE-KMS
  • ลดจำนวนคำขอ KMS ได้สูงสุดถึง 99%
การใช้ AWS Security สำหรับนักพัฒนา

เข้ารหัสเฉพาะฟิลด์ ไม่ใช่ทั้งตาราง

การเข้ารหัสขณะจัดเก็บเปิดใช้งานอยู่แล้ว

  • คิวรีจะคืนค่า plaintext ให้กับทุกคนที่มีสิทธิ์อ่าน

ไอเท็ม DynamoDB หนึ่งรายการมี 5 แอตทริบิวต์ สองแอตทริบิวต์เก็บ ciphertext และมีเส้นกำกับสีน้ำเงิน ส่วน partition key, sort key และ timestamp ยังคงเป็น plaintext กล่องสีเขียวด้านล่างระบุว่าทั้งตารางถูกเข้ารหัสขณะจัดเก็บ

การใช้ AWS Security สำหรับนักพัฒนา

เข้ารหัสเฉพาะฟิลด์ ไม่ใช่ทั้งตาราง

การเข้ารหัสขณะจัดเก็บเปิดใช้งานอยู่แล้ว

  • คิวรีจะคืนค่า plaintext ให้กับทุกคนที่มีสิทธิ์อ่าน

AWS Database Encryption SDK

  • เข้ารหัสแอตทริบิวต์ที่เลือกไว้ในโค้ดของคุณ
  • partition key และ sort key ซึ่งเป็นฟิลด์ที่ DynamoDB ใช้ค้นหาไอเท็ม ยังคงเป็น plaintext เพราะต้องใช้สร้างดัชนี

ไอเท็ม DynamoDB หนึ่งรายการมี 5 แอตทริบิวต์ สองแอตทริบิวต์เก็บ ciphertext และมีเส้นกำกับสีน้ำเงิน ส่วน partition key, sort key และ timestamp ยังคงเป็น plaintext กล่องสีเขียวด้านล่างระบุว่าทั้งตารางถูกเข้ารหัสขณะจัดเก็บ

การใช้ AWS Security สำหรับนักพัฒนา

TLS เปิดให้ใช้ แต่ไม่บังคับ

เปิดให้ใช้ แต่ไม่บังคับ

  • S3 ตอบสนองทั้ง HTTP และ HTTPS เหมือนกัน

สองสถานการณ์ หากบัคเก็ตไม่มีเงื่อนไขใด ๆ ทั้งไคลเอนต์ HTTPS และ HTTP จะเข้าถึงอ็อบเจ็กต์ได้ทั้งคู่ แต่หากมีเงื่อนไข deny เส้นทาง HTTP จะหยุดที่เครื่องหมายกากบาทสีแดงและไม่สามารถเชื่อมต่อได้

การใช้ AWS Security สำหรับนักพัฒนา

TLS เปิดให้ใช้ แต่ไม่บังคับ

เปิดให้ใช้ แต่ไม่บังคับ

  • S3 ตอบสนองทั้ง HTTP และ HTTPS เหมือนกัน

ทำให้เป็นข้อบังคับ

  • bucket policy: ปฏิเสธคำขอเมื่อ aws:SecureTransport เป็น false
  • ไคลเอนต์ที่ถูกต้องจะไม่ได้รับผลกระทบใด ๆ

สองสถานการณ์ หากบัคเก็ตไม่มีเงื่อนไขใด ๆ ทั้งไคลเอนต์ HTTPS และ HTTP จะเข้าถึงอ็อบเจ็กต์ได้ทั้งคู่ แต่หากมีเงื่อนไข deny เส้นทาง HTTP จะหยุดที่เครื่องหมายกากบาทสีแดงและไม่สามารถเชื่อมต่อได้

การใช้ AWS Security สำหรับนักพัฒนา

ใครเป็นผู้รับรองชื่อนี้

ชื่อสาธารณะ

  • ACM: ได้รับความเชื่อถือสาธารณะ ฟรี และต่ออายุให้เองอัตโนมัติ

ชื่อที่ resolve ได้เฉพาะในเครือข่ายของคุณ

  • AWS Private CA: certificate authority ของคุณเอง
  • ไม่ได้รับความเชื่อถือบนอินเทอร์เน็ตสาธารณะ

การ์ด 2 ใบเรียงซ้อนกัน หัวข้อคือใครเป็นผู้ออกใบรับรองได้ การ์ดบน ชื่อสาธารณะ ใช้ reports.example.com เป็นชื่อที่ resolve และ ACM เป็นผู้ออกใบรับรอง ซึ่งเชื่อถือได้ทุกที่ การ์ดล่าง ชื่อภายใน ใช้ admin.example.internal ซึ่ง resolve ได้เฉพาะภายใน VPC ของคุณ และ AWS Private CA เป็นผู้ออกใบรับรอง

การใช้ AWS Security สำหรับนักพัฒนา

ครึ่งส่วนตัว คือความรับผิดชอบของคุณ

ใครเป็นผู้ถือ

  • ACM: AWS เป็นผู้เก็บไว้
  • EC2 key pair หรือ SSH key ใด ๆ: คุณถือกุญแจฝั่งส่วนตัวไว้เพียงชุดเดียว

การ์ด 2 ใบเรียงซ้อนกัน หัวข้อคือใครถือครึ่งไหน การ์ดบน ครึ่งสาธารณะ ระบุว่าอยู่บน AWS หรือบนอินสแตนซ์ การ์ดล่างสีส้ม ครึ่งส่วนตัว มี 3 แถว: คุณได้รับสำเนาเดียวไม่มีสำรอง เก็บไว้ใน Secrets Manager พร้อมเครื่องหมายถูกสีเขียว และห้ามเก็บไว้ใน repo แล็ปท็อป หรือแชท พร้อมเครื่องหมายกากบาทสีส้ม

การใช้ AWS Security สำหรับนักพัฒนา

ครึ่งส่วนตัว คือความรับผิดชอบของคุณ

ใครเป็นผู้ถือ

  • ACM: AWS เป็นผู้เก็บไว้
  • EC2 key pair หรือ SSH key ใด ๆ: คุณถือกุญแจฝั่งส่วนตัวไว้เพียงชุดเดียว

ถ้าเป็นของคุณ

  • เก็บใน Secrets Manager ไม่ใช่ repo
  • เปลี่ยนตามกำหนดเวลา

การ์ด 2 ใบเรียงซ้อนกัน หัวข้อคือใครถือครึ่งไหน การ์ดบน ครึ่งสาธารณะ ระบุว่าอยู่บน AWS หรือบนอินสแตนซ์ การ์ดล่างสีส้ม ครึ่งส่วนตัว มี 3 แถว: คุณได้รับสำเนาเดียวไม่มีสำรอง เก็บไว้ใน Secrets Manager พร้อมเครื่องหมายถูกสีเขียว และห้ามเก็บไว้ใน repo แล็ปท็อป หรือแชท พร้อมเครื่องหมายกากบาทสีส้ม

การใช้ AWS Security สำหรับนักพัฒนา

สามคำตอบ ไม่ใช่คำตอบเดียว

การ์ดลำดับเลข 3 ใบสำหรับ mode, การควบคุมคีย์ และ transit แต่ละใบแสดง header หรือ condition key ที่ตอบคำถามนั้น บรรทัดด้านล่างระบุว่ามีเพียงการตรวจสอบข้อที่สามเท่านั้นที่อยู่นอกเหนือการตั้งค่าการเข้ารหัส

  1. Mode: อะไรเป็นผู้เขียนอ็อบเจ็กต์นี้
  2. การควบคุมคีย์: ใครถอดรหัสได้ ในบัญชีนี้หรือบัญชีอื่น
  3. Transit: บังคับใช้ หรือเปิดให้ใช้เฉย ๆ
การใช้ AWS Security สำหรับนักพัฒนา

มาฝึกกันเถอะ!

การใช้ AWS Security สำหรับนักพัฒนา

Preparing Video For Download...