Gitaly TLS 지원

Gitaly는 TLS 암호화를 지원합니다. 보안 연결을 수신 대기하는 Gitaly 인스턴스와 통신하려면 GitLab 구성에서 해당 저장소 항목의 gitaly_address에서 tls:// URL 스키마를 사용하세요.

Gitaly는 TLS 연결에서 서버 인증서를 클라이언트 인증서로 제공합니다. 이는 클라이언트 인증서를 유효성 검사하여 GitLab 접근을 허용하는 (예: NGINX와 같은) 리버스 프록시와 결합하여 상호 TLS 인증 전략의 일환으로 사용될 수 있습니다.

이 기능은 자동으로 제공되지 않으므로 사용자가 직접 인증서를 제공해야 합니다. 각 Gitaly 서버에 해당하는 인증서를 해당 Gitaly 서버에 설치해야 합니다.

또한 해당 인증서(또는 해당 인증서의 기관)는 모든 다음 위치에 설치해두어야 합니다:

  • Gitaly 서버
  • 해당 서버와 통신하는 Gitaly 클라이언트

로드 밸런서를 사용하는 경우, ALPN TLS 확장을 사용하여 HTTP/2를 협상할 수 있어야 합니다.

인증서 요구 사항

  • 인증서는 Gitaly 서버에 액세스하는 데 사용하는 주소를 지정해야 합니다. 호스트 이름 또는 IP 주소를 인증서의 대체 이름으로 추가해야 합니다.
  • Gitaly 서버는 암호화되지 않은 수신 대기 주소 listen_addr와 동시에 암호화된 수신 대기 주소 tls_listen_addr를 구성할 수 있습니다. 필요한 경우 암호화되지 않은 트래픽에서 암호화된 트래픽으로 점진적으로 전환할 수 있습니다.
  • 인증서의 일반 이름 필드는 무시됩니다.

TLS로 Gitaly 구성

TLS 지원을 구성하기 전에 Gitaly 구성을 수행하세요.

TLS 지원을 구성하는 과정은 설치 유형에 따라 다릅니다.

::탭

:::탭타이틀 Linux 패키지 (Omnibus)

  1. Gitaly 서버용 인증서를 생성합니다.
  2. Gitaly 클라이언트에서 인증서(또는 해당 인증서의 기관)을 /etc/gitlab/trusted-certs로 복사합니다:

    sudo cp cert.pem /etc/gitlab/trusted-certs/
    
  3. 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' },
    })
    
  4. 파일을 저장하고 GitLab을 다시 구성하세요.
  5. 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
    
  6. 모든 Gitaly 서버 및 클라이언트에서 모든 Gitaly 서버 인증서(또는 해당 인증서의 기관)를 /etc/gitlab/trusted-certs로 복사하여 Gitaly 서버 및 클라이언트가 자체 또는 다른 Gitaly 서버에 호출할 때 해당 인증서를 신뢰하도록 합니다:

    sudo cp cert1.pem cert2.pem /etc/gitlab/trusted-certs/
    
  7. /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',
       },
    }
    
  8. 파일을 저장하고 GitLab을 다시 구성하세요.
  9. Gitaly 클라이언트(예: Rails 애플리케이션)에서 sudo gitlab-rake gitlab:gitaly:check를 실행하여 Gitaly 서버에 연결할 수 있는지 확인하세요.
  10. Gitaly 연결의 유형을 관찰하여 Gitaly 트래픽이 TLS를 통해 제공되는지 확인하세요.
  11. 선택 사항. 다음을 수행하여 보안을 강화합니다:
    1. /etc/gitlab/gitlab.rb에서 gitaly['configuration'][:listen_addr]을 주석 처리하거나 삭제하여 비-TLS 연결을 비활성화합니다.
    2. 파일을 저장합니다.
    3. GitLab을 다시 구성하세요.

:::탭타이틀 직접 컴파일(소스)

  1. Gitaly 서버용 인증서를 생성합니다.
  2. Gitaly 클라이언트에서 인증서를 시스템 신뢰 인증서로 복사하세요:

    sudo cp cert.pem /usr/local/share/ca-certificates/gitaly.crt
    sudo update-ca-certificates
    
  3. 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가 해결될 때까지 제거되도록 예정되어 있습니다.

  4. 파일을 저장하고 GitLab을 다시 시작하세요.
  5. Gitaly 서버에서 /etc/default/gitlab을 생성하거나 편집하고 다음을 추가하세요:

    export SSL_CERT_DIR=/etc/gitlab/ssl
    
  6. 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
    
  7. 모든 Gitaly 서버 인증서(또는 해당 인증서의 기관)를 시스템 신뢰 인증서 폴더로 복사하여 Gitaly 서버가 자체 또는 다른 Gitaly 서버에 호출할 때 해당 인증서를 신뢰하도록 합니다.

    sudo cp cert.pem /usr/local/share/ca-certificates/gitaly.crt
    sudo update-ca-certificates
    
  8. /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'
    
  9. 파일을 저장하고 GitLab을 다시 시작하세요.
  10. Gitaly 연결의 유형을 관찰하여 Gitaly 트래픽이 TLS를 통해 제공되는지 확인하세요.
  11. 선택 사항. 다음을 수행하여 보안을 강화합니다:
    1. /home/git/gitaly/config.toml에서 listen_addr을 주석 처리하거나 삭제하여 비-TLS 연결을 비활성화합니다.
    2. 파일을 저장합니다.
    3. GitLab을 다시 시작하세요.

::끝탭

인증서 업데이트

초기 구성 후 Gitaly 인증서를 업데이트하려면:

Linux package (Omnibus)

/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 파일을 수정하지 않은 상태에서:

  1. 시스템의 신뢰할 수 있는 인증서에 대한 심볼릭 링크가 업데이트되도록 GitLab을 다시 구성하십시오.
  2. 인증서가 Gitaly 프로세스에 로드되도록 Gitaly를 수동으로 재시작하십시오:

    sudo gitlab-ctl restart gitaly
    
Self-compiled (source)

/etc/gitlab/ssl 디렉토리의 SSL 인증서 내용이 업데이트된 경우, 인증서가 Gitaly 프로세스에 로드되도록 GitLab을 재시작해야 합니다.

/usr/local/share/ca-certificates에서 인증서를 변경하거나 업데이트하는 경우:

  1. 시스템의 신뢰할 수 있는 저장소를 업데이트하려면 sudo update-ca-certificates를 실행하십시오.
  2. 인증서가 Gitaly 프로세스에 로드되도록 GitLab을 재시작하십시오.

Gitaly 연결 유형 확인

제공되는 Gitaly 연결 유형을 확인하려면 해당 문서를 참조하십시오.