Gitaly 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 지원 구성하기 전에 Gitaly를 구성하세요.
TLS 지원 구성 과정은 설치 유형에 따라 달라집니다.
- Gitaly 서버용 인증서를 생성합니다.
-
Gitaly 클라이언트에서 인증서(또는 해당 인증 기관)를
/etc/gitlab/trusted-certs
로 복사합니다:sudo cp cert.pem /etc/gitlab/trusted-certs/
-
Gitaly 클라이언트에서
/etc/gitlab/gitlab.rb
의git_data_dirs
를 다음과 같이 편집합니다:git_data_dirs({ '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 서버와 클라이언트의
/etc/gitlab/trusted-certs
에 모든 Gitaly 서버 인증서(또는 해당 인증 기관)를 복사하여 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', }, }
- 파일을 저장하고 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
를 다음과 같이 편집합니다:gitlab: repositories: storages: default: gitaly_address: tls://gitaly1.internal:9999 path: /some/local/path storage1: gitaly_address: tls://gitaly1.internal:9999 path: /some/local/path storage2: gitaly_address: tls://gitaly2.internal:9999 path: /some/local/path
참고:
/some/local/path
는 존재하는 로컬 폴더로 설정해야 하며, 이 폴더에 데이터가 저장되지는 않습니다. 이 요구 사항은 Gitaly issue #1282가 해결되면 제거될 예정입니다. - 파일을 저장하고 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/trusted-certs
에서 인증서를 변경하거나 업데이트하였지만 /etc/gitlab/gitlab.rb
파일에 변동이 없는 경우:
-
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 연결 유형을 관찰하는 방법에 대한 정보는 관련 문서를 참조하세요.