사용자 파일 업로드

Tier: Free, Premium, Ultimate Offering: GitLab.com, 자체 호스팅, GitLab Dedicated

사용자는 다음 위치로 파일을 업로드할 수 있습니다:

  • 프로젝트의 이슈 또는 Merge Request.
  • 그룹 내 에픽.

GitLab은 무단으로 URL을 추측하는 것을 방지하기 위해 랜덤 32자 ID로 이러한 업로드된 파일에 대한 직접적인 URL을 생성합니다. 이러한 무작위화는 민감한 정보를 포함한 파일에 일부 보안을 제공합니다.

사용자가 GitLab의 이슈, Merge Request 및 에픽에 업로드한 파일에는 URL 경로에 /uploads/<32-character-id>가 포함됩니다.

caution
알려지지 않거나 신뢰할 수 없는 소스가 업로드한 파일, 특히 실행 가능한 파일 또는 스크립트인 경우 다운로드할 때 주의해야 합니다.

업로드된 파일의 액세스 제어

  • 강제적인 권한 확인이 일반 사용 가능으로 지정되었습니다(GA) (GitLab 15.3). 피처 플래그 enforce_auth_checks_on_uploads가 제거되었습니다.
  • 사용자 인터페이스에서의 프로젝트 설정이 소개되었습니다 (GitLab 15.3).

프로젝트 또는 그룹에서 업로드된 이미지가 아닌 파일에 대한 액세스는 다음과 같이 결정됩니다:

  • 프로젝트의 경우 이슈 또는 Merge Request에 업로드된 파일의 액세스는 프로젝트 가시성에 의해 결정됩니다.
  • 그룹 에픽의 경우 업로드된 파일의 액세스는 그룹 가시성에 의해 결정됩니다.

공개 프로젝트 또는 그룹의 경우 이슈, Merge Request 또는 에픽이 비밀일지라도 누구나 직접 첨부 파일 URL을 통해 이러한 파일에 액세스할 수 있습니다. 비공개 및 내부 프로젝트의 경우 GitLab은 PDF와 같은 이미지가 아닌 파일의 경우 인증된 프로젝트 구성원만 액세스할 수 있도록 보장합니다. 기본적으로 이미지 파일은 같은 제한이 없으며 누구든지 URL을 사용하여 볼 수 있습니다. 이미지 파일을 보호하려면 모든 미디어 파일에 대한 권한 확인을 활성화하여 인증된 사용자만 볼 수 있도록 설정하세요.

이미지에 대한 인증 확인은 알림 이메일의 본문에서 표시 문제를 발생시킬 수 있습니다. 이메일은 흔히 Outlook, Apple Mail 또는 모바일 기기와 같은 클라이언트에서 읽힙니다. 이 클라이언트가 GitLab에 인증되지 않은 경우에는 이미지가 깨졌거나 이용할 수 없는 상태로 나타납니다.

모든 미디어 파일에 대한 권한 확인 활성화

비공개 또는 내부 프로젝트에서는 인증된 프로젝트 구성원만 이미지가 아닌 첨부 파일 (PDF 포함)을 볼 수 있습니다.

비공개 또는 내부 프로젝트에서 이미지 파일에 대한 인증 요구 사항을 적용하려면:

사전 조건:

  • 프로젝트의 Maintainer 또는 Owner 역할이어야 합니다.
  • 프로젝트 가시성 설정이 비공개 또는 내부여야 합니다.

모든 미디어 파일에 대한 인증 설정 구성 방법:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 가시성, 프로젝트 기능, 권한을 확장합니다.
  4. 프로젝트 가시성으로 스크롤하고 미디어 파일 보기에 대한 인증이 필요를 선택합니다.
note
이 옵션은 공개 프로젝트에 대해 선택할 수 없습니다.

업로드된 파일 삭제

업로드된 파일이 민감하거나 비밀 정보를 포함할 경우 해당 파일을 삭제해야 합니다. 해당 파일을 삭제한 후에는 사용자가 파일에 액세스할 수 없으며 직접적인 URL은 404 오류를 반환합니다.

프로젝트 소유자 및 유지보수자는 상호작용형 GraphQL 탐색기를 사용하여 GraphQL 엔드포인트에 액세스하고 업로드된 파일을 삭제할 수 있습니다.

예시:

mutation{
  uploadDelete(input: { projectPath: "<파일 경로>", secret: "<32-character-id>" , filename: "<파일명>" }) {
    upload {
      id
      size
      path
    }
    errors
  }
}

Owner 또는 Maintainer 역할이 없는 프로젝트 구성원은 이 GraphQL 엔드포인트에 액세스할 수 없습니다.