複数のgithubプロジェクトに同じデプロイキーを使用する


94

Githubでは、同じsshデプロイキーを複数のプロジェクトに使用することはできません。これは、場合によっては非常に便利です(たとえば、プライベートサブモジュールを使用するプロジェクトを処理するCIサーバー)。この制限は「セキュリティ上の理由」のためにあると言っているように見えるさまざまなスレッドを見てきましたが、どのようなリスクが発生するかについての説得力のある説明はまだ見ていません。

Githubがアカウントレベルのキーの再利用を許可していないという事実は理にかなっていることに注意してください(2人のユーザーがキーを共有するべきではありません)。私が質問しているのは、DeployKeysの制限だけです。

そして明確にするために、私は回避策(ダミーユーザーを作成し、複数のキーを使用するなど)を探していませんが、キーの展開に関するこの制限のもっともらしい説明だけを探しています。

関連スレッド:


これ以上の方法はないため、リポジトリへの読み取り専用アクセスを許可する専用のデプロイメントユーザーを作成しました。最終結果は同じです。
datageek 2016

こっちグレート答え:stackoverflow.com/questions/11656134/...
apple16

回答:


22

参照する回避策(単一の「ビルド」ユーザーを作成する、またはid_rsa.REPONAME.pubリポジトリごとに同じユーザーを共有する)で示されている唯一の理由は、次のとおりです。

異なるユーザーの公開鍵/秘密鍵の共有は避けてください

あなたの状況(複数のプロジェクトを構築する)ではそうではありませんが、同じsshキーを再利用できるようにすると、2人の異なるユーザーが同じsshキーを共有する可能性があり、認証の目的が無効になります。

認証とは、
「特定のsshキーを使用するということは、がそれを使用しているかを知っているはずだ」という意味です。


GitHubページの「デプロイキーの管理」では、sshを使用したさまざまなアカウントについて詳しく説明しています。

  • SSHエージェント転送:エージェント転送は、サーバーにSSHで接続してgitコマンドを実行するときに、ローカル開発マシンにすでに設定されているSSHキーを使用します。
    サーバー上で実行されているかのように、リモートサーバーにローカルのssh-agentへのアクセスを選択的に許可できます。
    したがって、サーバー上で秘密鍵を複製する必要はありません。

  • マシンユーザー:(これは「ダミーアカウント」戦略です)ユーザーアカウントにキーを添付します。このアカウントは人間が使用することはないため、マシンユーザーと呼ばれます。
    ただし、このユーザーは人間と同じように扱い、通常のアカウントであるかのようにマシンのユーザーアカウントにキーを添付します。
    アカウントの共同編集者またはチームに、アクセスが必要なリポジトリへのアクセスを許可します。
    したがって、サーバーごとに1つずつ、1つの「マシンユーザー」に関連付けられた1つの秘密鍵。

DHaは、コメントでデプロイキーの制限数を指摘しています。また、マシンのユーザーアカウントは1つしか持てません)

  • デプロイキー(GitHubリポジトリごとに1つ)サーバーに保存され、GitHub上の単一のリポジトリへのアクセスを許可するSSHキー。
    このキーは、ユーザーアカウントではなく、リポジトリに直接添付されます
    アカウント設定に移動する代わりに、ターゲットリポジトリの管理ページに移動します。
    Deploy Keys」に移動し、「」をクリックしますAdd deploy key。公開鍵を貼り付けて送信します。

今回は、sshキーはユーザー(複数のリポジトリへのアクセスを許可できる)ではなく、1つのリポジトリにアタッチされています。複数のリポジトリに
sshアクセスを許可することは、「マシンユーザー」と同等です。

用語での認証

  • 複数のリポジトリに同じキーを使用することは、ユーザー(自分のアカウントに関連付けられたキーを持っている)によって行われる場合は問題ありません。
  • 誰がアクセスしたかがまったくわからないため、複数のリポジトリに同じキーを使用することは、キーがリポジトリによって添付されている場合は問題ありません。
    これは、「ユーザー」が多くのリポジトリの共同作業者として宣言されている「マシンユーザー」とは異なります。
    ここ(Deploy key)には、「コラボレーター」はなく、リポジトリに直接sshアクセスが許可されているだけです。

53
GitHubは、アカウントレベルの公開キーとプロジェクトレベルのキー(別名デプロイキー)の両方をサポートします。アカウントレベルのキーの再利用を許可しないことは理にかなっていますが、キーの展開で許可しないことは意味がないと私は主張します。1つのアカウントレベルキーですべてのプロジェクトにアクセスできるのに、一部のプロジェクトへのアクセスを許可する展開キーを使用できないのはなぜですか?それはより制限的であり、私が見ることができる懸念を引き起こしません。2人の異なるユーザーが同じsshキーを共有する可能性を開くことについてのあなたの懸念は、そのシナリオでは思い浮かびません。
David Ebbo 2012年

@DavidEbbo全体像には現れないかもしれませんが、その懸念(2人の異なるユーザーが同じsshキーを共有する)が、sshキーが共有されない理由の核心です。
vonC 2012年

21
私はここであなたの推論に従わないのではないかと思います。私は非常に具体的なシナリオ(複数のプロジェクトでデプロイキーを使用する)について質問していますが、それが不可能であるというあなたの主張は、無関係のシナリオ(2人のユーザーがsshキーを共有する)を提起することです。キーのデプロイシナリオだけに固執すると、githubがそれを許可することのマイナス面は何でしょうか?
David Ebbo 2012年

6
続いて@DavidEbbo help.github.com/articles/managing-deploy-keys、三つの方法(アカウント、展開や機械が占める)のどれもがアクセス用のSSH秘密鍵を共有含まれていないレポは語りました。サーバー上のキーであるため、キーの展開シナリオのみに固執することは、複数のリポジトリで有効であるためには、複数のリポジトリで秘密キーを共有(または複製)することを意味します。これにより、認証の側面が低下し、キーが侵害された場合、公開されるリポジトリの数が増加します。
vonC 2012年

8
おかげで、そのページには興味深い情報があります。正直なところ、私はまだ議論に納得していませんが、他に何も見当たらない場合は、1日か2日であなたの回答を回答としてマークします。2つのリポジトリでデプロイキーを使用することは、同じリポジトリのセットにアクセスできるマシンキーを使用することと同じです。
David Ebbo 2012年

11

残念ながら、これはgithubがキーペアとアカウントまたはプロジェクトの違いを誤って解釈するシナリオです。

キーペアは認証と承認に使用されるため、事実上IDです。Githubアカウントは別のアイデンティティです。githubアカウントをキーペアに接続すると、githubアカウントベースのIDとキーペアIDの間に1:Nマッピングが効果的に確立されます。

逆に、githubはプロジェクトのキーペアベースのIDへの1:Nマッピングを強制します。現実世界の類似物は、多くの異なる人々がロックを解除できるプロジェクトへのアクセスを許可するドアがあるということです。しかし、それらのいずれかがドアの鍵を取得すると、他のドアのその他の鍵を取得することはできなくなります。

キーが危険にさらされた場合に違反を封じ込めるという観点から、キーを頻繁に再利用しないことは理にかなっています。しかし、それは良い管理ポリシーです。原則として、キーが複数回使用されないようにすることはあまり意味がありません。決して再利用されないいくつかのドアのいくつかの鍵があること、まあ、それはポリシー次第です。


もう少し複雑なビューは、キーペアをロールとして説明することです。あなたは多くのキーペアを持つことができるので、多くの役割に住むことができます。秘密鍵は、ロールに対してユーザーを認証します。

Githubのプロジェクトへのキーマッピングのデプロイでは、ロールに複数のタスクを含めることはできないと記載されています。それはめったに現実的ではありません。

もちろん、githubが許可するものを変更するものはありません。


1
ふふ。受け入れられた答えよりも正しいのに、これがどのように反対票を投じられるかはちょっとおかしいです。これには文字通り、複数のユーザーとキーを共有することを妨げるもの何もありません
Jens Finkhaeuser 2018年

2

影響を合理化するために私は多くの考えを要し、このシナリオを思いつきました。

複数のリポジトリに割り当てたユーザーに対して単一のデプロイキーを作成するとします。そのキーを取り消す必要がありますが、複数の場所で使用されています。したがって、すべてのアクセスを取り消すことができる代わりに、誤って部分的なアクセスのみを取り消す可能性があります。

これはメリットのように聞こえるかもしれませんが、人的要因を考慮すると、この多対1の関係は実際には本質的に安全ではありません。これは、実際に割り当てた場所を忘れた場合に、すべてのリポジトリを調べて各公開鍵を個別に比較しないと、本当にすべてのアクセスを取り消したかどうかを確実に知ることができないためです。

非常に多くの一意のキーを割り当てて管理することは間違いなくイライラしますが、GitHubがポリシーをどのように設定したかによって、セキュリティへの影響は明らかです。キーを取り消すと、そのキーによって付与されたすべてのアクセスが取り消されることが保証されます。これは、1か所でしか使用されないためです。 。


1
私はこの説明に納得していません。これは、明らかに許可されている1人のユーザーが複数のリポジトリにアクセスできるようにすることとは根本的にどのように異なりますか?そのユーザーを信頼しなくなった場合は、すべてのリポジトリからそのユーザーを削除する必要があります。
David Ebbo 2017年

@David:How is that fundamentally different from allowing one user to access multiple repositories, which is obviously allowedこれについてさらに説明できますか?私は開発者アカウントしか持っていませんが、アカウント全体にアクセスするためのsshキー(すべてのリポジトリに1つのキー)または個別のデプロイキー(リポジトリごとに1つのキー)を追加できることがわかりました。これは、どちらの場合も「1」キーを取り消すと「すべて」アクセスが取り消される、1対多または1対1の関係です。
zhro 2017年

さらに明確にするために、アクセスが取り消された後に他の場所にアクセスが存在する可能性がある多対1の関係で、誤ってキーを割り当てる機会(私が言えること)はありません。これがGitHubのこの制限の動機のようですが、私は推測しているだけです。
zhro 2017年

私の見方では、デプロイキーは、完全なアカウントを持っていないが、それでもある種のIDを表す「匿名ユーザー」に少し似ています。違いは、アカウントの場合、アカウントへのアクセスを許可することです。これにより、そのアカウントのすべてのsshキーへのアクセスが間接的に許可されます。デプロイキーの場合、アカウントの抽象化をスキップして、sshキーへのアクセスを直接許可します。しかし、それを超えて、私はセキュリティのニーズが異なっているとは思いません。アカウントまたはデプロイキーの所有者が悪意を持った場合は、各リポジトリからそれらを削除する必要があります。
David Ebbo 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.