チュートリアル: シークレットプッシュ保護でプロジェクトを保護する
アプリケーションが外部リソースを使用する場合、通常、トークンやキーなどのsecretでアプリケーションを認証する必要があります。もしシークレットがリモートリポジトリにプッシュされると、リポジトリへのアクセス権を持つ人は誰でも、あなたまたはあなたのアプリケーションになりすますことができます。
シークレットプッシュ保護を使用すると、GitLabがコミット履歴でシークレットを検出した場合、プッシュをブロックして漏洩を防ぐことができます。シークレットプッシュ保護を有効にすることは、機密データのコミットをレビューしたり、漏洩が発生した場合に修復したりする時間を減らす良い方法です。
このチュートリアルでは、シークレットプッシュ保護を設定し、偽のシークレットをコミットしようとするとどうなるかを確認します。シークレットプッシュ保護をスキップする方法についても学びます。これは、誤検出をバイパスする必要がある場合に役立ちます。
このチュートリアルは、以下のGitLab Unfilteredのビデオから抜粋したものです:
はじめる前
このチュートリアルを開始する前に、以下のものがあることを確認してください:
- Ultimateプランのサブスクリプション。
- テストプロジェクト。お好みのプロジェクトを使用できますが、このチュートリアル専用のテストプロジェクトを作成することをご検討ください。
- コマンドラインGitに関するある程度の知識。
さらに、GitLab Self-Managedの場合のみ、シークレットプッシュ保護がインスタンスで有効になっていることを確認してください。
シークレットプッシュ保護を有効にする
シークレットプッシュ保護を使用するには、保護したい各プロジェクトでそれを有効にする必要があります。まず、テストプロジェクトでそれを有効にすることから始めましょう。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左サイドバーで、セキュリティ > セキュリティ設定を選択します。
- シークレットプッシュ保護切替をオンにします。
次に、シークレットプッシュ保護をテストします。
プロジェクトへのシークレットのプッシュを試す
GitLabは、文字、数字、記号の特定のパターンを照合することでシークレットを識別します。これらのパターンは、シークレットのタイプを識別するためにも使用されます。偽のシークレットglpat-12345678901234567890をプロジェクトに追加して、この機能をテストしてみましょう:
プロジェクトで、新しいブランチをチェックアウトします:
git checkout -b push-protection-tutorial以下の内容で新しいファイルを作成します。パーソナルアクセストークンの正確なフォーマットと一致させるために、
-の前後のスペースを必ず削除してください:hello, world! # To make the example work, remove # the spaces before and after the dash: glpat - 12345678901234567890ファイルをあなたのブランチにコミットします:
git add . git commit -m "Add fake secret"シークレットがコミット履歴に入力されました。シークレットプッシュ保護は、シークレットのコミットを止めませんが、プッシュしたときにのみアラートを発します。
GitLabに変更をプッシュします。次のような表示がされます:
$ git push remote: GitLab: remote: PUSH BLOCKED: Secrets detected in code changes remote: remote: Secret push protection found the following secrets in commit: 123abc remote: -- myFile.txt:2 | GitLab Personal Access Token remote: remote: To push your changes you must remove the identified secrets. To gitlab.com: ! [remote rejected] push-protection-tutorial -> main (pre-receive hook declined)GitLabはシークレットを検出し、プッシュをブロックします。エラーレポートから、以下のことがわかります:
- シークレットを含むコミット (
123abc) - シークレットを含むファイルと行番号 (
myFile.txt:2) - シークレットのタイプ (
GitLab Personal Access Token)
- シークレットを含むコミット (
変更を正常にプッシュできていれば、シークレットを失効するし、置き換えるためにかなりの時間と労力を費やす必要がありました。その代わりに、コミット履歴からシークレットを削除することで、シークレットの漏洩を阻止したことを安心して知ることができます。
シークレットプッシュ保護をスキップする
場合によっては、シークレットプッシュ保護がシークレットを識別した場合でも、コミットをプッシュする必要があります。これは、GitLabが誤検出を検出した場合に発生する可能性があります。デモンストレーションとして、最後のコミットをGitLabにプッシュします。
プッシュオプションを使用する
プッシュオプションを使用してシークレット検出をスキップできます:
secret_detection.skip_allオプションでコミットをプッシュします:git push -o secret_detection.skip_all
シークレット検出はスキップされ、変更はリモートにプッシュされます。
コミットメッセージを使用する
コマンドラインにアクセスできない場合、またはプッシュオプションを使用しない場合は:
文字列
[skip secret push protection]をコミットメッセージに追加します。例:git commit --amend -m "Add fake secret [skip secret push protection]"
複数のコミットがある場合でも、変更をプッシュするには、いずれかのコミットメッセージに[skip secret push protection]を追加するだけで済みます。
次の手順
プロジェクトのセキュリティをさらに向上させるために、パイプラインシークレット検出の有効化を検討してください。