「経理が使っているスプレッドシートに、前任者が作ったスクリプトが入っていて。毎朝8時に動いて、どこかのシステムにデータを送っているらしいんですが、中身を読める人が社内にいないんです」——社員四十名ほどの会社で、こういう相談を受けることがあります。
Google Apps Script(GAS)は、Google Workspace を使っている会社なら追加費用なしで書けてしまいます。だからこそ現場の担当者が自分で作り、その人が異動や退職でいなくなった後もスクリプトだけが残る。動いているうちは誰も困らないので、誰も止めない。そして「どこへ通信しているか」は、誰にも見えないまま数年が経ちます。
このとき問題なのは、スクリプトの品質ではありません。GAS の UrlFetchApp は、実行しているユーザーの権限で、任意の外部URLへリクエストを送れます。社内の顧客名簿を読み取って外部に POST するコードと、外部の為替レートを取ってくるコードは、管理者から見ると同じ「Apps Script の実行」でしかない。この区別が付かない状態を放置するのが、いちばん危ういところです。
「誰が書いたか」より「どこへ出ているか」から見る
棚卸しというと、まずスクリプトを全部洗い出そうとしがちです。しかし社内に散らばった GAS を人力で見つけるのは、ドライブ全体を検索するのと同じ作業量になります。しかも共有されていないマイドライブの中にあれば、管理者からファイル一覧をたどっても出てきません。
順序を逆にしたほうが速く終わります。スクリプトの一覧ではなく、外部への通信ログから入る。Google Workspace には、Apps Script と Google スプレッドシートの IMPORTXML などの関数がアクセスした URL を記録するログがあり、管理コンソールの「レポート → 監査と調査」から確認できます。
ここで得られるのは「社内から実際に叩かれている外部ドメインの一覧」です。スクリプトの数がいくつあろうと、通信先はたいてい十数個のドメインに収まります。そして、そのドメイン一覧を見た瞬間に判断が付くものが大半です。
- 業務で使っている SaaS のドメイン(Slack、会計システム、EC カートなど)→ 想定内
- 公的機関や為替・郵便番号のオープンデータ → 想定内
- 誰も心当たりのないドメイン、短縮URLサービス、個人が取得したような独自ドメイン → ここだけ調べればいい
数百本のスクリプトを読む代わりに、心当たりのないドメイン数件を追う。この差は、情シス専任のいない会社では決定的です。

許可リストは「URLからのインポートと取得」にある
通信先を把握したら、次は制限です。管理コンソールの アプリ → Google Workspace → ドライブとドキュメント → 機能とアプリケーション → URLからのインポートと取得 に、許可リストの設定があります。
この設定の性質で、押さえておくべき点が3つあります。
- 許可リストを設定しなければ、何も制限されません。「まだ設定していない」=「全ドメインへ出せる」状態です。オプトインの設定なので、放っておいて安全側に倒れることはありません
- Apps Script の
UrlFetchAppとスプレッドシートの IMPORT系関数の両方に効きます。IMPORTXMLやIMPORTDATAで外部からデータを引いている業務シートも同じ制限を受けるので、GAS だけ見て判断すると想定外の場所が止まります - 利用できるエディションが限られます。Business Plus、Enterprise、Education Standard、Teaching and Learning Upgrade、Education Plus が対象です。Business Standard 以下では、この設定自体が出てきません
3つめは中小企業では現実的な壁になります。Business Standard で運用している会社が「許可リストで締めよう」と決めても、そのままでは実行できない。プラン変更の判断が必要になるので、ログでの可視化まで済ませたうえで、リスクとコストを並べて経営に上げることになります。管理コンソールのどこに何があるかを含めた全体像はGoogle Workspace 管理コンソール入門にまとめています。
順序を間違えると業務が止まる
この設定でいちばん多い事故は、許可リストを空のまま「許可したURLのみ」に切り替えることです。その瞬間、社内のすべての外部通信が失敗します。毎朝の自動集計が止まり、業務シートの数値が #REF! に変わり、原因を知らない現場から問い合わせが殺到する。
止めないための順序は次のとおりです。
- ログを一定期間(最低でも1か月)ためる。月次・四半期でしか動かないスクリプトがあるため、1週間のログだけで許可リストを作ると必ず取りこぼします
- ログに出た通信先を、業務担当に当てて仕分ける。「これは何に使っていますか」と聞けば、たいてい所管が分かります。誰も名乗り出ないドメインが、そのまま調査対象になります
- 必要と判断したURLを先に許可リストへ登録する
- 登録が終わってから、制限を有効にする
- 有効化した直後の数日は問い合わせを受ける前提で構える。取りこぼしは必ず出ます。ここで「元に戻す」ではなく「1件ずつ追加する」運用に持ち込めれば、許可リストが実態に追いつきます
なお、スクリプト側の appsscript.json に書ける urlFetchWhitelist は、これとは別物です。あちらはスクリプトの作者が自分で宣言するもので、管理者が組織全体に強制するものではありません。混同すると「宣言してあるから大丈夫」という誤った安心につながります。
この設定では止められないもの
URL許可リストは外部への「通信先」を絞りますが、社内データの持ち出し経路を全部塞ぐわけではありません。残る穴を認識しておかないと、対策が済んだつもりになります。
いちばん大きいのは、サードパーティ製アプリによる API アクセスです。ユーザーが OAuth でアプリを認可すると、そのアプリは Google 側の API を通じてドライブやメールにアクセスします。これは GAS の外部通信とは別のレイヤで、管理コンソールの「セキュリティ → アクセスとデータ管理 → API の制御」で扱います。ここには「アクセスされたアプリ」の一覧があり、実際に社員が認可済みのアプリが並ぶので、棚卸しの入り口としても有用です。
もうひとつは、GAS そのものの実行を止める設定ではないという点です。許可リストに載っているドメインへは通信できますし、ドライブ内のファイルを別のドライブへコピーするような処理は外部通信を伴わないため対象外です。データの中身を見て止めたいなら、Google Workspace の DLP API で継続的に検知する側の仕組みが必要になります。
そして、そもそもの話として、属人化したGASを止めることが目的ではありません。業務は回っているわけなので、可視化と制限をかけたうえで、残す・作り直す・システムに寄せるの判断を別途することになります。この判断軸は前任者のGASをどう引き継ぐかとExcel・GASの業務をいつシステム化するかで扱っています。
次にやること
まず、自社のエディションを確認してください。Business Plus 以上なら、今日からログを見に行けます。それ未満なら、この設定が使えないという事実自体が、プラン検討の材料になります。
そのうえで、監査ログを1か月ためる予定を立てる。締めるのはその後で構いません。実態を知らないまま制限をかけるのがいちばん危険で、実態を知っただけでもリスクの大半は説明可能になります。
属人化した GAS の整理や、業務システムへの移行を含めて相談したい場合は、グリームハブのIT・Google Workspace 無料相談で承っています。スクリプトの本数や業務の絡み方によって進め方が変わるため、個別にご相談ください。お問い合わせからどうぞ。
Sources
- Apps Script と Google スプレッドシートの外部接続を制限する — Google Workspace 管理者 ヘルプ
- Allowlist and Audit Logs for URLs accessed from Google Apps Script and Google Sheets — Google Workspace Updates
- Allowlist URLs — Apps Script | Google for Developers
- Monitor and control Google Apps Script use in your Google Workspace organization — Google for Developers
- Google Workspace のデータにアクセスできるサードパーティ製アプリと内部アプリを制御する — Google Workspace 管理者 ヘルプ