내부 API
GitLab 내부 컴포넌트 간 통신에 사용되는 내부 API의 엔드포인트, 인증 방식, 사용 목적 및 소비자를 설명합니다.
내부 API는 다양한 GitLab 컴포넌트에서 사용되며, 외부 소비자는 사용할 수 없습니다. 이 문서는 GitLab 코드베이스를 작업하는 사람들을 위한 것입니다. 이 문서에는 아직 GitLab Pages에서 사용하는 내부 API가 포함되어 있지 않습니다. GitLab Subscriptions 내부 API에 대한 정보는 전용 페이지 를 참조하세요. Orbit 내부 API에 대한 정보는 전용 페이지 를 참조하세요. 새 엔드포인트 추가 # API 엔드포인트는 기본적으로 적절한 인증 및 인가와 함께 외부에서 접근 가능해야 합니다. 새로운 내부 엔드포인트를 추가하기 전에, 해당 API가 더 넓은 GitLab 커뮤니티에 도움이 될 수 있으며 외부에서 접근 가능하게 만들 수 있는지 고려하세요. 내부 API 엔드포인트를 선호하는 한 가지 이유는, 그러한 엔드포인트를 사용하는 데 외부 행위자가 가질 수 없는 내부 데이터가 필요한 경우입니다. 예를 들어, 내부 Pages API에서는 요청을 내부 요청으로 식별하는 시크릿 토큰을 사용하거나, 더 넓은 커뮤니티에서는 사용할 수 없는 공개 키로 요청에 서명할 수 있습니다. 내부 API로 분리하는 또 다른 이유는, 그러한 API 엔드포인트에 대한 요청이 엣지(공개) 로드 밸런서를 통과해서는 안 되는 경우입니다. 이를 통해 내부 로드 밸런서를 통해서만 해당 엔드포인트에 내부 요청이 이루어질 수 있다는 것을 알기 때문에, 엔드포인트에 대한 접근 방식에 대해 서로 다른 속도 제한 규칙 및 정책을 구성할 수 있습니다. 인증 # 이 메서드들은 모두 공유 시크릿을 사용하여 인증됩니다. 이 시크릿은 config/gitlab.yml 에 구성된 경로의 파일에 저장되며, 기본적으로 Rails 앱의 루트에 .gitlab_shell_secret 이라는 이름으로 있습니다. 해당 토큰을 사용하여 인증하려면, 클라이언트는: 해당 파일의 내용을 읽습니다. 파일 내용을 사용하여 JSON Web Token( JWT )을 생성합니다. Gitlab-Shell-Api-Request 헤더에 JWT를 전달합니다. Git 인증 # 리포지터리에 대한 접근을 확인하기 위해 Gitaly 와 GitLab Shell 에서 호출됩니다. GitLab Shell에서 호출되는 경우: 변경 사항이 전달되지 않으며, 내부 API는 요청을 Gitaly에 전달하는 데 필요한 정보를 응답합니다. pre-receive 훅의 Gitaly에서 호출되는 경우: 변경 사항이 전달되고 유효성 검사를 통해 푸시가 허용되는지 결정합니다. 호출은 각각 50초로 제한됩니다. 이 엔드포인트는 다루는 범위 때문에 자체 페이지 에서 더 자세히 다룹니다. POST /internal/allowed 속성 유형 필수 여부 설명 key_id string 아니오 GitLab Shell 연결에 사용되는 SSH 키의 ID username string 아니오 GitLab Shell 연결에 사용되는 인증서의 사용자 이름 project string 아니오 (gl_repository가 전달된 경우) 프로젝트 경로 gl_re