Gitaly TLS 지원
Gitaly는 TLS 암호화를 지원합니다. Gitaly는 GitLab에 대한 TLS 연결에서 서버 인증서와 동일한 인증서를 클라이언트 인증서로 제공합니다. 자동으로 제공되지 않으므로 직접 인증서를 제공해야 합니다. 또한 인증서(또는 해당 인증 기관)는 다음 모든 곳에 설치되어야 합니다:
Gitaly는 TLS 암호화를 지원합니다. 보안 연결을 수신하는 Gitaly 인스턴스와 통신하려면
GitLab 구성의 해당 스토리지 항목의 gitaly_address에서 tls:// URL 스킴을 사용하세요.
Gitaly는 GitLab에 대한 TLS 연결에서 서버 인증서와 동일한 인증서를 클라이언트 인증서로 제공합니다. 이는 클라이언트 인증서를 검증하여 GitLab에 대한 접근을 허용하는 리버스 프록시(예: NGINX)와 결합하여 상호 TLS 인증 전략의 일부로 사용할 수 있습니다.
자동으로 제공되지 않으므로 직접 인증서를 제공해야 합니다. 각 Gitaly 서버에 해당하는 인증서는 해당 Gitaly 서버에 설치되어야 합니다.
또한 인증서(또는 해당 인증 기관)는 다음 모든 곳에 설치되어야 합니다:
- Gitaly 서버.
- Gitaly와 통신하는 Gitaly 클라이언트.
로드 밸런서를 사용하는 경우 ALPN TLS 확장을 사용하여 HTTP/2를 협상할 수 있어야 합니다.
인증서 요구사항#
- 인증서는 Gitaly 서버에 접근하는 데 사용하는 주소를 지정해야 합니다. 인증서에 Subject Alternative Name으로 호스트 이름 또는 IP 주소를 추가해야 합니다.
- Gitaly 서버를 암호화되지 않은 수신 주소
listen_addr와 암호화된 수신 주소tls_listen_addr모두로 동시에 구성할 수 있습니다. 이를 통해 필요에 따라 암호화되지 않은 트래픽에서 암호화된 트래픽으로 점진적으로 전환할 수 있습니다. - 인증서의 Common Name 필드는 무시됩니다.
TLS로 Gitaly 구성#
히스토리
- 최소 TLS 버전 구성 옵션이 GitLab 17.11에서 도입되었습니다.
TLS 지원을 구성하기 전에 Gitaly를 구성하세요.
TLS 지원 구성 프로세스는 설치 유형에 따라 다릅니다.
-
Gitaly 서버용 인증서를 생성합니다.
-
Gitaly 클라이언트에서 인증서(또는 해당 인증 기관)를
/etc/gitlab/trusted-certs에 복사합니다:sudo cp cert.pem /etc/gitlab/trusted-certs/ -
Gitaly 클라이언트에서
/etc/gitlab/gitlab.rb의gitlab_rails['repositories_storages']를 다음과 같이 편집합니다:gitlab_rails['repositories_storages'] = { 'default' => { 'gitaly_address' => 'tls://gitaly1.internal:9999' }, 'storage1' => { 'gitaly_address' => 'tls://gitaly1.internal:9999' }, 'storage2' => { 'gitaly_address' => 'tls://gitaly2.internal:9999' }, } -
파일을 저장하고 GitLab을 재구성합니다.
-
Gitaly 서버에서
/etc/gitlab/ssl디렉토리를 생성하고 키와 인증서를 복사합니다:sudo mkdir -p /etc/gitlab/ssl sudo chmod 755 /etc/gitlab/ssl sudo cp key.pem cert.pem /etc/gitlab/ssl/ sudo chmod 644 /etc/gitlab/ssl/cert.pem sudo chmod 600 /etc/gitlab/ssl/key.pem # Linux 패키지 설치의 경우 'git'이 기본 사용자 이름입니다. 기본값에서 변경된 경우 다음 명령을 수정하세요 sudo chown -R git /etc/gitlab/ssl -
모든 Gitaly 서버 인증서(또는 해당 인증 기관)를 모든 Gitaly 서버와 클라이언트의
/etc/gitlab/trusted-certs에 복사하여 Gitaly 서버와 클라이언트가 자신 또는 다른 Gitaly 서버를 호출할 때 인증서를 신뢰하도록 합니다:sudo cp cert1.pem cert2.pem /etc/gitlab/trusted-certs/ -
/etc/gitlab/gitlab.rb를 편집하고 다음을 추가합니다:gitaly['configuration'] = { # ... tls_listen_addr: '0.0.0.0:9999', tls: { certificate_path: '/etc/gitlab/ssl/cert.pem', key_path: '/etc/gitlab/ssl/key.pem', ## Gitaly가 클라이언트에 제공하는 최소 TLS 버전을 선택적으로 구성합니다. ## ## 기본값: "TLS 1.2" ## 옵션: ["TLS 1.2", "TLS 1.3"]. # # min_version: "TLS 1.2" }, } -
파일을 저장하고 GitLab을 재구성합니다.
-
Gitaly 클라이언트(예: Rails 애플리케이션)에서
sudo gitlab-rake gitlab:gitaly:check를 실행하여 Gitaly 서버에 연결할 수 있는지 확인합니다. -
Gitaly 연결 유형 관찰을 통해 Gitaly 트래픽이 TLS로 제공되는지 확인합니다.
-
선택사항. 다음을 통해 보안을 강화합니다:
/etc/gitlab/gitlab.rb에서gitaly['configuration'][:listen_addr]을 주석 처리하거나 삭제하여 비 TLS 연결을 비활성화합니다.- 파일을 저장합니다.
- GitLab을 재구성합니다.
-
Gitaly 서버용 인증서를 생성합니다.
-
Gitaly 클라이언트에서 인증서를 시스템 신뢰 인증서에 복사합니다:
sudo cp cert.pem /usr/local/share/ca-certificates/gitaly.crt sudo update-ca-certificates -
Gitaly 클라이언트에서
/home/git/gitlab/config/gitlab.yml의storages를 편집하여gitaly_address를 TLS 주소로 변경합니다. 예:gitlab: repositories: storages: default: gitaly_address: tls://gitaly1.internal:9999 gitaly_token: AUTH_TOKEN_1 storage1: gitaly_address: tls://gitaly1.internal:9999 gitaly_token: AUTH_TOKEN_1 storage2: gitaly_address: tls://gitaly2.internal:9999 gitaly_token: AUTH_TOKEN_2 -
파일을 저장하고 GitLab을 재시작합니다.
-
Gitaly 서버에서
/etc/default/gitlab을 생성하거나 편집하고 다음을 추가합니다:export SSL_CERT_DIR=/etc/gitlab/ssl -
Gitaly 서버에서
/etc/gitlab/ssl디렉토리를 생성하고 키와 인증서를 복사합니다:sudo mkdir -p /etc/gitlab/ssl sudo chmod 755 /etc/gitlab/ssl sudo cp key.pem cert.pem /etc/gitlab/ssl/ sudo chmod 644 /etc/gitlab/ssl/cert.pem sudo chmod 600 /etc/gitlab/ssl/key.pem # Gitaly를 실행하는 동일한 사용자로 소유권 설정 sudo chown -R git /etc/gitlab/ssl -
Gitaly 서버 인증서(또는 해당 인증 기관)를 모두 시스템 신뢰 인증서 폴더에 복사하여 Gitaly 서버가 자신 또는 다른 Gitaly 서버를 호출할 때 인증서를 신뢰하도록 합니다.
sudo cp cert.pem /usr/local/share/ca-certificates/gitaly.crt sudo update-ca-certificates -
/home/git/gitaly/config.toml을 편집하고 다음을 추가합니다:tls_listen_addr = '0.0.0.0:9999' [tls] certificate_path = '/etc/gitlab/ssl/cert.pem' key_path = '/etc/gitlab/ssl/key.pem' -
파일을 저장하고 GitLab을 재시작합니다.
-
Gitaly 연결 유형 관찰을 통해 Gitaly 트래픽이 TLS로 제공되는지 확인합니다.
-
선택사항. 다음을 통해 보안을 강화합니다:
/home/git/gitaly/config.toml에서listen_addr를 주석 처리하거나 삭제하여 비 TLS 연결을 비활성화합니다.- 파일을 저장합니다.
- GitLab을 재시작합니다.
인증서 업데이트#
초기 구성 후 Gitaly 인증서를 업데이트하려면:
/etc/gitlab/ssl 디렉토리 아래 SSL 인증서의 내용이 업데이트되었지만
/etc/gitlab/gitlab.rb에 구성 변경이 없는 경우 GitLab을 재구성해도 Gitaly에 영향을 미치지 않습니다.
대신 Gitaly 프로세스에서 인증서를 로드하려면 Gitaly를 수동으로 재시작해야 합니다:
sudo gitlab-ctl restart gitaly
/etc/gitlab/gitlab.rb 파일을 변경하지 않고 /etc/gitlab/trusted-certs의 인증서를 변경하거나
업데이트하는 경우 다음을 수행해야 합니다:
-
신뢰할 수 있는 인증서의 심볼릭 링크가 업데이트되도록 GitLab을 재구성합니다.
-
Gitaly 프로세스에서 인증서를 로드하려면 Gitaly를 수동으로 재시작합니다:
sudo gitlab-ctl restart gitaly
/etc/gitlab/ssl 디렉토리 아래 SSL 인증서의 내용이 업데이트된 경우
Gitaly 프로세스에서 인증서를 로드하려면 GitLab을 재시작해야 합니다.
/usr/local/share/ca-certificates에서 인증서를 변경하거나 업데이트하는 경우 다음을 수행해야 합니다:
sudo update-ca-certificates를 실행하여 시스템의 신뢰 저장소를 업데이트합니다.- Gitaly 프로세스에서 인증서를 로드하려면 GitLab을 재시작합니다.
Gitaly 연결 유형 관찰#
제공되는 Gitaly 연결 유형을 관찰하는 방법에 대한 정보는 관련 문서를 참조하세요.
