Gitaly TLS 지원
Gitaly는 TLS 암호화를 지원합니다. 안전한 연결을 수신 대기하는 Gitaly 인스턴스와 통신하려면 GitLab 구성의 해당 저장소 항목의 gitaly_address
에 tls://
URL 스킴을 사용하세요.
Gitaly는 TLS 연결에서 클라이언트 인증서를 서버 인증서로 제공합니다. 이를 반대로 사용하여 클라이언트 인증서를 확인하는 역방향 프록시(예: NGINX)와 결합하면 상호 TLS 인증 전략의 일부로 사용할 수 있습니다.
자동으로 제공되지 않기 때문에 새로운 인증서를 제공해야 합니다. 각 Gitaly 서버에 해당하는 인증서를 설치해야 합니다.
또한, 해당 인증서(또는 인증서 기관)가 다음에 모두 설치되어 있어야 합니다:
- Gitaly 서버.
- 이와 통신하는 Gitaly 클라이언트.
로드 밸런서를 사용하는 경우 ALPN TLS 확장을 사용하여 HTTP/2를 협상할 수 있어야 합니다.
인증서 요구 사항
- 인증서에는 Gitaly 서버에 액세스하는 데 사용하는 주소를 지정해야 합니다. 호스트 이름 또는 IP 주소를 인증서의 대체 이름으로 추가해야 합니다.
- Gitaly 서버를 미암호화 수신 주소
listen_addr
와 암호화 수신 주소tls_listen_addr
모두 구성할 수 있습니다. 이를 통해 필요한 경우 미암호화된 트래픽에서 점진적으로 암호화된 트래픽으로 전환할 수 있습니다. - 인증서의 공통 이름 필드는 무시됩니다.
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 서버 및 클라이언트에 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', }, }
- 파일을 저장하고 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 이슈 #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 연결 유형을 확인하려면 관련 문서를 참조하십시오.