ハードコーディング、HashiCorp Vault、シークレット管理

HashiCorp Vaultでシークレットをハードコーディングしないようにする方法

ハードコーディング貧しい 秘密管理、そして次のようなツールの不足 HashiCorp 保管庫 アプリを深刻なリスクに晒し続けることは避けられません。開発者がAPIキーやパスワードをGitHubにプッシュするたびに、情報漏洩のリスクが生じます。実際、攻撃者は公開リポジトリと非公開リポジトリを積極的にスキャンし、コード、設定ファイル、Dockerイメージなど、あらゆる場所に存在する機密情報を狙っています。

現実世界での事例は、何が危機に瀕しているかを如実に示している。2022年、攻撃者はUberのAWSキーがGitHubリポジトリにハードコードされているのを発見し、それを利用して重要なシステムに侵入した。トヨタは、開発者が機密情報を公開GitHubリポジトリにプッシュしたことで、顧客のプライベートインフラストラクチャを危険にさらした。どちらのケースでも、チームがコード内に機密情報を残したままにしており、攻撃者はそれを悪用した。これらはすべて防ぐことができたはずの事態だった。

このガイドでは、アプリを保護する方法を学びます。 HashiCorp 保管庫 中央集権的なシークレット管理と組み合わせることで Xygeniの自動検出および修復 機能。これらのツールを組み合わせることで、以下のことが可能になります。

  • コードベースからハードコードされた秘密情報を排除する
  • 機密情報がGitの履歴に書き込まれるのを防ぐ
  • 漏洩が悪用される前に自動的に検知して修正します

それでは、設定方法をステップごとに見ていきましょう。

2.秘密とは何か(そしてどのように漏洩するのか)

まず第一に、 秘密 秘密情報とは、パスワードだけではありません。APIトークン、OAuth認証情報、データベース接続文字列、SSHキー、暗号化キー、さらにはJWTなども含まれます。システム、リソース、またはIDへのアクセスを許可するものはすべて秘密情報とみなされます。

なぜなら ハードコーディング ソースコードにこれらの認証情報を組み込むことは依然として一般的であり、多くのチームが知らず知らずのうちに脆弱性を導入しています。ローカル開発中は、簡単なAPIキーを組み込むのは簡単です。 .env ファイル、あるいはさらに悪いことに、コードに直接。その後、単一の git commit その秘密を完全に暴露することができる。

秘密が後で削除された場合でも commits、それらはしばしば Gitの履歴Docker レイヤーやコンパイル済みアーティファクトなど。たとえば、多くのリークは誰かが実行するまで気づかれません。 git log または、コンテナイメージからメタデータを抽出します。

これが理由です 秘密管理 積極的、継続的、自動化されている必要があります。従来のスキャナーでは、ブランチ、イメージ、または圧縮ファイルに埋もれた秘密を見落とす可能性があります。そこで、次のようなツールが役立ちます。 HashiCorp 保管庫 (NAIST) と ザイゲニ お入りください。

さらに、秘密情報は開発者からだけ漏洩するわけではないことを覚えておいてください。 CI/CD pipeline運用環境におけるテストスクリプトや設定ファイルなども、すべて脆弱性の原因となり得る。

したがって、機密情報の保護はツールだけではなく、習慣、可視性、そして自動化にも関わる問題です。

秘密漏洩についてもっと深く知りたいですか?

そもそもなぜ機密情報が漏洩するのか、そして攻撃者が実際にどのようにそれを悪用するのかを理解したいなら、この詳細な解説をお見逃しなく。

関連する読書:

3. プライベートリポジトリであっても、秘密情報をハードコーディングすることがリスクとなる理由

APIキー、認証情報、トークンなどの秘密情報をハードコーディングすることは、開発中は便利に思えるかもしれません。しかし、この方法は、特に秘密情報が漏洩した場合に深刻なリスクをもたらします。 commitバージョン管理に移行しました。

例えば、2022年のUberのデータ侵害では、攻撃者は以下の方法でアクセスしました。 ハードコードされたAWSキー 公開されているGitHubリポジトリで発見された。同様に、トヨタもGitHubプロジェクトで重要な認証情報を漏洩し、顧客データに影響が出た。

ハードコードされた秘密はしばしば .env ファイル、スクリプト、ソースコードのコメントなどは、見落としやすいものです。プライベートリポジトリであっても、ボットや内部関係者はそれらにアクセスできます。さらに悪いことに、Gitの履歴は、たとえ「削除」した後でも、あらゆる情報漏洩を保存してしまいます。

さらに、現代の攻撃者はGitHubやコンテナレジストリを継続的にスキャンして、漏洩したトークンを探しています。ハードコードされた秘密鍵を使ったプッシュが一度でも行われると、以下のような事態を招く可能性があります。

  • インフラストラクチャの侵害(クラウドアクセス)
  • ソースコードの改ざん(サプライチェーン攻撃)
  • システム間での秘密情報の再利用(権限昇格)

したがって、ハードコーディングを適切な 秘密管理 これはオプションではなく、開発を安全に行うための基盤となるものです。

4. HashiCorp Vaultが秘密情報を保護する仕組み(そしてハードコーディングよりも優れている理由)

APIキーやデータベース認証情報などの機密情報をソースコードに直接ハードコーディングすると、深刻なセキュリティリスクが発生します。HashiCorp Vaultは、一元化された暗号化されたアクセス制御付きの機密情報ストレージを提供することで、このリスクを排除します。

環境変数に秘密を埋め込む代わりに、 .env ファイルアプリケーションは、VaultのAPIを通じて必要に応じて安全にシークレットを取得できます。このアプローチにより、静的なシークレット管理が、動的でポリシーに基づいたアクセスに置き換えられます。

HashiCorp Vault を使用したシークレット管理は、ハードコーディングに比べていくつかの重要な利点があります。

  • 秘密は暗号化されたままです 静止時も移動時も同様。
  • アクセスは厳しく管理されています IDベースのポリシーを使用する。
  • Vaultはシークレットを動的に生成しますそれによって自動的に期限切れとなる。
  • すべてのリクエストがログに記録されます完全なトレーサビリティと監査可能性を提供します。

Vaultはシームレスに統合され、 CI/CD pipelineコンテナ化された環境、クラウドインフラストラクチャ、サービスメッシュなどに対応しており、現代のDevSecOpsチームにとって拡張性と本番環境への対応性を備えたソリューションとなっています。

現実世界の例:
2022で、へ トヨタのGitHubリポジトリ 認証情報を誤って公開してしまい、内部サービスが危険にさらされた。Vaultのようなツールと厳格な commit 適切な政策があれば、これを防ぐことができたはずだ。

ここまでで明らかになったはずだ。ハードコーディングから脱却し、セキュアな 秘密管理 ツールのような HashiCorp 保管庫 それは単なるベストプラクティスではなく、必要不可欠なものです。

5. 安全なシークレット管理のためにGit、HashiCorp Vault、およびXygeniを統合する方法

完全に避けるために ハードコーディング 秘密を守るため、開発者はローカル開発中および CI/CD。 良いニュースは HashiCorp 保管庫 (NAIST) と ザイゲニ 協力してセキュリティを強化する 秘密管理 ワークフロー。

ステップ1:Vaultを使用して秘密情報を安全に取得する

まず、アプリを設定してシークレットを読み込むようにします。 HashiCorp 保管庫 実行時。例えば、Node.jsでは:

				
					const vault = require("node-vault")({
  endpoint: process.env.VAULT_URL,
  token: process.env.VAULT_TOKEN,
});

const secret = await vault.read("secret/production/db-password");
console.log("DB password:", secret.data.data.value);
				
			

これにより、機密情報がコードや設定ファイルに保存されることが決してなくなります。

ステップ2:GitフックとXygeniを使用してハードコーディングを防止する

偶発的な漏れを防ぐには、 pre-commit フック XygeniのCLIを使用する:

				
					#!/bin/sh
# .git/hooks/pre-commit
xygeni secrets --staged-files --no-upload
if [ $? -ne 0 ]; then
  echo "❌ Commit blocked due to hardcoded secret. Fix and try again."
  exit 1
fi
				
			

このフックは、ステージングされた変更済みファイルのみをスキャンします。 commit. 見つかった場合 ハードコード トークンやパスワードなどの秘密をブロックします commitリポジトリに何かが到達する前に。

ステップ3:VaultとXygeniを統合する CI/CD

CIにおいて pipelines、あなたは次のことができます:

  • ランタイムシークレットを取得する ボールト
  • ラン xygeni scan --run="secrets" 秘密情報が一切導入されていないことを検証する
  • 漏洩が発生した場合は、Xygeniで自動的に修復します。

開発者はローカルからあらゆる段階で秘密を強制します commit展開への貢献、そしてこの緊密なフィードバックループへの管理の貢献に感謝します。

6. ハードコーディングからVault + Xygeniによる安全なシークレット管理へ

秘密情報をハードコーディングすることは、開発者が意図せず機密情報を漏洩させてしまう最も一般的な方法の 1 つです。そのため、ペアプログラミングは HashiCorp 保管庫 Xygeniのリアルタイムスキャンにより、完全な 秘密管理 アーキテクチャ:検出、予防、自動修復機能がワークフローに直接組み込まれています。

手順HashiCorp VaultとXygeniを使ったシークレット管理の仕組み
ステップ1:Vaultでシークレットを定義するAPIキー、認証情報、トークンなどの機密情報は、厳格なアクセス制御と保存時の暗号化により、HashiCorp Vaultに安全に保管できます。
ステップ2:シークレットを挿入する CI/CD環境変数または動的注入を使用して、ビルドにシークレットを提供します。 pipelineソースコードにハードコーディングすることを避け、アプリやアプリケーションに情報を提供します。
ステップ3:ハードコードされた秘密情報をスキャンするXygeniはあらゆるものをスキャンします pull requestDockerイメージとGit履歴を使用して、漏洩した機密情報をリアルタイムで検出および検証します。
ステップ4:シークレットの検証Xygeniは、シークレットが有効で使用可能かどうかを確認します。検証済みのシークレットは、独自の検証エンジンを使用して即座に対応できるようフラグが立てられます。
ステップ5:自動修復をトリガーする検証済みのシークレットが検出された場合、Xygeni はそれを失効またはローテーションし、コンテキストを添えて PR/MR に投稿し、修復ワークフローをガイドすることができます。

7. 自動修復とシークレット管理でシークレットのハードコーディングを永久に停止

HashiCorp Vaultを導入していても、ミスは起こり得る。開発者がローカルテスト中にトークンをハードコーディングしたり、設定を忘れたりする可能性がある。 .gitignore 適切に管理することが重要です。そのため、機密情報の管理と継続的なスキャン、そして自動修復を組み合わせることが不可欠です。

自律的AI Xygeniの秘密管理ハードコードされた認証情報を検出するだけでなく、インシデントになる前に自動的に修正します。

Xygeni AutoFix が秘密情報に対してどのように機能するかは次のとおりです。:

  • Xygeniはあらゆるものをスキャンします pull request 起動するとすぐに、コード、設定ファイル、Git履歴、Dockerレイヤーにハードコードされた秘密情報を探します。
  • 見つかった秘密を検証します ターゲットサービスに対して攻撃を行い、ログ内の値を難読化する。
  • XygeniはPRで秘密を直接指摘しているさらに、深刻度と種類を明記した状況説明コメントを追加する。
  • AutoFixは安全なパッチを生成します、次のような可能性があります:
    • 暴露された秘密をコメントアウトする
    • Vault または環境変数参照に置き換えてください。
    • 段階的な修復手順を提供する
  • ガードレールが作動している場合Xygeniは、問題が解決されるまで自動的にプルリクエストをブロックします。

加えて、 ザイゲニ GitHub Actions、GitLab、Jenkins、Bitbucketを介したセキュリティ対策をサポートしています。そのため、たとえレビュー時に見落としたとしても、機密情報が本番環境に持ち込まれることはありません。

これは単なる機密情報の検出ではありません。拡張可能な機密情報保護です。

sca-tools-ソフトウェア構成分析ツール
ソフトウェアのリスクを優先順位付けし、修復し、保護する
無料アカウントを作成しましょう。
いいえ、クレジットカードは必要ありません。

ソフトウェア開発と配信を安全に

Xygeni製品スイートと共に