【セキュリティ向上】GASでAPIキーをセキュアに管理する手順
前回、こちらの記事でOpen AI APIを利用し、Googleスライドを一括で言語翻訳する方法をご紹介した。その記事の中では、メインとなるスクリプト(翻訳したいスライドのGASに記述するスクリプト)内にSecret Keyも一緒に記述するコードを使用した。今回の記事では、メインスクリプト内にSecret Keyを記述せず、メインスクリプトとは分けて管理することでセキュリティを向上させる方法についてご紹介する。
どんな人におすすめの記事なのか?
- GAS利用時のセキュリティを向上させたい
この記事を読むと学べること
- 【3ステップで解決】ChatGPTで有名なOpen AIが提供するAPIでGoogleスライドを自動翻訳の応用編が学べる
- メインスクリプトのGAS内にSecret Keyを記述しない方法でセキュリティを向上させることができる
メインスクリプト内にSecret Keyを一緒に記述する時の注意点
メインスクリプト内にSecret Keyを一緒に記述するとき、何がリスクとなりえるだろうか。一つは、Secret Keyの第三者への漏洩である。Secret Keyが漏洩することで第三者に意図せぬ形で悪用される恐れが生じる。特にGoogleスライドは他者とスライド共有することが多い。その共有の際にスライドに関連するGASも一緒に共有されることでスクリプトの中に記述されているKeyが漏洩してしまうのである。
基本手順
PropertyScriptの作成
任意のドライブの中でGAS(Google Apps Script)を新規作成し、以下のスクリプトを記述
function setScriptProperties() {
PropertiesService.getScriptProperties().setProperties({
'OPENAI_API_KEY': 'Secret Key' // Secret Keyを入力
});
}
function getScriptProperty(key) {
return PropertiesService.getScriptProperties().getProperty(key);
}
翻訳したいスライドからGAS(Google Apps Script)を作成
翻訳したいスライドからGAS(Google Apps Script)を作成し、以下のメインスクリプトを記述
function translateSlides() {
// Google SlidesのIDをメインスクリプト内に記述
const presentationId = 'Presentation ID';
const slides = SlidesApp.openById(presentationId).getSlides();
slides.forEach(slide => {
slide.getShapes().forEach(shape => {
const textRange = shape.getText();
if (textRange) {
const originalText = textRange.asString();
const translatedText = translateText(originalText, 'ja'); // 'ja' は日本語を意味します
textRange.setText(translatedText);
}
});
});
}
function translateText(text, targetLanguage) {
// ライブラリからAPIキーを取得
const apiKey = PropertyScript.getScriptProperty('OPENAI_API_KEY');
const url = 'https://api.openai.com/v1/chat/completions';
const messages = [
{ role: 'system', content: 'You are a helpful assistant that translates text.' },
{ role: 'user', content: `Translate the following text to ${targetLanguage}: ${text}` }
];
const payload = {
model: 'gpt-4',
messages: messages,
max_tokens: 1000,
n: 1,
stop: null,
temperature: 0.7,
};
const options = {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: `Bearer ${apiKey}`
},
payload: JSON.stringify(payload)
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
return json.choices[0].message.content.trim();
}
PropertyScriptからKeyを取得するため、メインスクリプトでライブラリ追加
すでに作成しているPropertyScriptからSecret Keyを取得するため、メインスクリプトのGASからライブラリを追加する。追加するために、PropertyScriptの設定よりスクリプトIDをコピーし、メインスクリプトのライブラリーからID検索で追加する。
まとめ
一つのスクリプト内にSecret Keyを記述するのではなく、PropertyScriptとして別ファイルにSecret Keyを格納し、ライブラリーとして利用することで権限を分けて管理することが可能となり、うっかりSecret Keyを漏洩させてしまう恐れを回避することができる。設定も簡単なため、ぜひ活用してほしい。