Gitaly TLSのサポート
GitalyはTLS暗号化をサポートしています。セキュアな接続をリッスンするGitalyインスタンスと通信するには、GitLabの設定で、対応するストレージエントリのgitaly_addressでtls:// 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サポートを設定するプロセスは、インストールの種類によって異なります。
Gitalyサーバーの証明書を作成します。
Gitalyクライアントで、証明書(またはその認証局)を
/etc/gitlab/trusted-certsにコピーします:sudo cp cert.pem /etc/gitlab/trusted-certs/Gitalyクライアントで、
/etc/gitlab/gitlab.rbのgitlab_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' }, }ファイルを保存して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 # 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すべての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', ## 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" }, }ファイルを保存して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-certificatesGitalyクライアントで、
/home/git/gitlab/config/gitlab.ymlのstoragesを編集して、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ファイルを保存して、GitLabを再起動します。
Gitalyサーバーで、
/etc/default/gitlabを作成または編集し、以下を追加します:export SSL_CERT_DIR=/etc/gitlab/sslGitalyサーバーで、
/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すべての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/gitlab.rbファイルを変更せずに、/etc/gitlab/trusted-certsの証明書を変更または更新する場合は、以下を実行する必要があります:
信頼できる証明書のシンボリックリンクが更新されるように、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読み込む方法については、関連ドキュメントを参照してください。