シークレット・認証情報の管理
パスワードやAPIキーなどの認証情報をコードに直接書き込んでいないでしょうか。シークレット管理の基本的な考え方と、なぜそれが情報漏洩リスクに直結するのかを解説します。
「シークレット」とは何か
システム開発における「シークレット」とは、データベースのパスワード、外部サービスのAPIキー、暗号化に使う鍵など、第三者に知られてはいけない認証情報全般を指します。これらをどう扱うかは、システムの安全性を左右する重要な要素です。
適切な管理方法
環境変数として渡す :コードには「どの環境変数を参照するか」だけを書き、実際の値はサーバー側の環境変数として別途設定します。
シークレット管理サービスを使う :クラウドサービスには、認証情報を暗号化して保管し、必要なときだけシステムに渡す専用の仕組み(シークレットマネージャー)が用意されています。管理・更新・アクセス権限の設定を一元化できます。
リポジトリの履歴からも除外する :一度コミットしてしまった認証情報は、後から削除してもGitの履歴に残り続けます。誤って含めてしまった場合は、履歴の書き換えと、該当する認証情報そのものの無効化・再発行の両方が必要です。
認証情報が外部に漏れた場合の対処
どれだけ気をつけていても、認証情報が外部に漏れてしまう可能性をゼロにはできません。漏洩に気づいたときは、まず疑わしいAPIキーなどの既存の認証情報を削除し、新たな認証情報を取得したうえで、システム側の設定を新しいものに入れ替える、という順番で対応します。削除・無効化を後回しにすると、その間も漏れた認証情報が悪用され続けるリスクが残ります。
APIキーの削除や再取得は、日常的に行う作業ではないため、いざという時に手順を思い出せず対応が遅れがちです。どのサービスのどの画面から操作するのか、入れ替えの際にシステムを止める必要があるのかといった手順を、平常時のうちに手順書として残しておくと、実際に漏洩が起きたときも落ち着いて対応できます。この備えは、システム障害が起きたときの初動対応とも通じる考え方です。
発注側が確認しておきたいこと
自社で開発を行っていない場合でも、委託先がシークレットをどう管理しているかは確認しておく価値があります。特に、退職した元担当者のアカウントやAPIキーがそのまま使われ続けていないかは、「あの人がいないと直せない」を防ぐ体制づくりとあわせて見直しておきたいポイントです。