機密事項のマージリクエスト

GitLab 12.1 で導入されました

公開リポジトリ内のマージリクエストは、機密issueのために作成されたマージリクエストであっても公開されます。機密イシューの作業中に機密情報が漏れるのを避けるには、同じ名前空間の非公開フォークからマージリクエストを作成してください。

ロールは親グループから継承されます。プライベートフォークを元の(公開)リポジトリと同じ名前空間(同じグループまたはサブグループ)に作成した場合、開発者はあなたのフォークで同じ権限を受け取ります。この継承により、以下のことが保証されます:

  • 開発者ユーザーは、機密のイシューを閲覧し、解決するために必要な権限を持っています。
  • 個々のユーザーにフォークへのアクセス権を与える必要はありません。

GitLab における機密マージリクエストのセキュリティ・プラクティスを読むことができます。

マージリクエストの作成

ブランチはデフォルトで公開されています。作業の機密性を守るため、ブランチとマージリクエストは同じ名前空間に作成する必要がありますが、ダウンストリームは非公開フォークにする必要があります。非公開フォークを公開リポジトリと同じ名前空間に作成した場合、そのフォークはアップストリーム公開リポジトリの権限を継承します。アップストリームの公開リポジトリで Developer ロールを持つユーザーは、あなたがアクションを起こさなくても、ダウンストリームの非公開フォークでそれらのアップストリームパーミッションを継承します。これらのユーザーは、非公開の問題を修正するために、あなたのプライベートフォークのブランチにコードをプッシュすることができます。

caution
非公開フォークをアップストリームリポジトリとは異なる名前空間で作成した場合、非公開フォークから機密情報が漏れる可能性があります。2つのネームスペースには同じユーザーが含まれていないかもしれません。

前提条件:

非公開マージリクエストを作成するには:

  1. 極秘issueのページに移動します。イシューの説明の下にスクロールし、マージリクエストを作成するを選択します。
  2. ニーズに合った項目を選択します:
    • ブランチとマージリクエストの両方を作成するには、マージリクエストとブランチの両方を作成するを選択します。マージリクエストのターゲットは、公開アップストリームプロジェクトのデフォルトブランチではなく、あなたのフォークのデフォルトブランチになります。
    • ブランチのみを作成するには、ブランチの作成を選択します。
  3. 使用するプロジェクトを選択します。これらのプロジェクトではマージリクエストが有効になっており、あなたは開発者ロール (あるいはそれ以上) を持っています。
  4. ブランチ名を入力し、ソース(ブランチまたはタグ)を選択します。GitLabはこれらのブランチが非公開フォークで利用可能かどうかをチェックします。なぜなら、選択したフォークでは両方のブランチが利用可能でなければならないからです。
  5. 作成を選択します。

このマージリクエストの対象は、公開アップストリームプロジェクトではなく、あなたの非公開フォークです。あなたのブランチ、マージリクエスト、コミットは非公開フォークに残ります。これにより、機密情報の早すぎる漏洩を防ぐことができます。

あなたのフォークからアップストリームリポジトリへのマージリクエストは、次のような場合に行います:

  • 非公開フォークで問題が解決されたと確信したとき。
  • 秘密のコミットを公開する準備ができました。