日本語

シークレットを安全に保存する

シークレットスキャン 資格情報がデバイス上の平文でどこに置かれているかを示します。ファイルの整理は対処の半分にすぎません。このページはもう半分、つまりそもそもそれらのファイルに秘密を入れないようにし、シークレットマネージャーに保存して必要なときに取得する方法です。

シークレットが平文で残るまでの流れ

経路は3つあり、Aikido はその3つすべてを見つけます:

  • 資格情報ファイル - 一度設定ファイルに値を書き込んで、そのまま忘れてしまった場合。たとえば ~/.aws/credentials または .npmrc.
  • 入力したコマンド - 次の場所に残ります .zsh_history または .bash_historyに保存され、実行中は ps.
  • AIエージェントのセッション - AI コーディングエージェントがそのコマンドを実行した場合、そのエージェントのセッショントランスクリプトにも値が残ります。

Aikido が検出する実際のパターンはこちらです:

AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCY aws-vault add default

aws-vault はそのキーをキーチェーンに入れます。まさにあるべき場所です。問題はそこに至るまでの過程です。キーがキーチェーンに届く頃には、すでにシェル履歴、プロセス一覧、そしてエージェントが実行していればそのトランスクリプトにも残っています。入り口で漏らしてしまうなら、秘密を正しく保存しても意味がありません。

そもそも長期有効な資格情報は必要ですか?

最高のシークレットは、存在しないものです。短命な資格情報は自動的に期限切れになるので、ディスク上に漏れるものも、ローテーションするものもありません。ボールトを使う前に、プロバイダが提供しているか確認してください:

  • AWS - IAM Identity Center を使います。 aws configure sso を一度実行し、その後は aws sso login セッションの期限が切れたときに実行します。
  • Google Cloud - 実行します gcloud auth application-default login サービスアカウントキーをダウンロードする代わりに。
  • GitHub - 実行します gh auth login。これにより、個人アクセストークンを .npmrc または .git-credentials.

シークレットマネージャーにシークレットを保存する

長期有効な資格情報が本当に必要な場合は、マネージャーに入れて、実行時に読み出してください。下の各タブには必要な2つのコマンドだけを載せています。残りはリンク先のガイドに従ってください。

値を環境変数に取り込むか、stdin にパイプします。たとえば mytool --key "$(op read ...)"のように引数として渡すと、シェル履歴とプロセス一覧にそのまま戻ってしまいます。

macOS に組み込みで、追加ツールは不要です。値を -w フラグなしにすると security 入力を促されるため、シークレットがコマンドに表示されません。

security add-generic-password -a "$USER" -s stripe-api-key -w

必要なときに読み戻します:

export STRIPE_API_KEY=$(security find-generic-password -a "$USER" -s stripe-api-key -w)

参照 Apple の Keychain Access ガイド UI で項目を管理する方法。

シークレットを移した後は

資格情報をマネージャーへ移しても、露出が取り消されるわけではありません。最後までやり切ってください:

  1. 元の場所で古い値をローテーションしてください。誰がファイルや履歴を読んだかわからないため、漏えいしたものとして扱います。
  2. 平文のコピーを削除してください。 Secrets タブをデスクトップクライアントで使ってシェル履歴と AI エージェントのセッションを確認し、資格情報ファイルは自分で編集します。
  3. 検出結果が Secrets タブを選択します。
シークレットスキャン

Aikido がデバイス上ではなくコード内で見つけたシークレットについては、こちらを参照してください マルウェアと漏えいしたシークレットの問題を解決する.