シークレットプッシュ保護 パフォーマンステスト

このランブックをいつ使用しますか?

このランブックは以下の目的で使用します:

前提条件

  • 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.git
  • performance に 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 ファイルを必要に応じてリネームし、nameurl の値も変更
  • 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.tfmain.tfvariables.tf を対応するディレクトリにコピー
  • 必要に応じてこれらの *.tf ファイルを更新:
  • /terraform/environments/$GCP_ENV_PREFIX に cd
  • terraform 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.j2ansible/environments/$GCP_ENV_PREFIX/files/gitlab_configs にコピー — これはライセンスが設定適用時に正しく追加されるために必要です
  • その MR から vars.ymlgcp_2k.gcp.yml をその /inventory ディレクトリにコピー
  • gcp_2k.gcp.yml$GCP_ENV_PREFIX(アンダースコアを使用)に合わせてリネームし、両方の *.yml ファイルを必要に応じて更新
  • monitor.ymlansible/environments/$GCP_ENV_PREFIX/files/gitlab_tasks にコピー
  • モニタリングをセットアップする場合は、他のファイルとフォルダもコピーする必要がある場合があります:
    • dashboards.ymlansible/environments にコピー
    • datasources.ymlansible/environments にコピー
    • linux-package フォルダを ansible/environments にコピー
  • monitor.yml に変更は必要ありませんが、vars.ymlgrafana_password が設定されていることを確認してください
  • 先ほど取得したユーザー名(./bootstrap.sh 実行時)を vars.yml ファイルに ansible_user として追加
  • 必要に応じて他の変数(パスワード/シークレット)を設定してください(リファレンスアーキテクチャによって異なりますが、少なくとも gitlab_root_passwordpostgres_passwordgitaly_tokenredis_password が必要です)
  • prefixexternal_url の更新と gitlab_license_file などのいくつかの行のコメント解除も必要になる場合があります
  • その他の変数についてはドキュメントと他のリファレンスアーキテクチャファイル(例: 25k リファレンスアーキテクチャのもの)を参照してください
  • Support Super Form を使用して 新しい Ultimate ライセンスを取得
  • ライセンスファイルを(リネームせず)/ansible/environments/$GCP_ENV_PREFIX/files に追加
  • ルートディレクトリから、仮想環境での Ansible のインストール の手順に従ってください
  • ansible ディレクトリに cd
  • ansible-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 ディレクトリに cd
  • ansible-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 ドキュメントのカスタムタスクセクションを参照してください。

リソース/略語

その他

このランブックの例のほとんどは gcp-2k 環境を基準として追加されています。

Rails コンソールとフィーチャーフラグの確認

  • Rails サーバーに SSH 接続: gcloud compute ssh --zone us-west1-c gcp-2k-gitlab-rails-1 --project dev-sast-prereceive-8a4574ec

  • Rails コンソールの起動: 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 に移動します。