사용자 파일 업로드

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

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

  • 프로젝트의 이슈 또는 병합 요청.
  • 그룹의 에픽.

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

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

경고: 알려지지 않거나 믿을 수 없는 출처에서 업로드한 파일을 다운로드할 때 특히 실행 가능한 파일이거나 스크립트인 경우 주의해야 합니다.

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

  • 강제 권한 확인이 일반적으로 사용 가능하게 되었습니다. GitLab 15.3에서 enforce_auth_checks_on_uploads 기능 플래그가 제거되었습니다.
  • 사용자 인터페이스에서 프로젝트 설정이 도입되었습니다 . GitLab 15.3에서.

프로젝트의 이슈 또는 병합 요청에 업로드된 비-이미지 파일에 대한 액세스는 프로젝트 가시성에 의해 결정됩니다. 그룹 에픽에 업로드된 비-이미지 파일에 대한 액세스는 그룹 가시성에 의해 결정됩니다.

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

이미지에 대한 인증 확인은 알림 이메일의 본문에 표시되는 문제를 일으킬 수 있습니다. 전자 메일은 Outlook, Apple Mail 또는 모바일 장치와 같은 클라이언트에서 자주 읽힙니다. 이메일에 표시된 이미지는 GitLab에 인증되지 않은 클라이언트에서는 깨져 보일 수 있으며 사용할 수 없습니다.

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

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

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

전제 조건:

  • 프로젝트에서 Maintainer 또는 Owner 역할을 가져야 합니다.
  • 프로젝트 가시성 설정이 비공개 또는 내부로 설정되어 있어야 합니다.

모든 미디어 파일에 대한 인증 설정을 구성하려면:

  1. 왼쪽 사이드바에서 검색 또는 참조를 선택하고 프로젝트를 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 가시성, 프로젝트 기능, 권한을 확장합니다.
  4. 프로젝트 가시성으로 이동하고 미디어 파일 보기에 대한 인증 필요를 선택합니다.

참고: 이 옵션은 공개 프로젝트에 대해 선택할 수 없습니다.

업로드된 파일 삭제

  • GitLab 15.3에서 도입되었습니다.
  • REST API에는 GitLab 17.2에서 지원이 추가되었습니다.

민감하거나 기밀 정보가 포함된 파일은 삭제해야 합니다. 파일을 삭제하면 사용자가 파일에 액세스할 수 없으며 직접 URL은 404 오류를 반환합니다.

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

예시:

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

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

또한 업로드된 파일을 삭제하려면 REST API를 사용할 수 있습니다. 프로젝트 또는 그룹에 대한 REST API를 사용하여 업로드된 파일을 삭제할 수 있습니다.