https://a.storyblok.com/f/270183/116744/28096e7996/blog_private-keys_cloud-enviorment_1200x600.png

環境変数で秘密鍵を使う

最終更新日 November 8, 2020

所要時間:2 分

この記事は2025年3月に更新されました。

私たちの新しいAPIの多くは、認証にJWT(JSON Web Tokens)を使用しています。しかし、私たちのJWTは秘密鍵で署名され、改行が含まれるため、認証情報を処理するための私たちの通常のアプローチのいくつかが時々つまずく可能性があります!

この投稿では、秘密鍵を環境変数で使用する方法を紹介し、Vonage Voice API と Netlify 関数を使った例を示します。

次のステップでは、アプリケーションIDと秘密鍵ファイルが必要になります。

次のいずれかを使用できます。 Accountダッシュボードを使うこともできるし、CLIを使うこともできる:

vonage apps create private

このコマンドはアプリケーションIDを表示し、秘密鍵を想像上のファイル名である private.keyファイルに書き出す。これらの項目は両方とも次のステップで使用される。

なぜファイルをアップロードしないのか?

データは private.keyにあるよね?ディスクにあるこのファイルを使えばいいじゃないか。

ローカル・アプリケーションの場合、それは絶対に可能であり、私たちのアプリケーション例の多くがそうなっていることがおわかりいただけるだろう。

しかし "本物の "アプリケーションでは private.keyファイルはアプリケーションの一部ではないので、他のファイルと同じようには扱えない。

A private.keyファイルはソース管理には決して追加すべきではありません。これはアカウントのパスワードと同様に秘密のクレデンシャルです。また、ローカルの開発プラットフォームや、アプリケーションがステージングプラットフォームやライブプラットフォームにデプロイされるときなど、異なるプラットフォーム上で、異なるクレデンシャルセットがこのアプリケーションで使われる可能性があります。

そう考えると、この秘密鍵を文字列として安全に扱う別の方法が必要だ。

基本的な音声通話アプリケーションの作成

Voice APIを利用したアプリケーションを作成するのも、この動きを見る良い方法のひとつだ。プログラムで電話を鳴らすのは飽きないと思う!

今日の例では、Node.jsを使用し、簡単な音声合成アナウンスで電話をかけます。

コードを書く前に Vonage Node SDKをインストールします:

npm install @vonage/server-sdk

さあ、コードの時間だ!このような単純なアプリケーションの場合、私は通常全体を index.jsに入れるだけです:

const Vonage = require('@vonage/server-sdk');

const vonage = new Vonage({
  applicationId: process.env.VONAGE_APPLICATION_ID,
  privateKey: Buffer.from(process.env.VONAGE_APPLICATION_PRIVATE_KEY64, 'base64')
})

vonage.calls.create({
  to: [{
    type: 'phone',
    number: process.env.TO_NUMBER
  }],
  from: {
    type: 'phone',
    number: process.env.VONAGE_NUMBER
  },
  ncco: [{
    "action": "talk",
    "text": "Safely handling environment variables makes coding even more fun."
  }]
}, (error, response) => {
  if (error) console.error(error)
  if (response) console.log(response)
})

コードサンプルを見てください。 process.env.*.

環境変数を使えば、複数の場所で問題なく実行できるコードを作ることができる。

特に、クラウドプラットフォームでは、ソース管理からデプロイすることはあっても、そこに認証情報を含めることはないだろうから、設定ファイルよりも環境を好む。

ローカルプラットフォームでは dotenvを使って設定ファイルから環境変数を読み込む。dotenvを使う場合、あるいはNetlifyやGlitchのようなクラウドプラットフォームの場合、環境変数に複数行の値を使うことはできない。これを回避するために、私は環境変数にbase64エンコードされた値を使い、アプリケーションにデコードさせてから使用している。

環境変数の準備

ローカルで dotenvをローカルで使用する場合、あるいは複数行の環境変数を扱えないプラットフォームでは、次のように .envファイルを用意する:

TO_NUMBER=44777000777
VONAGE_NUMBER=44777000888
VONAGE_APPLICATION_ID=abcd1234-aaaa-bbbb-cccc-0987654321ef
VONAGE_APPLICATION_PRIVATE_KEY64=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ25VaFp3N214cTljZHUKU21oL1UrekovdGRZSUxRVDF5VExjWnFETk11OW44WUVHMmMyR1JUbmR2a2cxeXlBVCtqTk45Zmp5eTg1Zi9EOG9zTzhPdnhRS0Y0aWpoblJlVTVDQStnU0o3UEhLa3U5YjJsMzZ2TmN5WFFCdWRJVk8KV2tBOERraTlFVHpqaG8rRnh0SGJuWGZHa3o3emtzUTJvMjVMemorblFkendCQlc3aXVrNVNqdkdYSkFEK0xQRUIveHhUVEhSRFZJRjNxYWM2dmM5L3NPUStYa0MvVzB4MzgKUDg0T3JpdjhNdytCdktOZlMwMU94Y05PWU9yMENvYWM4Z1VxazljQ2dZRUFtYmFMYjROeEE3ckdkc1B1YU9UOEpSSjN6L2J0VzdnMXF4NUxvCkZ0b1c2Qm9vSnhmb2lhV1YrTURtcEFsL2FJZzRqMGJ1cXFwajU3UjlZWlhTK0xhdU1HUWl0azRPWi9ZS1lZSDUKK3psWTJ0VjhHUTdqM29CWURDd2puWWc9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K

ウェブインターフェイスなど、別の方法で環境変数を設定する場合は、これらの値を再利用することもできる。

値はこうでなければならない:

  • TO_NUMBER自分の携帯電話の番号を使った。

  • VONAGE_NUMBERVonageプラットフォームで所有している番号

  • VONAGE_APPLICATION_ID最初のセクションで作成したアプリケーションのID

  • VONAGE_APPLICATION_PRIVATE_KEY64私の private.keyファイルをbase64エンコードした

base64の値を取得するために使用するコマンドは以下の通り:

cat private.key | base64 -w 0

すべてをまとめる

環境変数を改行付きでエンコードすれば、文字列として安全に転送できる。上記の設定を index.jsファイルを使えば、(アプリケーションに dotenvをアプリケーションに追加することで)、あるいは他のプラットフォームでコードを実行することができる。

些細なことですが、秘密鍵ファイルを扱う際に思わぬところで遭遇するので、私自身もこの投稿を参照することになると思います。

シェア:

https://a.storyblok.com/f/270183/250x250/e3d3b71060/lornajane.png
Lorna Mitchellヴォネージの卒業生

ローナはブログ癖のあるソフトウェア・エンジニアだ。彼女は言葉とコードを同等に扱おうとしている。