タダケンのEnjoy Tech

楽しみながらラクに成果を上げる仕組みを考える

【Python】トークンなどの認証情報は環境変数で管理しよう

f:id:tadaken3:20170909203312p:plain

こんにちは!
タダケン(@tadaken3)です。

今回はPythonのプログラムを書く際のちょっとした小ネタをご紹介します。 認証情報などうっかり外部に漏らしてしまうと大事になる情報を安全に取り扱う方法を解説します。

WEB APIを利用するときに認証情報をコードに記述していると、、、

WEB APIを利用をするプログラミングを作る場合、トークンなどの認証情報をコード内に記述する場合があるかと思います。

例えば、このようにGETリクエストをしてWEB APIを利用するケースです。

import requests

url = 'www.samlple.co.jp/api/v1'  #ダミーのURLです。
token = 'hogehogehogehoge'
headers = { 'SampleToken': token }

requests.get(url, headers=headers)

自分ひとりで使う場合はとくに問題なさそうです。

ですが、コード内に認証情報が埋め込まれているため、他人に共有する際に、そのまま認証情報を公開してしまうということが考えらます。(ボクも社内のWikiにコードを公開した際に、うっかり認証情報を載せてしまったことがありました、、、)

社内の場合は、それほど大きな問題にはならないですが、もしインターネット上に公開した場合、最悪アカウントが乗っ取られて悪用されるケースもあります。とくにGithubにコードをアップするときなどは要注意です。

Amazon Web Serviceのインスタンスが乗っ取られて190万円の請求がきたというような事例もあります。1

d.hatena.ne.jp

認証情報を環境変数で管理する

そのために認証情報はプログラム上に直接書かずに、読取専用のファイルなどでしっかり管理するのが安全です。

ただ、ちょっとしたコードを作るために、毎回認証情報用のファイルを作ったりするのもめんどうなので、認証情報をOSの環境変数に保存するという方法があります。

環境変数(かんきょうへんすう)はOSが提供するデータ共有機能の一つ。OS上で動作するタ>スク(プロセス)がデータを共有するための仕組みである。 環境変数 - Wikipedia

環境変数トークンなどを保存しておき、コードを実行する際に必要な場合は、それらを呼び出して使います。

Pythonの場合、標準のosモジュールで環境変数を設定できます。

“SAMPLE_API_TOKEN"という環境変数に"hogehogehogehoge"というトークンを保存する例です。

import os

# 環境変数を設定する
os.environ["SAMPLE_API_TOKEN"] = "hogehogehogehoge"



環境変数は一度設定すれば、それ以降は永続的に使えます。 環境変数を読みこむには以下のように記述します。

import os

# 環境変数を読み込む
token = os.environ["SAMPLE_API_TOKEN"]

#もしくは
token = os.environ.get("SAMPLE_API_TOKEN")



一番最初に載せたサンプルのコードを書き換えるとこのようになります。

import os 
import requests

url = 'www.samlple.co.jp/api/v1'  #ダミーのURLです。
token = os.environ["SAMPLE_API_TOKEN"]
headers = { 'SampleToken': token }

requests.get(url, headers=headers)

まとめ

これで他人にコードを共有する際も認証情報は公開せずに管理できます。ちょっとしたことなのですが、うっかりやってしまいがちなので、セキュリティ的に認証情報は環境変数で管理することをオススメします。

読者登録をお願いします

本ブログではプログラミングについての記事を公開しています。よろしければ読者登録していただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

みんなのPython 第4版

みんなのPython 第4版


  1. リンク先のケースでは、不正に利用されたため無事に請求が免除されたようです。