ใช้คีย์การปรับใช้เดียวกันสำหรับโครงการ github หลายโครงการ


94

Github ไม่อนุญาตให้ใช้คีย์การปรับใช้ ssh เดียวกันสำหรับมากกว่าหนึ่งโปรเจ็กต์ซึ่งจะมีประโยชน์มากในบางกรณี (เช่นเซิร์ฟเวอร์ CI ที่จัดการกับโปรเจ็กต์ที่มีโมดูลย่อยส่วนตัว) ฉันเคยเห็นหัวข้อต่างๆที่ดูเหมือนจะบอกว่าข้อ จำกัด นี้มีไว้เพื่อ 'เหตุผลด้านความปลอดภัย' แต่ฉันยังไม่เห็นคำอธิบายที่น่าเชื่อถือเกี่ยวกับความเสี่ยงที่จะเพิ่มขึ้น

โปรดทราบว่าข้อเท็จจริงที่ว่า Github ไม่อนุญาตให้นำคีย์ระดับบัญชีกลับมาใช้ก็สมเหตุสมผลแล้ว (ผู้ใช้สองคนไม่ควรแชร์คีย์) เป็นเพียงข้อ จำกัด ของDeploy Keysที่ฉันกำลังตั้งคำถาม

และเพื่อความชัดเจนฉันไม่ได้มองหาวิธีแก้ปัญหา (สร้างผู้ใช้หลอกใช้หลายคีย์ ... ) แต่สำหรับคำอธิบายที่เป็นไปได้สำหรับข้อ จำกัด ของ Deploy Keys นี้เท่านั้น

หัวข้อที่เกี่ยวข้อง:


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

คำตอบที่ดีที่นี่: stackoverflow.com/questions/11656134/…
apple16

คำตอบ:


22

เหตุผลเดียวที่แสดงโดยวิธีแก้ปัญหาที่คุณอ้างอิง (การสร้างผู้ใช้ "บิลด์" เดียวหรือใช้ร่วมกันid_rsa.REPONAME.pubต่อ repo) คือ:

หลีกเลี่ยงการแชร์คีย์สาธารณะ / ส่วนตัวสำหรับผู้ใช้ที่แตกต่างกัน

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

การรับรองความถูกต้องหมายถึง:
"การใช้คีย์ ssh บางอันควรบ่งบอกว่าคุณควรรู้ว่าใครกำลังใช้มัน"


หน้า GitHub "การจัดการปรับใช้คีย์ " ให้รายละเอียดของบัญชีต่างๆโดยใช้ ssh:

  • การส่งต่อเอเจนต์ SSH : การส่งต่อเอเจนต์ใช้คีย์ SSH ที่ตั้งค่าไว้แล้วในเครื่องพัฒนาท้องถิ่นของคุณเมื่อคุณเข้า SSH ไปยังเซิร์ฟเวอร์ของคุณและรันคำสั่ง git
    คุณสามารถเลือกที่จะอนุญาตให้เซิร์ฟเวอร์ระยะไกลเข้าถึง ssh-agent ภายในเครื่องของคุณได้ราวกับว่าเซิร์ฟเวอร์กำลังทำงานอยู่
    จึงไม่จำเป็นต้องจำลองคีย์ส่วนตัวของคุณบนเซิร์ฟเวอร์

  • ผู้ใช้เครื่องจักร : (นี่คือกลยุทธ์ "บัญชีดัมมี่") แนบคีย์กับบัญชีผู้ใช้ เนื่องจากบัญชีนี้จะไม่ถูกใช้โดยมนุษย์จึงเรียกว่าผู้ใช้เครื่อง
    คุณจะปฏิบัติต่อผู้ใช้รายนี้ในลักษณะเดียวกับที่คุณเป็นมนุษย์แนบคีย์เข้ากับบัญชีผู้ใช้เครื่องราวกับว่าเป็นบัญชีปกติ
    ให้สิทธิ์ผู้ทำงานร่วมกันของบัญชีหรือทีมในการเข้าถึง repos ที่ต้องการเข้าถึง
    ดังนั้นคีย์ส่วนตัวหนึ่งอันที่เชื่อมโยงกับ "ผู้ใช้เครื่อง" หนึ่งตัวต่อเซิร์ฟเวอร์

( DHaชี้ให้เห็นในความคิดเห็นเกี่ยวกับการปรับใช้หมายเลขขีด จำกัด คีย์และความจริงที่คุณสามารถมีบัญชีผู้ใช้เครื่องได้เพียงบัญชีเดียว)

  • ปรับใช้คีย์ (หนึ่งคีย์ต่อ GitHub repo) คีย์ SSH ที่เก็บไว้บนเซิร์ฟเวอร์และให้สิทธิ์เข้าถึง repo เดียวบน GitHub
    คีย์นี้ติดโดยตรงกับ repo แทนการไปยังบัญชีผู้ใช้
    แทนที่จะไปที่การตั้งค่าบัญชีของคุณให้ไปที่หน้าผู้ดูแลระบบของ repo เป้าหมาย
    ไปที่ " Deploy Keys" และคลิก " Add deploy key" วางคีย์สาธารณะและส่ง

คราวนี้ไม่ได้แนบคีย์ ssh กับผู้ใช้ (ซึ่งคุณสามารถให้สิทธิ์การเข้าถึง repo ได้หลายรายการ) แต่ให้กับ repo เดียว
การให้สิทธิ์เข้าถึง ssh สำหรับrepo หลายรายการจะเทียบเท่ากับ "ผู้ใช้เครื่อง"

ในแง่ของการรับรองความถูกต้อง :

  • การใช้คีย์เดียวกันสำหรับหลาย repos จะใช้ได้เมื่อทำโดยผู้ใช้ (ซึ่งบอกว่าคีย์ที่เกี่ยวข้องกับบัญชีของเขา / เธอ)
  • การใช้คีย์เดียวกันสำหรับ repo หลายรายการไม่เป็นไรเมื่อ repo แนบคีย์เพราะคุณไม่รู้เลยว่าใครเข้าถึงอะไร
    ซึ่งแตกต่างจาก "ผู้ใช้เครื่อง" ตรงที่มีการประกาศ "ผู้ใช้" เป็นผู้ทำงานร่วมกันสำหรับ repo จำนวนมาก
    ที่นี่ (คีย์การปรับใช้) ไม่มี "ผู้ทำงานร่วมกัน"เพียงแค่การเข้าถึง ssh โดยตรงที่มอบให้กับ repo

53
GitHub รองรับทั้งคีย์สาธารณะระดับบัญชีและคีย์ระดับโปรเจ็กต์ (หรือที่เรียกว่า Deploy Keys) การไม่อนุญาตให้ใช้คีย์ระดับบัญชีซ้ำเป็นเรื่องที่สมเหตุสมผล แต่ฉันอ้างว่าการไม่อนุญาตให้ใช้คีย์ปรับใช้ไม่ได้ คีย์ระดับบัญชีเดียวของฉันช่วยให้เข้าถึงโปรเจ็กต์ทั้งหมดของฉันได้ดังนั้นทำไมฉันจึงไม่มีคีย์การปรับใช้ที่อนุญาตให้เข้าถึงโปรเจ็กต์บางอย่างของฉัน มันมีข้อ จำกัด มากขึ้นเท่านั้นและไม่ได้สร้างความกังวลใด ๆ ให้ฉันเห็น ความกังวลของคุณเกี่ยวกับการเปิดความเป็นไปได้สำหรับผู้ใช้ที่แตกต่างกันสองคนในการแชร์คีย์ ssh เดียวกันไม่ได้เกิดขึ้นในภาพในสถานการณ์นั้น
David Ebbo

@DavidEbbo อาจไม่ได้มาในภาพ แต่ข้อกังวลนั้น (ผู้ใช้สองคนที่แตกต่างกันเพื่อแชร์คีย์ ssh เดียวกัน) เป็นหัวใจหลักของสาเหตุที่ไม่แชร์คีย์ ssh
VonC

21
ฉันเกรงว่าจะไม่ปฏิบัติตามเหตุผลของคุณที่นี่ ฉันกำลังถามเกี่ยวกับสถานการณ์ที่เฉพาะเจาะจงมาก (ใช้ Deploy Key ในหลาย ๆ โปรเจ็กต์) และการโต้แย้งของคุณว่าเป็นไปไม่ได้คือการแสดงสถานการณ์ที่ไม่เกี่ยวข้องกัน (ผู้ใช้สองคนแชร์คีย์ ssh) การยึดติดกับสถานการณ์ Deploy Key โดยเฉพาะจะมีอะไรเป็นลบของ github ที่ปล่อยให้มัน?
David Ebbo

6
@DavidEbbo ติดตามhelp.github.com/articles/managing-deploy-keysไม่มีสามวิธีใด (บัญชีบัญชีปรับใช้หรือบัญชีเครื่อง) ที่เกี่ยวข้องกับการแชร์คีย์ SSH ส่วนตัวเพื่อเข้าถึง repos ดังกล่าว การยึดติดกับสถานการณ์ Deploy Key โดยเฉพาะเนื่องจากเป็นคีย์บนเซิร์ฟเวอร์เพื่อให้ใช้ได้กับหลาย repos จะหมายถึงการแชร์ (หรือจำลอง) คีย์ส่วนตัวในหลาย repos ซึ่งจะลดขอบเขตการพิสูจน์ตัวตนและหากคีย์ถูกบุกรุกจะเพิ่มจำนวน repos ที่เปิดเผย
VonC

8
ขอบคุณหน้านั้นมีข้อมูลที่น่าสนใจ ฉันจะทำเครื่องหมายคำตอบของคุณว่าเป็นคำตอบในวันหรือสองวันถ้าฉันไม่เห็นอะไรอีกแม้ว่าจะพูดตามตรงฉันก็ยังไม่มั่นใจในการโต้แย้ง การมีคีย์การปรับใช้ที่ใช้กับสอง repos ไม่ได้อ่อนแอไปกว่าการใช้คีย์เครื่องที่เข้าถึงชุดของ repos เดียวกัน
David Ebbo

11

น่าเสียดายที่นี่เป็นสถานการณ์ที่ github เพียงแค่ตีความความแตกต่างระหว่างคู่คีย์กับบัญชีหรือโครงการผิดพลาด

เนื่องจากคู่คีย์ใช้สำหรับการพิสูจน์ตัวตนและการอนุญาตจึงเป็นข้อมูลประจำตัวที่มีประสิทธิภาพ บัญชี Github เป็นอีกหนึ่งเอกลักษณ์ การเชื่อมต่อบัญชี github กับคู่คีย์จะสร้างการแมป 1: N ระหว่างข้อมูลประจำตัวตามบัญชี github และรหัสคู่คีย์

ในทางกลับกัน github บังคับใช้การแมป 1: N ของโปรเจ็กต์กับรหัสประจำตัวที่ใช้คีย์คู่ อะนาล็อกในโลกแห่งความเป็นจริงคือมีประตูที่อนุญาตให้เข้าถึงโครงการที่สามารถปลดล็อกได้โดยผู้คนจำนวนมาก แต่เมื่อมีคนใดได้รับกุญแจประตูพวกเขาจะไม่สามารถรับกุญแจอื่นสำหรับประตูอื่นได้อีกเลย

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


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

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

ไม่มีสิ่งใดเปลี่ยนแปลงสิ่งที่ github อนุญาตแน่นอน


1
เฮ้. เป็นเรื่องตลกที่สิ่งนี้ถูกลดลงเมื่อถูกต้องมากกว่าคำตอบที่ยอมรับ มีอักษรเป็นอะไรในเรื่องนี้ว่าเป็นการป้องกันการแบ่งปันที่สำคัญที่มีผู้ใช้หลายคน
Jens Finkhaeuser

2

ฉันต้องใช้ความคิดอย่างมากในการหาเหตุผลเข้าข้างตนเองและคิดสถานการณ์นี้ขึ้นมา

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

สิ่งนี้อาจฟังดูเป็นประโยชน์ แต่ความสัมพันธ์แบบหลายต่อหนึ่งนี้แท้จริงแล้วไม่ปลอดภัยโดยเนื้อแท้เมื่อคุณพิจารณาปัจจัยของมนุษย์ เนื่องจากคุณไม่สามารถทราบได้อย่างแน่นอนว่าคุณได้เพิกถอนการเข้าถึงทั้งหมดจริง ๆ หรือไม่โดยไม่ได้ตรวจสอบทุกที่เก็บและเปรียบเทียบคีย์สาธารณะแต่ละรายการทีละรายการในกรณีที่คุณลืมไปว่าคุณได้กำหนดไว้ที่ใดจริง

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


1
ฉันไม่มั่นใจกับคำอธิบายนี้ โดยพื้นฐานแล้วมันแตกต่างจากการอนุญาตให้ผู้ใช้รายหนึ่งเข้าถึงที่เก็บหลาย ๆ ที่ซึ่งได้รับอนุญาตอย่างชัดเจนอย่างไร หากคุณไม่ไว้วางใจผู้ใช้รายนั้นอีกต่อไปคุณจะต้องลบผู้ใช้ออกจากทุก repo
David Ebbo

@ เดวิด: How is that fundamentally different from allowing one user to access multiple repositories, which is obviously allowedคุณช่วยอธิบายเพิ่มเติมได้ไหม ฉันมีเพียงบัญชีผู้พัฒนาและฉันเห็นว่าคุณสามารถเพิ่มคีย์ ssh สำหรับการเข้าถึงทั้งบัญชี (คีย์เดียวสำหรับที่เก็บทั้งหมด) หรือเพิ่มคีย์การปรับใช้แต่ละรายการ (หนึ่งคีย์สำหรับแต่ละที่เก็บ) นี่ยังคงเป็นความสัมพันธ์แบบหนึ่งต่อกลุ่มหรือหนึ่งต่อหนึ่งซึ่งการเพิกถอนคีย์ "หนึ่ง" จะเป็นการเพิกถอนการเข้าถึง "ทั้งหมด" ในทั้งสองกรณี
Zhro

เพื่อให้ชัดเจนยิ่งขึ้นไม่มีโอกาส (สิ่งที่ฉันสามารถบอกได้) ในการกำหนดคีย์โดยไม่ได้ตั้งใจในความสัมพันธ์แบบกลุ่มต่อหนึ่งซึ่งอาจมีการเข้าถึงที่อื่นหลังจากถูกเพิกถอน สิ่งนี้ดูเหมือนจะเป็นแรงจูงใจของ GitHub สำหรับข้อ จำกัด นี้ แต่ฉันคาดเดาเท่านั้น
Zhro

วิธีที่ฉันดูสิ่งต่างๆการปรับใช้คีย์นั้นคล้ายกับ 'ผู้ใช้ที่ไม่ระบุตัวตน' ที่ไม่มีบัญชีเต็มรูปแบบ แต่ยังคงแสดงถึงเอกลักษณ์บางอย่าง ความแตกต่างคือในกรณีบัญชีคุณให้สิทธิ์เข้าถึงบัญชีซึ่งให้สิทธิ์เข้าถึงคีย์ ssh ทั้งหมดในบัญชีนั้นทางอ้อม ในกรณี Deploy Key คุณจะข้ามสิ่งที่เป็นนามธรรมของบัญชีและให้สิทธิ์เข้าถึงคีย์ ssh โดยตรง แต่นอกเหนือจากนั้นฉันไม่เห็นว่าความต้องการด้านความปลอดภัยแตกต่างกัน หากบัญชีหรือเจ้าของคีย์การปรับใช้กลายเป็นสิ่งชั่วร้ายคุณต้องลบออกจาก repo แต่ละครั้ง
David Ebbo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.