🔑
GCPのサービスアカウントのKeyfile.jsonを環境変数で管理する
サービスアカウントのkey fileはjsonファイルでダウンロードできる。
しかし、Keyfile.json
をそのままリポジトリに配置するのは、セキュリティ的にあまり良くない。
そこで良い方法が無いかと調べていたところ、下記のdiscusstionにKeyfile.json
をbase64でエンコードして環境変数で管理するという良さげな解決方法があったので紹介する。
まずKeyfile.json
の中身をbase64でエンコードしたものを環境変数に設定する。
.env.local
# Keyfile.jsonの中身をbase64でエンコードしたもの
GOOGLE_SERVICE_KEY=eyJ0eXBlIjoic2VydmljZV9hY...........
上記の環境変数をデコードして使うのだが、上記のdiscussionの例のままではprivate_key
に改行が含まれており、JSON.parse
でエラーが発生してしまうので下記のように書き換えた。
const decodeAndParseKey = (key: string) => {
// デコード
const decoded = Buffer.from(key, "base64").toString();
// 改行を置換してからJSON.parse
const credentials: Credentials = JSON.parse(decoded.replace(/\n/g, "\\n"));
// 置換を戻したものを返す
return {
...credentials,
private_key: credentials.private_key.replace(/\\n/, "\n"),
};
};
const credentials = decodeAndParseKey(process.env.GOOGLE_SERVICE_KEY);
// このように取り出して使える
const { client_email, private_key } = credentials;
const jwt = new google.auth.JWT(
client_email,
undefined,
private_key,
scopes
);
上記の方法よりも良い管理があるよ!という方いたらコメントで教えて欲しいです〜!
Discussion