13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KIT Developer Advent Calendar 2018

Day 16

dotenvでAPIキーを適切に管理しよう

Last updated at Posted at 2018-12-15

APIキーの取り扱いについて

諸々アプリケーションの開発する際に何かしらのAPIを利用することがあると思います。
それと同時に多くの方々は開発にGitを用い、コミットログを残しながら開発を進めるでしょう。

その際、APIキーがコードに記述されたcommitが存在したままでpushが行われると、APIキーを全世界に晒す形となってしまい、貴方の権限を悪用されてしまう恐れがあります。

API元のサービスによっては膨大な契約等を結ばされたりして目も当てられない金額の請求が...といった事態にも繋がります。
そんな自体を未然に防ぐ為に、APIキーをハードコーディングしない手段を取りましょう。

アップロードの際にキーを隠す


  def initialize
    @client = Twitter::REST::Client.new do |config|
      config.consumer_key = "hogehoge"
      config.consumer_secret = "hugahuga"
      config.access_token = "hanyahanya"
      config.access_token_secret = "honyohonyo"
    end
  end

例えばTwitterAPIを使用する上でこんなコードがあった場合、gitでcommitする際に


  def initialize
    @client = Twitter::REST::Client.new do |config|
      config.consumer_key = ""
      config.consumer_secret = ""
      config.access_token = ""
      config.access_token_secret = ""
    end
  end

このように記述することで確かにAPIキーの漏洩は防ぐことが出来ます。しかし、
コーディング -> 実行テスト(APIキーを入れる) -> commit(APIキーを隠す)
といったAPIキーの操作はあまりにも手間です。

環境変数とdotenvでAPIキーを管理する

そこで、環境変数とそれを取り込むためのgem 'dotenv'を用いて解決しましょう。

環境変数の設定

$ export API_KEY=hogehoge  

上記コマンドでシェル変数API_KEYにhogehogeを入れ、シェル変数API_KEYを環境変数にするという一連を行えます。

$ printenv

printenv で環境変数に設定されているか確認します。

API_KEY=hogehoge

これで環境変数変数の設定ができました、他に必要な値があれば同様に設定をして下さい。

Rubyで環境変数を読み取る

設定した環境変数をrubyで読み取るために'dotenv'のgemを使用します。

Gemfile
gem 'dotenv'
$ bundle

Gemfileに記述をし、bundle installを行います。

test.rb

require 'dotenv'

puts ENV["API_KEY"]

>>> hogehoge

環境変数に設定したAPI_KEYが読み取れています。

ではこれを先程のTwitterAPIでのコードに置き換えます。


  def initialize
    @client = Twitter::REST::Client.new do |config|
      config.consumer_key = ENV['CONSUMER_KEY']
      config.consumer_secret = ENV['CONSUMER_SECRET']
      config.access_token = ENV['ACCESS_TOKEN']
      config.access_token_secret = ENV['ACCESS_TOKEN_SECRET']
    end
  end

環境変数CONSUMER_KEY以下に適当な環境変数を設定することで、自身の環境のでは動作しGitHub等のサイトに掲載しても問題ない形でAPIキーの設定をすることが出来ます。

まとめ

APIコードの漏洩を防ぐ為にはそもそもコードにAPIキー等の要素をベタ書きしない事が重要です。
Rubyに限らず、多くの言語で環境変数の読み取りなどAPIキーを扱う上での方法は存在するのでその都度良い方法を探して安全に取り扱って下さい。

13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?