デプロイキー
デプロイ鍵は、SSH公開鍵をGitLabインスタンスにインポートすることで、1つまたは複数のリポジトリへの読み取り専用または読み取り/書き込み(有効な場合)アクセスを可能にします。
これは、継続的インテグレーション(CI) サーバーにリポジトリをクローンする際に便利です。デプロイキーを使用することで、ダミーのユーザーアカウントを設定する必要がなくなります。
デプロイキーには2種類あります:
デプロイキーの主な内容
デプロイキーを使うと、リモートマシン(VM、物理など)がわずかな手順でGitLabリポジトリにアクセスできるようになります。 リモートマシンが自動化でGitLabリポジトリとやり取りしたい場合、シンプルなソリューションです。
欠点は、リモートマシンがハッカーによって侵害された場合、リポジトリが脆弱性になる可能性があることです。 リポジトリでデプロイキーを有効にする前に、リモートマシンへのアクセスを制限する必要があります。 従うべき良いルールは、信頼できるユーザーのみにアクセスし、許可されたユーザーが GitLab プロジェクトでメンテナー以上の権限を持っていることを確認することです。
このようなセキュリティ上の問題が懸念される場合、デプロイトークンが代替手段として機能します。
デプロイキーの権限
プロジェクトでデプロイ キーを有効にするときに、そのアクセス レベルを選択できます:
-
read-only
デプロイキーはリポジトリを読み込むことができます。 -
read-write
デプロイキーはリポジトリの読み込みとリポジトリへの書き込みができます。
プロジェクトのメンテナーとオーナーは、デプロイキーを有効にしたり無効にしたりすることができます。 また、自分のデプロイキーを追加して、このプロジェクトで有効にすることもできます。
write-access
のデプロイキーを使ってコミットをプッシュすると、GitLab はそのデプロイキーの作成者がリソースにアクセスする権限を持っているかどうかをチェックします。 たとえば、次のようになります:
- デプロイキーを使って保護されたブランチにコミットをプッシュする場合は、デプロイキーの作成者がそのブランチにアクセスできる必要があります。
- CI/CDパイプラインをトリガーするコミットをプッシュするためにデプロイキーを使用する場合、デプロイキーの作成者はCI/CDリソース(保護環境、秘密変数など)へのアクセス権を持っていなければなりません。
- デプロイ キーの作成者にプロジェクトのリポジトリを読み取る権限がない場合、デプロイ キーの処理中にエラーが発生する_ことがあります_。
デプロイキーとデプロイトークンの違い
デプロイキーとデプロイトークンはどちらもリポジトリにアクセスするのに役立ちますが、両者にはいくつかの重要な違いがあります:
- デプロイトークンは、関連性のないプロジェクト間や、同じグループに属していないプロジェクト間でも共有できます。 デプロイトークンは、プロジェクトまたはグループのいずれかに属します。
- デプロイキーは、自分のマシンで自分で生成する必要があるSSHキーです。 デプロイトークンはGitLabインスタンスによって生成され、ユーザーに一度だけ(作成時に)提供されます。
- デプロイ キーは、登録され有効になっている限り有効です。 デプロイトークンには有効期限を設定することで、その有効性を制御できるため、時間的な制約を受ける可能性があります。
- デプロイトークンでレジストリにログインしたり、読み書きオペレーションを実行したりすることはできません。
- デプロイキーを使用するにはSSHキーペアが必要ですが、デプロイトークンは必要ありません。
デプロイキーを有効にする方法
プロジェクトデプロイキー
プロジェクトのメンテナーとオーナーは、プロジェクト リポジトリのデプロイ キーを追加したり、有効にしたりできます:
- プロジェクトの設定 >リポジトリページに移動します。
- Deploy Keysセクションを展開します。
- 新しいデプロイキーのタイトルを指定し、公開SSHキーを貼り付けます。
- (オプション)Write access allowedにチェックを入れて、
read-write
アクセスを許可します。read-only
アクセスの場合は、チェックを外したままにします。
プロジェクトデプロイキーには3つのリストがあります:
- 有効なデプロイキー
- 非公開のデプロイ鍵
- 公開アクセス可能なデプロイ鍵
キーを追加すると、デフォルトでこのプロジェクトで有効になり、「Enabled deploy keys」タブに表示されます。
プライベートアクセス可能なデプロイ鍵」タブでは、別のプロジェクトでインポート済みの秘密鍵を有効にすることができます。 これらの鍵にアクセスできるのは、以下のいずれかに該当するためです:
- 以前は別のプロジェクトでキーを自分でアップロードしていました。
- あなたはキーがインポートされた他のプロジェクトのメンテナーまたはオーナーです。
Publicly accessible deploy keysタブでは、GitLabインスタンス全体で公開されたキーを有効にすることができます。
キーを追加した後、そのキーを編集してタイトルを更新したり、read-only
とread-write
のアクセスを切り替えたりすることができます。
read-only
からread-write
に更新すると、変更は現在のプロジェクトに対してのみ適用されます。公開デプロイ鍵
公開デプロイキーは、GitLabインスタンス内の任意のリポジトリへのread-only
またはread-write
アクセスを可能にします。これは、CI/CDなどのセキュリティで保護された共有サービスにリポジトリをインテグレーションするのに便利です。
インスタンス管理者は公開デプロイキーを追加できます:
- 管理エリア({admin})> キーのデプロイ に移動します。
-
新しいデプロイキーをクリックしてください。
プロジェクトメンテナーやオーナーが、追加する公開デプロイ鍵を正しく識別するための主な方法です。 たとえば、SaaSのCI/CDインスタンスにアクセスするための鍵であれば、そのサービス名を鍵名に使用します。
プロジェクトメンテナー以上の人は、公開デプロイキーを承認することで、プロジェクトでそのキーを使用できるようになります。
公開デプロイ鍵は、プロジェクトデプロイ鍵に比べてセキュリティが高く、ターゲットとなるインテグレーションシステムの管理者だけが鍵の値を知っているか、それを設定する必要があります。
公開デプロイキーを作成する際には、特定のサービスだけといった非常に狭い範囲での利用を想定して定義するのか、すべてのサービスに対してread-write
アクセスできるようにするなど、より広い範囲での利用を想定して定義する必要があるのかを判断してください。
トラブルシューティング
デプロイキーを保護されたブランチにプッシュできません
このデプロイキーのオーナーが保護されたブランチへのアクセス権を持っていない場合、このデプロイキーはブランチへのアクセス権も持ちません。 これに加えて、“Allowed to push” セクションでNo oneを選択すると、デプロイキーを使用しているユーザーやサービスは、選択したブランチにプッシュできなくなります。
詳しくは本号のイシューをご参照ください。