シークレットプッシュ保護 パフォーマンステスト
このランブックをいつ使用しますか?
このランブックは以下の目的で使用します:
- GPT テストの実行 — テストを実行して以前のベンチマークと比較する
- GET への新しいバージョンの GitLab のデプロイ — GET インスタンスの更新(シークレットプッシュ保護に関連する変更のテストに使用する場合がほとんど)
- 新しい GET 環境のセットアップ — さまざまなリファレンスアーキテクチャのテスト
前提条件
- gcloud(公式手順)— さまざまなコマンドの実行、テストランナー VM へのログインに使用
- Static Analysis GCP プロジェクト(リソースセクション を参照)— インフラへの変更に必要なアクセス権
GPT テストの実行
手動テスト
Engineering Vault で Static Analysis を検索して、1password から root ユーザーの URL とパスワードを取得します。プロジェクト、グループ、ユーザーは削除しないでください。ただし、作成したり、テストしたいものを何でも作成することは自由です。
自動テストの実行(GCP VM 経由)
VM へのログインオプション:
- VM に SSH 接続:
gcloud compute ssh --zone us-west1-c gpt-test-runner-2 --project dev-sast-prereceive-8a4574ec - または、Static Analysis GCP プロジェクト: dev-sast-prereceive-8a4574ec にアクセスし、
Compute Engineをクリック、gpt-test-runner-2を見つけてSSHをクリックします。これによりウェブベースの SSH セッションが起動します。
初回セットアップ(VM からテストを実行するすべての人が必要):
git clone https://gitlab.com/gitlab-org/quality/performance.gitperformanceに cd- この MR から gcp-2k.json ファイルを
performanceディレクトリにコピー .tool-versionsファイルを作成し、ruby 3.2.2(または最新版)を追加bundle install- ブランチ
secret-detectionをチェックアウト
テストの実行:
- Engineering Vault で Static Analysis を検索して、1password から glpat トークンを取得
performanceディレクトリにいることを確認git_secret_detection.jsテストのみを実行する場合(例):ACCESS_TOKEN=glpat-REDACTED SD_PUSH_CHECK_ENABLED=true SD_FILES_PER_COMMIT=4 GPT_DEBUG=true SD_FILE_SIZES="10kb" GPT_SKIP_RETRY=true ./bin/run-k6 --environment gcp-2k.json --options 60s_40rps.json --unsafe --tests k6/tests/git/pre-receive/git_secret_detection.js- すべてのテストを実行する場合:
ACCESS_TOKEN=glpat-REDACTED SD_PUSH_CHECK_ENABLED=true ./bin/run-k6 --environment gcp-2k.json --options 60s_40rps.json
自動テストの実行(Docker 経由)
- Engineering Vault で Static Analysis を検索して、1password から glpat トークン (ACCESS_TOKEN) を取得
- GPT テストは
environmentsディレクトリを含む任意のディレクトリから実行できます - ローカルターミナルを開いて
git clone https://gitlab.com/gitlab-org/quality/performance.git - ルートに
environmentsディレクトリを作成 - この MR から gcp-2k.json ファイルをその
environmentsディレクトリにコピー - gcp-2k.json ファイルを必要に応じてリネームし、
nameとurlの値も変更 git_secret_detection.jsテストのみを実行する場合(例):docker run -it -e ACCESS_TOKEN=glpat-REDACTED -v $PWD:/config gitlab/gitlab-performance-tool SD_PUSH_CHECK_ENABLED=true SD_FILES_PER_COMMIT=4 GPT_DEBUG=true SD_FILE_SIZES="10kb" GPT_SKIP_RETRY=true --environment gcp-2k.json --options 60s_40rps.json --tests git_secret_detection.js- すべてのテストを実行する場合:
docker run -it -e ACCESS_TOKEN=glpat-REDACTED -v $PWD:/config gitlab/gitlab-performance-tool --environment gcp-2k.json --options 60s_40rps.json
GET のセットアップ
GCP 環境は、プレフィックス gcp-2k の 2k リファレンスアーキテクチャを使用した GET で、Static Analysis GCP プロジェクト: dev-sast-prereceive-8a4574ec の下にセットアップされています。
新しい環境のブートストラップ
注記: 以下の手順は別の 2k リファレンスアーキテクチャのセットアップを想定して書かれています。25k リファレンスアーキテクチャのようなものをセットアップする必要がある場合は、このガイドでカバーされていない変更が必要になる場合があります。代替のリファレンスアーキテクチャはこちらで確認できます。
初回ステップ:
- GET リポジトリ をクローンして cd で移動
- この MR から
bootstrap.shをルートにコピーし、必要に応じて更新 - 実行可能にする必要がある場合があります:
chmod +x bootstrap.sh
注記、bootstrap.sh には 1 回だけ実行するステップと、新しい $GCP_ENV_PREFIX のセットアップに必要なステップがあり、まだ分離する必要があります。
新しい $GCP_ENV_PREFIX の追加手順:
- Terraform による環境のプロビジョニング を Terraform のセットアップガイドとして使用します(GCP を使用しているので AWS の手順は無視してください)
- クローンした GET リポジトリ 内にいることを確認
bootstrap.shの変数を必要に応じて更新./bootstrap.shを実行- 最後に表示された IP アドレスをメモ
- SSH キーがサービスアカウントに追加されたときに作成されたユーザー名をメモ(後で使用)
mkdir -p terraform/environments/$GCP_ENV_PREFIXを実行- この MR から
environment.tf、main.tf、variables.tfを対応するディレクトリにコピー - 必要に応じてこれらの
*.tfファイルを更新:variables.tfのexternal_ipの下に先ほど取得した IP アドレスを追加environment.tfに適切なサービスアカウントプレフィックスを追加main.tfのプレフィックスを$GCP_ENV_PREFIXの値と一致するように更新
/terraform/environments/$GCP_ENV_PREFIXに cdterraform initを実行terraform applyを実行- 小さなお祝い 🎉
- Ansible による環境の設定 を Ansible のセットアップガイドとして使用します(GCP を使用しているので AWS の手順は無視してください)
- GET リポジトリ のルートディレクトリに cd
mkdir -p ansible/environments/$GCP_ENV_PREFIX/files/gitlab_configsを実行mkdir -p ansible/environments/$GCP_ENV_PREFIX/files/gitlab_tasksを実行mkdir -p ansible/environments/$GCP_ENV_PREFIX/inventoryを実行- 先ほど参照した MR から、
environments/gcp-2k/files/gitlab_configs/gitlab_rails.rb.j2をansible/environments/$GCP_ENV_PREFIX/files/gitlab_configsにコピー — これはライセンスが設定適用時に正しく追加されるために必要です - その MR から
vars.ymlとgcp_2k.gcp.ymlをその/inventoryディレクトリにコピー gcp_2k.gcp.ymlを$GCP_ENV_PREFIX(アンダースコアを使用)に合わせてリネームし、両方の*.ymlファイルを必要に応じて更新monitor.ymlをansible/environments/$GCP_ENV_PREFIX/files/gitlab_tasksにコピー- モニタリングをセットアップする場合は、他のファイルとフォルダもコピーする必要がある場合があります:
dashboards.ymlをansible/environmentsにコピーdatasources.ymlをansible/environmentsにコピーlinux-packageフォルダをansible/environmentsにコピー
monitor.ymlに変更は必要ありませんが、vars.ymlにgrafana_passwordが設定されていることを確認してください- 先ほど取得したユーザー名(
./bootstrap.sh実行時)をvars.ymlファイルにansible_userとして追加 - 必要に応じて他の変数(パスワード/シークレット)を設定してください(リファレンスアーキテクチャによって異なりますが、少なくとも
gitlab_root_password、postgres_password、gitaly_token、redis_passwordが必要です) prefix、external_urlの更新とgitlab_license_fileなどのいくつかの行のコメント解除も必要になる場合があります- その他の変数についてはドキュメントと他のリファレンスアーキテクチャファイル(例: 25k リファレンスアーキテクチャのもの)を参照してください
- Support Super Form を使用して 新しい Ultimate ライセンスを取得
- ライセンスファイルを(リネームせず)
/ansible/environments/$GCP_ENV_PREFIX/filesに追加 - ルートディレクトリから、仮想環境での Ansible のインストール の手順に従ってください
ansibleディレクトリに cdansible-playbook -i environments/$GCP_ENV_PREFIX/inventory playbooks/all.ymlを実行- インスタンスにログイン後、Ultimate ライセンスが適用されない場合は、手動でライセンスをアップロードする必要がある場合があります
既存の環境のセットアップ($GCP_ENV_PREFIX)
- GET リポジトリ をクローン(まだ存在しない場合)して cd で移動
mkdir terraform/environments/$GCP_ENV_PREFIXを実行mkdir -p ansible/environments/$GCP_ENV_PREFIX/files/gitlab_tasksを実行- https://gitlab.com/gitlab-org/secure/pocs/gitlab-environment-toolkit-configs に移動(この MR のマージ待ち)
configs/$GCP_ENV_PREFIX/terraform/*.tfファイルをterraform/environments/$GCP_ENV_PREFIXディレクトリにコピーconfigs/$GCP_ENV_PREFIX/ansible/*.ymlファイルをansible/environments/$GCP_ENV_PREFIXディレクトリにコピー- ルートディレクトリから、仮想環境での Ansible のインストール の手順に従ってください
ansibleディレクトリに cdansible-playbook -i environments/$GCP_ENV_PREFIX/inventory playbooks/all.ymlを実行
データの投入
- GPT リポジトリ をクローン
- データのインポートを以下の 2 つのステップに分けます
水平データ:
docker run -it \
-e ACCESS_TOKEN=glpat-REDACTED \
-e GPT_GENERATOR_POOL_TIMEOUT=600 -e GPT_GENERATOR_POOL_SIZE=1 -e GPT_GENERATOR_RETRY_COUNT=20 -e GPT_GENERATOR_RETRY_WAIT=10 \
-v $PWD:/results \
-v $PWD:/config \
gitlab/gpt-data-generator \
--environment gcp-2k.json --environment-url=https://34.83.26.81 \
--subgroups 10 --projects 10 --no-vertical
このコマンドはタイムアウトする可能性が高いですが、ブラウザでインポート中と表示されている場合は、インポートが完了するまで待ちます。
垂直データ:
docker run -it \
-e ACCESS_TOKEN=glpat-REDACTED \
-e GPT_DEBUG=true \
-e GPT_GENERATOR_POOL_TIMEOUT=600 -e GPT_GENERATOR_POOL_SIZE=1 -e GPT_GENERATOR_RETRY_COUNT=20 -e GPT_GENERATOR_RETRY_WAIT=10 \
-v $PWD:/config \
-v $PWD:/tests \
-v $PWD:/results \
gitlab/gpt-data-generator --environment gcp-2k.json --no-horizontal
新しいビルドの再デプロイ
- 今後の
GET のセットアップセクションでカバーされる前提条件ステップがあります - クローンした GET リポジトリ に移動して cd で移動
- ターミナルでまだアクティベートされていない場合は、
. ./get-python-env/bin/activateを実行 - クローンした GET リポジトリの
ansibleディレクトリに cd - どの 3 つのデプロイ方法を対象としているかを確認し、デプロイ前に変更が必要かどうかを
ansible/environments/$GCP_ENV_PREFIX/inventory/vars.ymlで確認 - セットアップステップと同じ ansible コマンドで再デプロイ:
ansible-playbook -i environments/$GCP_ENV_PREFIX/inventory playbooks/all.yml
モニタリング
Grafana ダッシュボードは /-/grafana/dashboards/ で確認できます。ログイン認証情報は 1password の “Static Analysis - 2K GCP Grafana” で確認できます。
環境のセットアップは前のセクションで説明されていますが、これを機能させるために必要なファイルは以下のとおりです:
- ansible/environments/gcp-2k/files/gitlab_tasks/monitor.yml
- ansible/environments/linux_package/server-performance.json
- ansible/environments/dashboards.yaml
- ansible/environments/datasources.yaml
これらのファイルはこの MR で確認できます。
詳細は GET ドキュメントのカスタムタスクセクションを参照してください。
リソース/略語
- GitLab Environment Toolkit (GET)
- GitLab Performance Tool (GPT)
- Static Analysis GCP プロジェクト: dev-sast-prereceive-8a4574ec
- GCP - Google Cloud Platform
- シークレットプッシュ保護ドキュメント
その他
このランブックの例のほとんどは gcp-2k 環境を基準として追加されています。
Rails コンソールとフィーチャーフラグの確認
Rails サーバーに SSH 接続:
gcloud compute ssh --zone us-west1-c gcp-2k-gitlab-rails-1 --project dev-sast-prereceive-8a4574ecRails コンソールの起動:
sudo gitlab-rails console(接続に少し時間がかかります)プロジェクトのプッシュチェック機能のステータス確認:
Feature.enabled?(:pre_receive_secret_detection_push_check, Project.find(123))
アプリケーション設定の有効化
- Web 経由でインスタンス全体で機能を有効化するには
/admin/application_settings/security_and_complianceに移動 - Rails コンソール経由:
a = ApplicationSetting.first
a.pre_receive_secret_detection_enabled = true
a.save!
現在のバージョンの確認
インスタンスで実行されている GitLab の現在のバージョンを確認するには、ログインして /help に移動します。
