カテゴリ: Spring 更新日: 2026/03/01

Spring Bootの秘密情報の扱い方を徹底解説!初心者でもわかる安全な設定方法

秘密情報の扱い:環境変数・外部ファイル・ログへの露出防止
秘密情報の扱い:環境変数・外部ファイル・ログへの露出防止

先生と生徒の会話形式で理解しよう

生徒

「Spring Bootの設定ファイルって、APIキーやパスワードも書いて大丈夫なんですか?」

先生

「APIキーやパスワードのような秘密情報は、設定ファイルに直接書くのは危険です。環境変数や外部ファイルに分けて管理するのが基本です。」

生徒

「それってどうやってやるんですか?初心者なので、実際のやり方が知りたいです!」

先生

「それでは、Spring Bootで秘密情報を安全に扱う方法を丁寧に説明していきましょう。」

1. Spring Bootにおける秘密情報の定義とは

「1. Spring Bootにおける秘密情報の定義とは」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. Spring Bootにおける秘密情報の定義とは
1. Spring Bootにおける秘密情報の定義とは

Spring Bootでは、application.propertiesapplication.ymlを使って設定を管理します。例えば、データベースのユーザー名やパスワード、APIキー、認証トークンなどが該当します。これらの情報は「秘密情報」として扱うべきもので、コードや設定ファイルに直接書くと、誤ってGitなどのバージョン管理に含めてしまい、セキュリティリスクが生じます。

2. application.propertiesapplication.ymlに直接書いてはいけない理由

2. application.propertiesやapplication.ymlに直接書いてはいけない理由
2. application.propertiesapplication.ymlに直接書いてはいけない理由

例えば下記のように記述してしまうと、情報漏洩の危険があります。


spring.datasource.username=admin
spring.datasource.password=secret123

このような書き方は初心者にありがちですが、GitHubなどにアップロードしてしまうと、第三者に情報を盗まれる可能性があります。

3. 環境変数を使った安全な設定方法

3. 環境変数を使った安全な設定方法
3. 環境変数を使った安全な設定方法

Spring Bootでは、環境変数を使って設定値を外部から注入することができます。これはセキュリティ的にも非常に有効な方法です。

例えば、以下のように環境変数を設定しておきます。


export DB_USERNAME=admin
export DB_PASSWORD=secret123

そして、application.propertiesでは以下のように記述します。


spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

この方法なら、ソースコード上には秘密情報を含めずに済みます。

4. 外部ファイルを使ったプロパティの分離

「4. 外部ファイルを使ったプロパティの分離」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. 外部ファイルを使ったプロパティの分離
4. 外部ファイルを使ったプロパティの分離

もう一つの方法として、application.propertiesとは別に秘密情報専用の外部ファイルを作成し、それを読み込む方法もあります。たとえばsecret.propertiesというファイルを作り、その中に以下のように書きます。


db.username=admin
db.password=secret123

そして、SpringApplicationでそのファイルを読み込むようにします。


@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        app.setDefaultProperties(
            Collections.singletonMap("spring.config.additional-location", "classpath:/secret.properties")
        );
        app.run(args);
    }
}

5. プロファイルごとの設定管理

5. プロファイルごとの設定管理
5. プロファイルごとの設定管理

開発環境・テスト環境・本番環境で設定を分けたいときは、Spring Bootの「プロファイル機能」を使うのが効果的です。

以下のようなファイルを用意します。


application-dev.properties
application-prod.properties

実行時に使用するプロファイルは次のように指定します。


java -Dspring.profiles.active=dev -jar myapp.jar

プロファイルごとに秘密情報を管理すれば、開発用のパスワードが誤って本番で使われるようなミスも防げます。

6. ログへの露出を防ぐ方法

6. ログへの露出を防ぐ方法
6. ログへの露出を防ぐ方法

Spring Bootでは、起動時やログ出力時にプロパティの内容が表示される場合があります。これが原因で秘密情報がログに記録されるリスクがあります。

下記のようにして、ログに出力されないよう設定します。


logging.level.org.springframework.boot.context=ERROR

また、Spring Boot 2.4以降では「敏感な情報をマスキングする」機能が追加されています。


management.endpoint.env.show-values=when-authorized
management.endpoint.env.keys-to-sanitize=password,secret,key,token

この設定を追加することで、例えばpasswordなどのキーワードを含むプロパティの値は、******のようにマスキングされて表示されます。

7. .gitignoreで機密ファイルを管理対象外にする

「7. .gitignoreで機密ファイルを管理対象外にする」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. .gitignoreで機密ファイルを管理対象外にする
7. .gitignoreで機密ファイルを管理対象外にする

秘密情報を含むファイル(例:secret.propertiesなど)は、必ず.gitignoreに追加しましょう。


# 機密ファイル
secret.properties
.env

これにより、誤ってバージョン管理に追加してしまうことを防ぎます。

8. 環境ごとに異なる外部設定を切り替える工夫

8. 環境ごとに異なる外部設定を切り替える工夫
8. 環境ごとに異なる外部設定を切り替える工夫

DockerやKubernetesのようなコンテナ環境では、環境変数やvolumeマウントを利用することで、本番と開発で異なる秘密情報を安全に切り替えることができます。

例えば、Dockerfileでは次のように設定できます。


ENV DB_USERNAME=admin
ENV DB_PASSWORD=secret123

KubernetesではSecretを使って、より高度に情報を分離・管理できます。

カテゴリの一覧へ
新着記事
New1
Java
JavaのBufferedReaderクラスを完全ガイド!初心者でもわかる効率的なファイル読み取り
更新記事
New2
Java
JavaのBufferedInputStreamクラスの使い方を完全ガイド!初心者でもわかる効率的なファイル読み込み
更新記事
New3
Java
JavaのStringBuilderクラスを完全ガイド!初心者でもわかる文字列操作の基本
更新記事
New4
Java
JavaのStringBuilderとappendメソッドを完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
Javaの抽象クラス(abstract)を完全ガイド!継承と設計のルールを学ぶ
No.3
Java&Spring記事人気No3
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.4
Java&Spring記事人気No4
Thymeleaf
Thymeleafのth:checkedの使い方!チェックボックスON/OFFを動的に制御する方法
No.5
Java&Spring記事人気No5
Thymeleaf
Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
No.6
Java&Spring記事人気No6
Spring
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.7
Java&Spring記事人気No7
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
Thymeleaf
Thymeleaf(タイムリーフ)の使い方入門!初心者でもわかるth:textの基礎