여러 github 프로젝트에 동일한 배포 키 사용


94

Github는 하나 이상의 프로젝트에 동일한 ssh 배포 키를 사용하는 것을 허용하지 않습니다. 이는 경우에 따라 매우 유용합니다 (예 : 비공개 하위 모듈이있는 프로젝트를 처리하는 CI 서버). 이 제한이 '보안상의 이유로'있다고 말하는 여러 스레드를 보았지만 정확히 어떤 위험이 발생할 지에 대한 설득력있는 설명은 아직 보지 못했습니다.

Github에서 계정 수준 키의 재사용을 허용하지 않는다는 사실 은 의미가 있습니다 (두 명의 사용자가 키를 공유해서는 안 됨). 내가 질문하는 것은 키 배포에 대한 제한 일뿐 입니다.

그리고 분명히, 나는이있어 하지 해결 방법을 찾고 (더미 사용자를 생성, 여러 개의 키를 사용하여 ...) 만 배포 키에 이러한 제한에 대한 그럴듯한 설명합니다.

관련 스레드 :


더 좋은 방법이 없기 때문에 리포지토리에 대한 읽기 전용 액세스 권한을 부여하는 전용 배포 사용자를 생성했습니다. 최종 결과는 동일합니다.
Datageek

여기에 훌륭한 답변이 있습니다 : stackoverflow.com/questions/11656134/…
apple16

답변:


22

참조하는 해결 방법 (단일 "빌드"사용자 생성 또는 id_rsa.REPONAME.pub저장소 당 동일한 공유)에 설명 된 유일한 이유 는 다음과 같습니다.

다른 사용자에게 공개 / 개인 키를 공유하지 마십시오.

귀하의 상황 (다중 프로젝트 빌드)에서는 그렇지 않더라도 동일한 ssh 키를 재사용하면 두 명의 다른 사용자가 동일한 ssh 키를 공유 할 수 있는 가능성이 열리고 인증 목적 이 무효화 됩니다.

인증은
"특정 ssh 키를 사용하는 것은 누가 사용하고 있는지 알고 있어야 함을 의미합니다"를 의미합니다 .


GitHub 페이지 " 배포 키 관리 "는 ssh를 사용하는 다양한 계정에 대해 자세히 설명합니다.

  • SSH 에이전트 포워딩 : 에이전트 포워딩은 서버에 SSH로 로그인하고 git 명령을 실행할 때 로컬 개발 머신에 이미 설정된 SSH 키를 사용합니다.
    원격 서버가 서버에서 실행중인 것처럼 선택적으로 로컬 ssh-agent에 액세스하도록 할 수 있습니다.
    따라서 서버에서 개인 키를 복제 할 필요가 없습니다.

  • 컴퓨터 사용자 : ( "더미 계정"전략) 사용자 계정에 키를 연결합니다. 이 계정은 사람이 사용하지 않으므로 기계 사용자라고합니다.
    이 사용자를 사람과 같은 방식으로 취급하고 키를 일반 계정 인 것처럼 컴퓨터 사용자 계정에 연결합니다.
    계정 공동 작업자 또는 팀이 액세스해야하는 저장소에 대한 액세스 권한을 부여합니다.
    따라서 하나의 "머신 사용자"와 관련된 하나의 개인 키, 서버 당 하나씩.

( DHA는 지적 코멘트에 배포] 키 제한 번호, 그리고 사실은 당신은 단지 하나의 시스템 사용자 계정을 가질 수 있습니다)

  • 서버에 저장되고 GitHub의 단일 저장소에 대한 액세스 권한을 부여하는 SSH 키 (GitHub 저장소 당 하나)를 배포합니다 .
    이 키는 사용자 계정 대신 저장소에 직접 연결됩니다 .
    계정 설정으로 이동하는 대신 대상 저장소의 관리 페이지로 이동하십시오.
    " Deploy Keys"로 이동하여 " "을 (를) 클릭하십시오 Add deploy key. 공개 키를 붙여넣고 제출하십시오.

이번에는 ssh 키가 사용자 (여러 저장소에 대한 액세스 권한을 부여 할 수있는 사용자)에게 연결되지 않고 하나의 저장소에 연결됩니다. 여러 저장소에
대한 ssh 액세스 권한을 부여하는 것은 "머신 사용자"와 동일합니다.

의 용어에서 인증 :

  • 여러 저장소에 동일한 키를 사용하는 것은 사용자가 수행 한 경우 (자신의 계정에 연결된 키가 있음) 괜찮습니다.
  • 여러 리포지토리에 동일한 키를 사용하는 것은 키가 리포지토리에 연결되어있을 때 누가 무엇에 액세스했는지 전혀 모르기 때문에 괜찮지 않습니다 .
    이는 "사용자"가 많은 저장소의 공동 작업자로 선언되는 "머신 사용자"와 다릅니다.
    여기 (Deploy key) 에는 "collaborator"가 없으며 저장소에 직접 SSH 액세스 권한 만 부여됩니다.

53
GitHub는 계정 수준 공개 키와 프로젝트 수준 키 (일명 배포 키)를 모두 지원합니다 . 계정 수준 키의 재사용을 허용하지 않는 것은 의미가 있지만 키 배포에 허용 하지 않는 것은 그렇지 않다고 주장합니다 . 하나의 계정 수준 키를 사용하면 모든 프로젝트에 액세스 할 수 있는데 , 일부 프로젝트에 액세스 할 수있는 배포 키가없는 이유는 무엇입니까? 더 제한적일 뿐이며 내가 볼 수있는 문제를 일으키지 않습니다. 두 명의 다른 사용자가 동일한 ssh 키를 공유 할 가능성을 여는 것에 대한 귀하의 우려 는 해당 시나리오의 그림에 나와 있지 않습니다.
David Ebbo

@DavidEbbo 그림에 나오지 않을 수도 있지만 그 우려 (동일한 ssh 키를 공유하는 두 명의 다른 사용자)가 ssh 키가 공유되지 않는 이유의 핵심입니다.
VonC 2011

21
나는 여기서 당신의 추론을 따르지 않는 것이 두렵습니다. 저는 매우 구체적인 시나리오 (여러 프로젝트에서 배포 키 사용)에 대해 묻고 있는데, 이것이 가능하지 않다는 주장은 관련없는 시나리오 (ssh 키를 공유하는 두 명의 사용자)를 불러오는 것입니다. Deploy Key 시나리오만을 고수한다면 github에서 허용하는 단점은 무엇입니까?
데이비드 에보

6
@DavidEbbo help.github.com/articles/managing-deploy-keys 에 따르면 세 가지 방법 (계정, 배포 또는 머신 계정) 중 어느 것도 해당 저장소 에 액세스하기 위해 개인 SSH 키를 공유하지 않습니다. 여러 저장소에서 유효하기 때문에 서버 의 키이므로 배포 키 시나리오를 독점적으로 고수하는 것은 여러 저장소에서 개인 키를 공유 (또는 복제)하는 것을 의미합니다. 이는 인증 측면을 감소시키고 키가 손상되면 노출되는 저장소의 수를 증가시킵니다.
VonC 2011

8
감사합니다, 그 페이지에는 흥미로운 정보가 있습니다. 솔직히 말해서 나는 여전히 논쟁에 확신이 들지 않지만 내가 아무것도 보지 않으면 하루나 이틀 안에 당신의 대답을 대답으로 표시 할 것입니다. 두 개의 저장소에서 배포 키를 사용하는 것은 동일한 저장소 집합에 액세스 할 수있는 시스템 키를 사용하는 것보다 약하지 않습니다.
David Ebbo 2011

11

불행히도 이것은 github가 키 쌍과 계정 또는 프로젝트 간의 차이를 잘못 해석하는 시나리오입니다.

키 쌍은 인증 및 권한 부여에 사용되기 때문에 사실상 ID입니다. Github 계정은 또 다른 ID입니다. github 계정을 키 쌍에 연결하면 github 계정 기반 ID와 키 쌍 ID간에 ​​1 : N 매핑이 효과적으로 설정됩니다.

반대로 github는 키 쌍 ​​기반 ID에 대한 프로젝트의 1 : N 매핑을 적용합니다. 현실 세계의 유사점은 많은 다른 사람들이 잠금을 해제 할 수있는 프로젝트에 대한 액세스 권한을 부여하는 문이 있다는 것입니다. 그러나 일단 그들 중 누구라도 문에 대한 열쇠를 얻으면, 그들은 다시는 다른 문에 대한 다른 열쇠를 얻을 수 없습니다.

키가 손상 될 경우 위반을 포함하는 관점에서 키를 자주 재사용하지 않는 것이 좋습니다. 그러나 그것은 단지 좋은 행정 정책 일뿐 입니다. 원칙적 으로 키가 두 번 이상 사용되는 것을 방지하는 것은 의미가 없습니다 . 재사용되지 않는 일부 문에 대한 몇 가지 열쇠가 있다는 것은 다시 한 번 정책에 달려 있습니다.


약간 더 복잡한보기는 키 쌍을 역할로 설명하는 것 입니다. 많은 키 쌍을 소유 할 수 있으므로 많은 역할을 수행합니다. 개인 키는 역할에 대해 사용자를 인증합니다.

프로젝트에 대한 Github의 배포 키 매핑에 따르면 역할은 하나 이상의 작업을 포함 할 수 없습니다. 그것은 거의 현실적이지 않습니다.

물론 github가 허용하는 것을 변경하는 것은 없습니다.


1
헤. 받아 들여진 대답보다 더 정확할 때 이것이 어떻게 반대표를 받는지 웃기죠. 여기에는 여러 사용자와 키를 공유하는 것을 막는 말 그대로 아무것도 없습니다 .
Jens Finkhaeuser

2

그 의미를 합리화하기 위해 많은 생각이 필요했고이 시나리오를 생각해 냈습니다.

여러 저장소에 할당 한 사용자에 대해 단일 배포 키를 생성한다고 가정 해보십시오. 이제 해당 키를 취소하고 싶지만 여러 곳에서 사용됩니다. 따라서 모든 액세스를 취소 할 수있는 대신 실수로 부분 액세스 만 취소 할 수 있습니다.

이것은 이익처럼 들릴 수 있지만이 다 대일 관계는 인적 요인을 고려하면 실제로 본질적으로 안전하지 않습니다. 이는 모든 리포지토리를 검사하지 않고 모든 액세스를 취소했는지 여부를 확실히 알 수없고 실제로 할당 한 위치를 잊은 경우 각 공개 키를 개별적으로 비교할 수 없기 때문입니다.

너무 많은 고유 키를 할당하고 관리하는 것은 확실히 실망 스럽지만 GitHub가 정책을 수립 한 방법에 따라 보안에 미치는 영향이 분명 합니다. 키를 취소하면 해당 키가 부여한 모든 액세스 권한이 한 곳에서만 사용되기 때문에 취소됩니다. .


1
나는이 설명에 확신이 없다. 한 사용자가 여러 저장소에 액세스 할 수 있도록 허용하는 것과 근본적으로 다른 점은 무엇입니까? 해당 사용자를 더 이상 신뢰하지 않는 경우 모든 저장소에서 해당 사용자를 제거해야합니다.
David Ebbo

@David : How is that fundamentally different from allowing one user to access multiple repositories, which is obviously allowed더 설명해 주시겠습니까? 개발자 계정 만 있고 계정 전체 액세스를위한 SSH 키 (모든 저장소에 대해 하나의 키)를 추가하거나 개별 배포 키 (각 저장소에 대해 하나의 키)를 추가 할 수 있음을 확인했습니다. 이것은 여전히 ​​"일"키를 취소하면 두 경우 모두 "모든"액세스가 취소되는 일대 다 또는 일대일 관계입니다.
Zhro 2011

더 명확히하기 위해, 접근이 취소 된 후 다른 곳에 존재할 수있는 다 대일 관계에서 실수로 키를 할당 할 기회 (내가 말할 수있는 것)가 없습니다. 이것이이 제한에 대한 GitHub의 동기 인 것처럼 보이지만 추측 만하고 있습니다.
Zhro

내가 사물을 보는 방식, 배포 키는 전체 계정이 없지만 일종의 신원을 나타내는 '익명 사용자'와 약간 비슷합니다. 차이점은 계정의 경우 계정에 대한 액세스 권한을 부여하여 해당 계정의 모든 ssh 키에 대한 액세스 권한을 간접적으로 부여한다는 것입니다. 키 배포의 경우 계정 추상화를 건너 뛰고 ssh 키에 대한 액세스 권한을 직접 부여합니다. 하지만 그 이상으로 보안 요구가 달라지는 것은 아닙니다. 계정 또는 배포 키 소유자가 악의적 인 경우 각 저장소에서 제거해야합니다.
David Ebbo 2017
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.