Primary About Development

Docker-ComposeとPythonを使ったAPIキーの管理方法

2023-04-14

この技術ブログでは、Docker-ComposeとPythonを利用してAPIキーなどの機密情報をコードに埋め込まずに利用する方法を解説します。この方法を使うことで、セキュリティリスクを減らし、環境ごとの設定の変更が容易になります。

目次

  1. はじめに
  2. Docker-Composeのenvironmentについて
  3. Pythonで環境変数を読み込む方法
  4. 実践例
  5. まとめ

1. はじめに

開発中にAPIキーやデータベース接続情報などの機密情報を扱うことがよくあります。これらの情報をソースコードに直接書き込むと、セキュリティリスクや環境ごとの設定変更の手間が増えるため、適切な方法で管理することが重要です。この記事では、Docker-ComposeとPythonを利用して機密情報を環境変数として扱う方法を紹介します。

2. Docker-Composeのenvironmentについて

Docker-Composeを使ってコンテナを管理する際、環境変数を設定することができます。これにより、コードから機密情報を分離し、環境ごとの設定変更も容易になります。Docker-Composeのenvironmentを利用する方法は以下の2つがあります。

2.1. docker-compose.ymlファイル内で環境変数を定義する

docker-compose.ymlファイル内にenvironmentセクションを追加することで、環境変数を定義できます。例えば、以下のように記述します。

docker-compose.yml
version: '3.8'
services:
  app:
    image: python:3.8
    environment:
      API_KEY: your_api_key_here

ただし、この方法ではAPIキーや機密情報がdocker-compose.ymlファイル内に直接書かれてしまうため、別の方法が推奨されます。

2.2. .envファイルを使って環境変数を定義する

.envファイルを使って環境変数を定義する方法が推奨されます。この方法では、環境変数を記述した.envファイルを作成し、docker-compose.ymlファイルと同じディレクトリに配置します。例えば、以下のように.envファイルを作成します。

.env
API_KEY=your_api_key_here

そして、docker-compose.ymlファイル内でenv_fileオプションを使って、.envファイルを指定します。

docker-compose.yml
version: '3.8'
services:
  app:
    image: python:3.8
    env_file: .env

この方法を使うことで、機密情報がdocker-compose.ymlファイルに直接書かれず、.envファイルとして分離されるため、セキュリティリスクを軽減できます。また、.envファイルは次のように.gitignoreに追加してバージョン管理から除外することが推奨されます。

.gitignore
.env

3. Pythonで環境変数を読み込む方法

Pythonでは、osモジュールを使って環境変数を読み込むことができます。以下の例では、先ほど設定したAPI_KEY環境変数を読み込んでいます。

import os

api_key = os.environ['API_KEY']
print("API Key:", api_key)

環境変数が存在しない場合にエラーを回避するため、os.environ.get()メソッドを使うことが推奨されます。このメソッドを使うと、環境変数が存在しない場合にデフォルト値を返すことができます。

api_key = os.environ.get('API_KEY', 'default_value')

4. 実践例

以下に、Docker-ComposeとPythonを使ってAPIキーを環境変数として扱う例を示します。

  1. .envファイルを作成し、APIキーを設定します。
API_KEY=your_api_key_here
  1. docker-compose.ymlファイルを作成し、env_fileオプションで.envファイルを指定します。
version: '3.8'
services:
  app:
    image: python:3.8
    env_file: .env
    volumes:
      - .:/app
    working_dir: /app
    command: python app.py
  1. Pythonスクリプト(app.py)を作成し、APIキーを環境変数から読み込みます。
app.py
import os

api_key = os.environ['API_KEY']
print("API Key:", api_key)
  1. Docker-Composeを使ってコンテナを起動します。
docker-compose up

これにより、app.pyが実行され、APIキーが環境変数から読み込まれます。

5. まとめ

この記事では、Docker-ComposeとPythonを使ってAPIキーや機密情報を環境変数として扱う方法を解説しました。Docker-Composeのenvironmentやenv_fileオプションを使って、機密情報をソースコードから分離し、環境変数として管理することで、セキュリティリスクを減らし、環境ごとの設定の変更が容易になります。Pythonでは、osモジュールを使って環境変数を読み込むことができます。

今後の開発では、この方法を活用して、APIキーや機密情報の管理を効果的に行ってください。

プロフィール写真

Soraef

ソフトウェアエンジニア。趣味は競馬、写真、ゲーム。

お問い合わせはTwitterのDMでお願いします。