ある企業の EC2 上で動くアプリケーションが、データベースのパスワードや外部 API の認証情報をソースコード内にハードコードしている。これが漏洩リスクになっている。認証情報のハードコードを根本的になくし、安全に管理・取得できるようにしたい。最も適切なソリューションはどれか。
- A. 開発者に毎週コードレビューを義務付け、認証情報がハードコードされていないかを目視で確認する。
- B. 認証情報を環境変数としてユーザーデータスクリプトに記述し、起動時に EC2 へ渡す。
- C. 認証情報を暗号化したうえでソースコードリポジトリに含め、デプロイ時に復号して使用する。
- D. 認証情報を AWS Secrets Manager(または Systems Manager Parameter Store)に格納し、EC2 にアタッチした IAM ロールの権限で実行時に取得するようアプリケーションを変更する。AWS リソースへのアクセスは長期アクセスキーではなく IAM ロールで行う。
解答と解説を見る
正解: D
認証情報をコードから切り離すベストプラクティスは、機密情報を AWS Secrets Manager や Systems Manager Parameter Store(SecureString)に格納し、EC2 にアタッチした IAM ロール経由で実行時に動的に取得することである。これにより長期的なアクセスキーをコードに埋め込む必要がなくなり、ローテーションや監査も容易になる。選択肢Aの目視確認は人的エラーが起きやすく、ハードコードを根本的になくす対策にはならない。選択肢Bのユーザーデータは平文で参照でき、インスタンスメタデータ経由で誰でも読み取れてしまうため機密情報の保管場所として不適切である。選択肢Cは暗号化してもリポジトリ内に機密情報が残り、復号鍵の管理という新たな問題を生むため、ハードコードの根本的解消にはならない。
📚 関連サービスの解説: AWS Secrets Manager ・ AWS Systems Manager