🔐
Firebase Cloud Functionsで機密情報を扱う方法
はじめに
Cloud Functionsの処理を書いていると、Google Maps APIなどの外部サービスを呼び出したくなる場面に遭遇することがあります。
その際に、APIキーなどの機密性の高い値をCloud Functionsの処理にハードコーディングするのは危険です。
本記事ではGoogleMapsAPIのAPIキーを例として、機密性の高い値をCloud Functionsで扱う方法を紹介します。
Secret Manager を利用する
Secret Manager とは?
API キー、パスワード、証明書、その他の機密データを保存
するための、Google Cloud Platformのサービスの1種です。
Secret Managerの利用が有効になっていない方は次のリンクから有効化してください。
Secret Manager に機密情報を保存する
ローカルプロジェクトフォルダのルートディレクトリから次のコマンドを実行します。
firebase functions:secrets:set YOUR_SECRET_KEY
上記コマンドを実行すると、実際に秘匿情報として保存したいキー情報を求められるので、キー情報をコピーしてターミナルに貼り付けましょう。
その後、Enter押下することで、Secret Manager上にキー情報が保存されます。
Secret Manager に機密情報が保存されたことを確認する
同じくローカルプロジェクトフォルダのルートディレクトリから次のコマンドを実行します。
firebase functions:secrets:access YOUR_SECRET_KEY
上記コマンド実行後、設定したキー情報が表示されることが確認できればOKです。
Secret Manager に保存した値を Firebase Cloud Functions上 で読み取る
firebase-functionsのrunWith
メソッドを用います。
例として、本記事用に作成したメソッドを次に示します。
/**
* 例)Firestoreのcommandコレクションにドキュメントが生成されたら発火するFunction
*/
export const onCreateCommand = functions
.region(`asia-northeast1`)
.runWith({ secrets: [`GOOGLE_MAP_API_KEY`] })
.firestore.document(`/command/{id}`)
.onCreate(async (snapshot) => {
// Functionsのログにキー情報を吐き出してみる
functions.logger.info(process.env.GOOGLE_MAP_API_KEY)
})
上記メソッドを Firebase Cloud Functions にデプロイ後、動作させてみると、Secret Managerに保存したキー情報が取得できていることが確認できました。
参考
Discussion