Gitaly TLS 지원
Gitaly는 TLS 암호화를 지원합니다. 보안 연결을 수신 대기하는 Gitaly 인스턴스와 통신하려면 GitLab 구성의 해당 리포지터리 항목의 gitaly_address
에서 tls://
URL scheme을 사용하세요.
Gitaly는 TLS 연결에서 서버 인증서를 클라이언트 인증서로 제공합니다. 이는 클라이언트 인증서를 유효성 검사하여 GitLab에 액세스 권한을 부여하는 역방향 프록시(예: NGINX)와 결합하여 상호 TLS 인증 전략의 일부로 사용될 수 있습니다.
자동으로 제공되지 않으므로 사용자가 고유의 인증서를 제공해야 합니다. 각 Gitaly 서버에 해당하는 인증서를 해당 Gitaly 서버에 설치해야 합니다.
또한 해당 인증서(또는 해당 인증서 기관)는 모든 다음 위치에 설치되어야 합니다.
- Gitaly 서버.
- 이와 통신하는 Gitaly 클라이언트.
로드 밸런서를 사용하는 경우 ALPN TLS 확장을 사용하여 HTTP/2를 협상할 수 있어야 합니다.
인증서 요구 사항
- 인증서는 Gitaly 서버에 액세스하는 데 사용하는 주소를 지정해야 합니다. 호스트명 또는 IP 주소를 인증서의 Subject Alternative Name으로 추가해야 합니다.
- 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 key.pem cert.pem
-
모든 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 key.pem cert.pem
-
모든 Gitaly 서버 및 클라이언트에 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을 다시 시작하세요.
-
:::EndTabs
인증서 업데이트
초기 구성 후 Gitaly 인증서를 업데이트하려면:
::Tabs
/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 연결 유형을 확인하려면 해당 문서를 참조하세요.