GASでアクセスキーやトークンの情報をPropertiesService.getScriptProperties().getProperty()で扱う例
背景
Google Apps Script(GAS)で外部サービスと連携する際などに接続するためのアクセスキーやトークンなどといった情報を直接コードに記載してしまうケースがサンプルなどで見られる時があります。
// 値をベタ書きしている例
var destinationConsumerKey = "**************************";
var destinationConsumerSecret = "***********************";
こういった書き方をハードコーディングともいいますが、昨今はGASのソースコードもClaspなどを使ってGitで管理できるようになってきており、そのまんまGitのRepositoryにpush(アップロード)されてしまうのはセキュリティ的にあまり好ましくありませんし、情報漏洩事故もしくは外部サービスの乗っ取りなどに繋がりかねません。
解決策
PropertiesService.getScriptProperties().getProperty()を利用しましょう。
// スクリプトプロパティから値を取得して変数に格納
var destinationConsumerKey = PropertiesService.getScriptProperties().getProperty("spDestinationConsumerKey");
var destinationConsumerSecret = PropertiesService.getScriptProperties().getProperty("spDestinationConsumerSecret");
PropertiesService.getScriptProperties().getProperty()はGASのスクリプトプロパティという環境に定義する変数を利用する際に使います。これらの環境変数をGASエディタから定義しておく必要があります。
GASのエディタからスクリプトプロパティを設定する
当該GASスクリプトを開いた状態から…
1. ファイル→プロジェクトのプロパティ
2. スクリプトのプロパティ
3. 行を追加
上記コードでの記載例ですと"spDestinationConsumerKey"と"spDestinationConsumerSecret"というスクリプのトプロパティを参照することになっていますので、これらを追加してそれぞれ"hogehoge"と"hagehage"という値を入れていきます。
これで「保存」をしてください。
スクリプトプロパティを参照する
では実際にスクリプトプロパティを参照してログで値を確認してみましょう。以下のようなコードをエディタに記載して保存してください。
// スクリプトプロパティから値を取得して変数に格納
var destinationConsumerKey = PropertiesService.getScriptProperties().getProperty("spDestinationConsumerKey");
var destinationConsumerSecret = PropertiesService.getScriptProperties().getProperty("spDestinationConsumerSecret");
// 格納した値を出力して取得できているかを確認するメソッド
function echoScriptProperties() {
Logger.log("destinationConsumerKey:"+destinationConsumerKey);
Logger.log("destinationConsumerSecret:"+destinationConsumerSecret);
}
そしたらメソッドを実行してみましょう。
Logger.log()関数で出力されるログ(表示→ログ)を確認しましょう。
ログにスクリプトプロパティで設定した値が出力されていることがわかります。
まとめ
GASはG Suiteにある資産への操作だけではなく、外部サービスとの連携を行うことができます。その際に外部サービスからアクセスキーやトークンなどを発行してもらい、それを元に外部資産にアクセス・操作してG Suiteをもっと便利に使うことができます。しかし、こういったアクセスキーやトークンはソースコードに直書きするのではなく、ある程度隠れた場所に格納しておいて必要に応じて参照するようにした方がベターだと思います。
すでに運用されているGASでそういった箇所がある場合は、PropertiesService.getScriptProperties().getProperty()を参照するように書き換えて、情報漏洩事故が起こりにくいようにしてみてはいかがでしょうか。
Freelance Cloud Architect/Consultant @ 時藤屋 https://tokifu.jp/