正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Gitaly TLSのサポート

GitalyはTLS暗号化をサポートしています。セキュアな接続をリッスンするGitalyインスタンスと通信するには、GitLabの設定で、対応するストレージエントリのgitaly_addresstls:// URLスキームを使用する必要があります。

Gitalyは、GitLabへのTLS接続において、クライアント証明書と同じサーバー証明書を提供します。これは、クライアント証明書を検証してGitLabへのアクセスを許可するリバースプロキシ(NGINXなど)と組み合わせることで、相互TLS認証戦略の一部として使用できます。

これは自動的には提供されないため、独自の証明書を用意する必要があります。各Gitalyサーバーに対応する証明書は、そのGitalyサーバーにインストールする必要があります。

さらに、証明書(またはその認証局)は、以下すべてにインストールする必要があります:

  • Gitalyサーバー。
  • それと通信するGitalyクライアント。

ロードバランサーを使用する場合は、ALPN TLS拡張を使用してHTTP/2をネゴシエートできる必要があります。

証明書の要件

  • 証明書は、Gitalyサーバーへのアクセスに使用するアドレスを指定する必要があります。ホスト名またはIPアドレスをサブジェクトの別名(SAN)として証明書に追加する必要があります。
  • Gitalyサーバーは、暗号化されていないリスニングアドレスlisten_addrと暗号化されたリスニングアドレスtls_listen_addrの両方で同時に設定できます。これにより、必要に応じて、暗号化されていないトラフィックから暗号化されたトラフィックへの段階的な移行を行うことができます。
  • 証明書の共通名フィールドは無視されます。

TLSを使用してGitalyを設定する

TLSサポートを設定する前に、Gitalyを設定する

TLSサポートを設定するプロセスは、インストールの種類によって異なります。

  1. Gitalyサーバーの証明書を作成します。

  2. Gitalyクライアントで、証明書(またはその認証局)を/etc/gitlab/trusted-certsにコピーします:

    sudo cp cert.pem /etc/gitlab/trusted-certs/
  3. Gitalyクライアントで、/etc/gitlab/gitlab.rbgitlab_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' },
    }
  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 /etc/gitlab/ssl/cert.pem
    sudo chmod 600 /etc/gitlab/ssl/key.pem
    # For Linux package installations, 'git' is the default username. Modify the following command if it was changed from the default
    sudo chown -R git /etc/gitlab/ssl
  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',
         ## Optionally configure the minimum TLS version Gitaly offers to clients.
         ##
         ## Default: "TLS 1.2"
         ## Options: ["TLS 1.2", "TLS 1.3"].
         #
         # min_version: "TLS 1.2"
       },
    }
  8. ファイルを保存してGitLabを再設定します。

  9. Gitalyクライアント(たとえば、Railsアプリケーション)でsudo gitlab-rake gitlab:gitaly:checkを実行して、Gitalyサーバーに接続できることを確認します。

  10. Gitaly接続のタイプを監視することで、GitalyのトラフィックがTLS経由で読み込まれていることを確認します。

  11. オプション。セキュリティを強化するには、次の手順を実行します:

    1. /etc/gitlab/gitlab.rbgitaly['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.ymlstoragesを編集して、TLSアドレスを使用するようにgitaly_addressを変更します。例:

    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
  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 /etc/gitlab/ssl/cert.pem
    sudo chmod 600 /etc/gitlab/ssl/key.pem
    # Set ownership to the same user that runs Gitaly
    sudo chown -R git /etc/gitlab/ssl
  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.tomllisten_addrをコメントアウトするか削除して、TLS以外の接続を無効にします。
    2. ファイルを保存します。
    3. 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の証明書を変更または更新する場合は、以下を実行する必要があります:

  1. 信頼できる証明書のシンボリックリンクが更新されるように、GitLabを再設定します

  2. Gitalyプロセスで証明書が読み込まれるように、Gitalyを手動で再起動します:

    sudo gitlab-ctl restart gitaly

/etc/gitlab/sslディレクトリにあるSSL証明書の内容が更新された場合は、Gitalyプロセスで証明書が読み込まれるように、GitLabを再起動する必要があります。

/usr/local/share/ca-certificatesの証明書を変更または更新する場合は、以下を実行する必要があります:

  1. sudo update-ca-certificatesを実行して、システムの信頼できるストアを更新します。
  2. Gitalyプロセスで証明書が読み込まれるように、GitLabを再起動します。

Gitaly接続のタイプを読み込む

Gitaly読み込む方法については、関連ドキュメントを参照してください。