ユーザーファイルのアップロード

ユーザーはファイルをアップロードすることができます:

  • プロジェクト内のイシューやマージリクエストにファイルをアップロードできます。
  • グループ内のエピック。

GitLabは、権限のないユーザーによるURLの推測を防ぐために、これらのイメージの直接URLを32文字のランダムなIDで生成します。このランダム化により、機密情報を含むイメージに対するセキュリティが提供されます。

アップロードされたファイルのアクセス制御

  • GitLab 14.8で導入された enforce_auth_checks_on_uploadsというフラグによる作成者の強制チェック。デフォルトでは無効になっています。
  • GitLab 15.3で、強制的な作成者チェックが一般的に利用可能になりました。機能フラグenforce_auth_checks_on_uploads は削除されました。
  • GitLab 15.3 で導入されたユーザーインターフェースのプロジェクト設定。

にアップロードされた非画像ファイルへのアクセス:

  • イシューやマージリクエストにアップロードされた画像以外のファイルへのアクセスは、プロジェクトの可視性によって決定されます。
  • グループエピックはグループの可視性によって決まります。

公開プロジェクトやグループの場合、イシューやマージリクエスト、エピックが機密であっても、誰でも直接添付URLからこれらのファイルにアクセスできます。非公開プロジェクトや内部プロジェクトでは、GitLabは認証されたプロジェクトメンバーだけがPDFのような非画像ファイルのアップロードにアクセスできるようにします。デフォルトでは、画像ファイルには同じ制限がなく、誰でもURLを使って閲覧することができます。画像ファイルを保護するには、すべてのメディアファイルの作成者チェックを有効にして、認証されたユーザーのみが閲覧できるようにしてください。

画像の認証チェックは、通知メールの本文で表示のイシューを引き起こす可能性があります。メールは、GitLabで認証されていないクライアント(Outlook、Apple Mail、モバイルデバイスなど)から頻繁に読み込まれます。クライアントがGitLabに認証されていない場合、メール内の画像が壊れて表示され、利用できません。

すべてのメディアファイルの作成者チェックを有効にします。

非公開プロジェクトや内部プロジェクトでは、認証されたプロジェクトメンバーだけが画像以外の添付ファイル(PDFを含む)を閲覧できます。

非公開プロジェクトや内部プロジェクトで画像ファイルに認証要件を適用するには

前提条件

  • プロジェクトのメンテナーまたはオーナーのロールを持っている必要があります。
  • プロジェクトの可視性設定が非公開または内部である必要があります。

すべてのメディアファイルの認証設定を行うには、以下の手順に従います:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定] > [全般]を選択します。
  3. 可視性]、[プロジェクト機能]、[権限]を展開します。
  4. プロジェクトの可視性]までスクロールし、[メディアファイルを表示するには認証が必要]を選択します。
note
公開プロジェクトでは、このオプションは選択できません。

アップロードされたファイルの削除

GitLab 15.3 で導入されました

アップロードされたファイルに機密情報が含まれている場合、そのファイルを削除する必要があります。ファイルを削除すると、ユーザーはそのファイルにアクセスできなくなり、直接のURLは404エラーを返します。

プロジェクトオーナーとメンテナーは、対話型のGraphiQLエクスプローラーを使用してGraphQLエンドポイントにアクセスし、アップロードされたファイルを削除することができます。

使用例:

mutation{
  uploadDelete(input: { projectPath: "<path/to/project>", secret: "<32-character-id>" , filename: "<filename>" }) {
    upload {
      id
      size
      path
    }
    errors
  }
}

オーナーまたはメンテナーのロールを持っていないプロジェクトメンバーは、このGraphQLエンドポイントにアクセスできません。