프로젝트 수준 보안 파일

프로젝트 수준 보안 파일 (Project-level secure files)

이 기능은 Mobile DevOps의 일부예요. 아직 개발 중인 기능이지만, 다음을 할 수 있어요.

CI/CD 파이프라인에서 사용할 보안 파일(secure files)로 최대 100개까지 안전하게 저장할 수 있어요. 이 파일들은 프로젝트 저장소 외부에 안전하게 저장되며 버전 제어되지 않아요. 민감한 정보를 이 파일들에 저장해도 안전해요. 보안 파일은 일반 텍스트와 바이너리 파일 유형을 모두 지원하지만 5 MB 이하여야 해요.

보안 파일은 프로젝트 설정이나 보안 파일 API로 관리할 수 있어요.

보안 파일은 [glab securefile](https://gitlab.com/gitlab-org/cli/-/tree/main/docs/source/securefile) 명령을 사용해 CI/CD 잡에서 다운로드해 사용할 수 있어요.

출처: 문서

본문

프로젝트에 보안 파일 추가하기

프로젝트에 보안 파일을 추가하려면:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾아요.
  2. 왼쪽 사이드바에서 Settings > CI/CD를 선택해요.
  3. Secure Files 섹션을 펼쳐요.
  4. Upload File을 선택해요.
  5. 업로드할 파일을 찾아 Open을 선택하면 파일 업로드가 즉시 시작돼요. 업로드가 완료되면 파일이 목록에 나타나요.

CI/CD 잡에서 보안 파일 사용하기

보안 파일의 내용은 잡 로그 출력에서 마스킹되지 않아요. 잡 로그에 보안 파일 내용을 출력하지 않도록 주의해야 해요. 특히 민감한 정보가 포함될 수 있는 출력을 기록할 때 더 조심해야 해요.

glab 도구 사용하기

[glab](https://gitlab.com/gitlab-org/cli/)으로 하나 이상의 보안 파일을 다운로드하려면 CI/CD 잡에서 cli Docker 이미지를 사용할 수 있어요.

프로젝트의 모든 파일 다운로드하기

프로젝트의 모든 보안 파일을 다운로드하려면:

test:
  image: registry.gitlab.com/gitlab-org/cli:latest
  script:
    - glab auth login --job-token $CI_JOB_TOKEN --hostname $CI_SERVER_FQDN --api-protocol $CI_SERVER_PROTOCOL
    - glab -R $CI_PROJECT_PATH securefile download --all --output-dir="where/to/save"

이 예시에서 모든 변수는 자동으로 사용할 수 있는 사전 정의 변수예요.

프로젝트의 단일 파일 다운로드하기
test:
  image: registry.gitlab.com/gitlab-org/cli:latest
  script:
    - glab auth login --job-token $CI_JOB_TOKEN --hostname $CI_SERVER_FQDN --api-protocol $CI_SERVER_PROTOCOL
    - glab -R $CI_PROJECT_PATH securefile download $SECURE_FILE_ID --path="where/to/save/file.txt"

SECURE_FILE_ID CI/CD 변수는 예를 들어 CI/CD 설정이나 파이프라인을 수동으로 실행할 때처럼 잡에 명시적으로 전달해야 해요. 다른 모든 변수는 자동으로 사용 가능한 사전 정의 변수예요.

또는 Docker 이미지 대신 바이너리를 다운로드해 CI/CD 잡에서 사용할 수도 있어요.

download-secure-files 도구 사용하기 (더 이상 사용되지 않음)

이 방법은 더 이상 사용되지 않아요(deprecated).

CI/CD 잡에서 보안 파일을 사용하려면 [download-secure-files](https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files) 도구를 사용해 잡에서 파일을 다운로드할 수 있어요. 다운로드한 후에는 다른 스크립트 명령과 함께 사용할 수 있어요.

잡의 script 섹션에 download-secure-files 도구를 다운로드하고 실행하는 명령을 추가해요. 파일은 프로젝트 루트의 .secure_files 디렉터리에 다운로드돼요. 보안 파일의 다운로드 위치를 변경하려면 SECURE_FILES_DOWNLOAD_PATH CI/CD 변수에 경로를 설정해요.

예를 들어:

test:
  variables:
    SECURE_FILES_DOWNLOAD_PATH: './where/files/should/go/'
  script:
    - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash

보안 세부 사항

프로젝트 수준 보안 파일은 업로드 시 Lockbox Ruby gem을 사용해 [Ci::SecureFileUploader](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/uploaders/ci/secure_file_uploader.rb) 인터페이스로 암호화돼요. 이 인터페이스는 업로드 중 소스 파일의 SHA256 체크섬을 생성해서 레코드와 함께 데이터베이스에 보관해, 파일을 다운로드할 때 내용을 검증하는 데 사용할 수 있게 해요.

각 파일이 생성될 때 고유한 암호화 키가 생성되어 데이터베이스에 보관돼요. 암호화된 업로드 파일은 GitLab 인스턴스 구성에 따라 로컬 저장소나 객체 저장소에 저장돼요.

개별 파일은 보안 파일 다운로드 API로 가져올 수 있어요. 메타데이터는 목록 또는 표시 API 엔드포인트로 가져올 수 있어요. 파일은 [glab securefile](https://gitlab.com/gitlab-org/cli/-/tree/main/docs/source/securefile) 명령으로도 가져올 수 있어요. 이 명령은 다운로드할 때 각 파일의 체크섬을 자동으로 검증해요.

Developer, Maintainer 또는 Owner 역할이 있는 모든 프로젝트 멤버가 프로젝트 수준 보안 파일에 접근할 수 있어요. 프로젝트 수준 보안 파일과의 상호작용은 감사 이벤트에 포함되지 않지만, issue 117에서 이 기능 추가를 제안하고 있어요.

더 알아보기

보안 파일은 주로 모바일 앱 서명 자격 증명(키스토어, 프로비저닝 프로파일, 서명 인증서)을 저장하는 데 쓰여요. 관련 흐름에 대한 전체 그림은 Mobile DevOps 문서를 함께 읽어보는 걸 추천해요.