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

Geo移行のシークレットの収集

  • プラン: Ultimate
  • 提供形態: GitLab Dedicated

GitLab Dedicated for Governmentは、継続的なGeoレプリケーションやGeoベースのフェイルオーバーをサポートしていません。新しいテナントのオンボーディング用のGeo移行はサポートされていますが、VPN接続が必要です。これを設定するには、GitLab Dedicated for Governmentのオンボーディングチームにお問い合わせください。

Geo移行には、移行後にGitLab Dedicatedがデータを復号化できるように、GitLab Self-Managedのプライマリインスタンスからのシークレットが必要です。これらのシークレットには、データベースの暗号化キー、CI/CD変数、その他の機密性の高い設定の詳細が含まれます。

SSHホストキーはオプションですが、強く推奨されます。これらを保持しておくと、移行後にユーザーがSSH経由でgit cloneまたはgit pullを実行する際のSSHホストキー検証の失敗を防げます。独自のドメインを使用する予定がある場合は、特に重要です。

収集スクリプトは、ファイル暗号化ツールであるageを使用して、Switchboardにアップロードする前にシークレットを安全に暗号化します。

移行シークレットを収集してアップロードする

GitLab Dedicatedインスタンスを作成する際に、Geo移行シークレットを収集してアップロードします。

前提条件:

  • GitLab Self-Managedのプライマリインスタンスへの管理アクセス権
  • Python 3.x
  • SwitchboardのGeo移行シークレットページにあるage公開キー
  • GitLabクラスターへのアクセス用に設定されたkubectl(Kubernetesインストールのみ)

移行シークレットを収集してアップロードするには、次の手順に従います:

  1. Switchboardにサインインします。

  2. Geo移行シークレットページで、インストールタイプに適した収集スクリプトをダウンロードします。

  3. オプション。オフライン環境の場合は、実行する前にageバイナリを収集スクリプトに埋め込みます。詳細については、オフライン環境を参照してください。

  4. インストールタイプに応じた収集スクリプトを実行し、<age_public_key>をページに表示されているキーに置き換えます:

    • Linuxパッケージインストールの場合は、Railsノードで次のコマンドを実行します:

      shell
      python3 collect_secrets_linux_package.py <age_public_key>

      /etc/gitlab/gitlab-secrets.json、/var/opt/gitlab/gitlab-rails/etc/database.yml、および/etc/ssh/への読み取りアクセス権が必要です。

    • Kubernetesインストールの場合は、kubectlアクセス権を持つワークステーションから次のコマンドを実行します:

      shell
      python3 collect_secrets_k8s.py <age_public_key>

      デフォルト値を上書きするには、追加のフラグを渡すことができます。詳細については、Kubernetes収集スクリプトのフラグを参照してください。

  5. オプション。SSHホストキーのみを収集するには、コマンドに--hostkeys-onlyフラグを追加します。

    このスクリプトは、次を生成します:

    • migration_secrets.json.age: GitLabシークレット(必須)
    • ssh_host_keys.json.age: SSHホストキー(オプションですが推奨)
  6. migration_secrets.json.ageファイルをアップロードします。

  7. オプション。ssh_host_keys.json.ageファイルをアップロードします。

  8. 検証が完了するまで待ちます。検証には、ファイルごとに約10~20秒かかります。

  9. 表示されるファイル名とフィンガープリントが、アップロードしたファイルと一致することを確認します。

検証では、ファイルが適切に暗号化され、期待される構造を含んでいることを確認します。ファイルの内容を復号化したり、公開したりすることはありません。

シークレットをアップロードしたら、残りの手順を完了してテナントを作成します。

Kubernetes収集スクリプトのフラグ

デフォルト値を上書きするには、これらのオプションフラグをcollect_secrets_k8s.pyとともに使用します:

フラグデフォルト説明
--namespace NAME現在のコンテキストKubernetesネームスペース。
--release NAMEgitlabHelmリリース名のプレフィックス。
--rails-secret NAMEなしRailsシークレットのシークレット名。
--registry-secret NAMEなしレジストリシークレット名。
--postgres-secret NAMEなしPostgresパスワードのシークレット名。
--hostkeys-secret NAMEなしSSHホストキーのシークレット名。

オフライン環境

GitLab Self-Managedインスタンスにインターネットアクセスがない場合は、実行する前にageバイナリを収集スクリプトに埋め込みます。

オフライン環境用に収集スクリプトを設定するには:

  1. インターネットアクセスのあるマシンで、Geoシークレット収集プロジェクトからdownload_age_binaries.pyとembed_age_binary.pyをダウンロードし、Switchboardからダウンロードした収集スクリプトと同じディレクトリに配置します。

  2. ageバイナリをダウンロードしてエンコードします:

    shell
    python3 download_age_binaries.py > age_binaries.txt

    このスクリプトは、Linux AMD64およびARM64用のbase64エンコードされたageバイナリを標準出力に出力するため、その出力をage_binaries.txtにリダイレクトする必要があります。

  3. バイナリを収集スクリプトに埋め込みます:

    shell
    python3 embed_age_binary.py

    このスクリプトは、現在のディレクトリからage_binaries.txtを読み取り、collect_secrets_linux_package.pyとcollect_secrets_k8s.pyを埋め込みバイナリを含むバージョンで上書きします。

  4. 更新された収集スクリプトをオフライン環境に転送します。

  5. 移行シークレットを収集してアップロードするの説明に従って、GitLab Self-Managedインスタンスでスクリプトを実行します。

更新されたスクリプトは自己完結型であり、埋め込まれたageバイナリを自動的に抽出して使用します。

トラブルシューティング

Geo移行を使用する際に、次の問題が発生する可能性があります。

エラー: 収集スクリプトの実行時にPermission deniedが発生する

収集スクリプトがGitLab設定ファイルにアクセスしようとすると、権限エラーが発生することがあります。

この問題は、スクリプトが必要なファイルを読み取るのに十分な権限なしで実行された場合に発生します。

この問題を解決するには:

  1. Linuxパッケージインストールの場合は、rootユーザーとしてスクリプトを実行するか、sudoを使用してください。
  2. Kubernetesインストールの場合は、kubectlコンテキストがGitLabネームスペースへのアクセス権を持っていることを確認してください。
  3. 必要なファイルが想定されるパスに存在することを確認します。

収集スクリプトがGitLabインストールを見つけられない

スクリプトがGitLabのインストールまたは設定ファイルを見つけられないというエラーが発生することがあります。

この問題は、次のシナリオで発生します:

  • GitLabがインストールされていないマシンでスクリプトが実行される。
  • GitLabが非標準の場所にインストールされている。
  • 必要な設定ファイルが不足しているか、移動されている。

一般的なエラーメッセージには、次のものがあります:

  • Linuxパッケージ: Error: database.yml not found: /var/opt/gitlab/gitlab-rails/etc/database.ymlの後に✗ Failed to collect GitLab secretsが続く
  • Kubernetes: Error: Could not retrieve gitlab-rails-secrets

この問題を解決するには:

  1. スクリプトが正しいマシン(Linuxパッケージインストールの場合はRailsノード)で実行されることを確認します。
  2. GitLabが正しくインストールおよび設定されていることを確認します。
  3. GitLabが非標準の場所にインストールされている場合は、設定ファイルのパスがインストール内容と一致していることを確認します。
  4. 必要なファイルが不足しているか破損している場合は、移行を進める前にプロフェッショナルサービスに連絡して、インストールのヘルスチェックを実施してください。