公開日:

森田 嶺

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

Google Apps Script(以下、GAS)は、スプレッドシートの集計や外部サービスへの通知など、日々の業務を自動化できる便利なツールです。外部APIとの連携には「UrlFetchApp(以下、UrlFetch)」がよく使われますが、使い方によっては社内情報を意図しない場所へ送信してしまうリスクもあります。

こうしたリスクへの対策として、Google Workspaceには、管理者がGASの接続先URLを制限する機能が用意されています。業務に必要なURLだけを許可すれば、利用者ごとの注意に頼らず、組織として外部通信を管理できます。

今回は、GASによる外部通信の制限方法について解説します。

なぜUrlFetchの接続先は制限する必要があるのか

UrlFetchAppは、外部サイトから情報を取得するだけでなく、外部APIへデータを送信する用途にも使うことができます。たとえば、スプレッドシートの売上データを集計サービスへ送ったり、問い合わせ情報を外部ツールへ登録したりする処理です。

ここで問題になるのが、通信先の管理です。担当者が送信先URLを間違えたり、インターネット上のサンプルコードを十分に確認せず使ったりすると、意図しない相手へ情報を送信する可能性があります。

Google WorkspaceではUrlFetchの接続先を制限できる

Google Workspaceの特定エディションを利用している場合、UrlFetchの接続先を制限する仕組みを利用することができます。Google Workspaceの管理者は「ユーザーはこの接続先は利用してよい」という範囲を定めることでUrlFetchの通信先を制限することができます。初期状態ではユーザーは自由に任意のURLへデータを送受信できますが、許可リストを有効にすると、登録していないURLへのアクセスをブロックできます。

スクリプトが増えるほど、担当者一人ひとりが通信先を把握し続けることは難しくなります。管理者側で共通ルールを設けることは、業務の自動化を継続しながら誤送信のリスクを減らす方法として有効です。

利用可能なWorkspaceエディション

前述した通り、本機能が利用できるのは特定エディションであり、全てのGoogle Workspace導入企業が使える機能ではありません。現状では、以下のエディションが対象になります。

区分対応エディション
BusinessBusiness Plus
EnterpriseEnterprise Standard、Enterprise Plus
EssentialsEnterprise Essentials Plus
EducationEducation Standard、Education Plus
FrontlineFrontline Plus

Business StarterとBusiness Standardは、対応一覧に含まれていません。管理コンソールに設定が見つからない場合は、操作権限に加え、契約エディションを確認しましょう。

また、この設定はGASだけでなく、スプレッドシートによるURLからのデータ取得にも関係します。導入時は、自動化スクリプトの担当者に加え、外部データを取り込むシートの利用者にも影響が出ることには注意が必要です。

管理コンソールで許可リストを設定する

前提条件

許可リストの設定には「サービス設定」の管理者権限が必要です。実際に設定を試してみる場合は、この権限を保持しているのかを最初に確認してください。

許可リストの設定手順

以下の手順に従って、許可リストに任意のURLを設定します。

  1. Google Workspaceの管理コンソールにログイン
  2. 左メニューから[アプリ]→[Google Workspace]→[ドライブとドキュメント]→[機能とアプリケーション]に遷移する
  3. [URLからのインポートと取得]をクリックする

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

  1. [次のURLからのみインポートと取得を許可します]を選択する

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

  1. [アイテムを入力]に許可したいURLを入力し、「追加」をクリックする

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

  1. 任意のURLが追加されたら設定は完了

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

※ 許可可能なURLは最大1,000件です。

本番運用環境で検証する場合の注意点

最初は検証用の組織部門や設定グループを選択し、影響範囲を限定して進めることをおすすめします。グループの設定は組織部門の設定より優先されるため、対象ユーザーに適用される設定も確認してください。URLを登録する前に制限だけを有効にすると、すべての外部接続がブロックされるため、「登録してから制限する」という順番は必ず守りましょう。

許可リストの動作を確認してみる

設定後は、許可した通信が成功することと、許可していない通信が拒否されることを確認します。

ここでは例として、2つの公開URLを利用します。

検証対象ユーザーに「https://httpbin.org/get」を許可し、「https://postman-echo.com/get」は許可しない状態を想定します。既存の許可設定に両方が含まれていないことを確認してから、次のコードを実行します。

function testUrlRestriction() {
  const urls = [
    'https://httpbin.org/get',
    'https://postman-echo.com/get'
  ];

  urls.forEach(function (url) {
    try {
      const response = UrlFetchApp.fetch(url, {
        followRedirects: false,
        muteHttpExceptions: true
      });

      console.log(
        '応答あり:' + url +
        ' HTTP ' + response.getResponseCode()
      );
    } catch (error) {
      console.error(
        '通信失敗:' + url + '\n' + error.message
      );
    }
  });
}

対象となるWorkspaceユーザーでGASを開き、必要な権限を承認して実行します。

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

個人のGoogleアカウントなど、設定対象外のユーザーで試さないようにしてください。

このコードは通信確認用で、顧客情報や認証情報を送信しません。実行ログでは、許可先にHTTP応答があり、未許可先で管理者制限のエラーになるかを見ます。

実行結果の確認

実行結果は以下の通りです。

GASのセキュリティ対策① UrlFetchの接続先を限定させる方法

想定通り、許可リストに含まれていないURLにアクセスする場合は、以下のようなエラーメッセージが表示されます。

通信失敗:https://postman-echo.com/get
https://postman-echo.com/get に対して UrlFetch の呼び出しを行うことは、管理者により許可されていません。

許可リスト設定上の注意点

URLの許可範囲を広げすぎない

接続先を登録するときは、「動作可能な状態にすること」と「必要な範囲に絞ること」を両立させる必要があります。たとえば、管理者設定で「api.example.com/v1」を許可すると、そのURLと配下のパスが対象になります。ドメイン全体を許可する前に、利用するAPIのパスまで絞れるかを検討しましょう。

サブドメインにはワイルドカード(アスタリスク)を1つだけ使用できます(例:"https://*.example.com")。この指定では、"api.example.com" だけでなく、"dev.api.example.com" のような複数階層のサブドメインも許可対象になります。ただし、"example.com" 自体は含まれません。ワイルドカードを使用すると許可範囲が広がるため、必要な場合に限定し、可能な限り具体的なURLを指定することを推奨します。また、この管理者設定では、URLをHTTPS付きで登録してもHTTP版を除外できるわけではありません。通信の暗号化はコード側でも確認してください。

導入の進め方をどうするか

GASの外部接続先を許可リストで制限する際には、既存業務への影響を十分に考慮する必要があります。すでに多くのGASが運用されている環境で、接続先を把握しないまま制限を有効化すると、外部APIとの連携や定期実行処理が突然停止する恐れがあるためです。

そのため、以下の4つのステップで段階的に導入することを推奨します。

① 既存の接続先URLを調査する

まず、Google Workspaceのドライブ監査ログから、過去6か月間のURLアクセス履歴を取得します。接続先URLや利用ユーザーを整理し、現在どのような外部サービスが利用されているかを把握します。

② 許可リストを作成する

収集したURLを業務上必要なもの、不要なもの、用途が不明なものに分類します。必要に応じて利用部門に確認し、許可すべき接続先を選定します。監査ログに記録されない低頻度の処理にも注意が必要です。

③ 一部のユーザーで検証する

設定グループや組織部門を活用し、まずは検証対象のユーザーに限定して許可リストを適用します。既存GASが正常に動作するか確認し、必要に応じて許可リストを修正します。

④ 段階的に全社展開する

検証結果を踏まえて適用範囲を順次拡大します。あわせて、新しい接続先URLの追加申請や承認フローを整備し、継続的に許可リストを管理します。

重要なのは、最初から完璧な制限を目指すのではなく、既存業務への影響を抑えながら、段階的にセキュリティを強化していくことです。

まとめ

本番運用環境への展開の前には、手動実行に加え、定期トリガーなど実際の運用経路でも確認しましょう。実行するユーザーや適用設定を記録しておくと、「手動では動くが定期処理では失敗する」といった場合の調査に役立ちます。

許可リストは、登録後の管理も必要です。サービスの解約や業務の終了にあわせて不要なURLを削除し、新しい接続先は利用目的を確認してから追加します。

接続先が許可されていても、送信内容まで適切とは限りません。送る項目を必要最小限に絞り、認証情報をログに残さないことも重要です。

GASの利便性を保ちながら安全に活用するには、接続先の把握、段階的な制限、継続的な見直しを業務の運用に組み込むことが大切です。管理者によるURL制限を、組織全体で自動化を支える仕組みとして活用しましょう。

森田 嶺
森田 嶺
大学卒業後、 AWS や Google Cloud 等、主にクラウドを基盤とした新規サービス開発の経験を経て、YOSHIDUMIに入社。Google ドライブ拡張サービス「Cmosy Pocket」「共有ドライブマネージャー」等、 Google Cloud を活用した自社サービスの開発に従事。現在、 Google 等が提供する生成AIを活用したサービスを開発中。https://x.com/r__morita
AI時代の Google Workspace 共有設定の見直し方〜Google Workspace 標準のセキュリティ機能と、共有状態の見える化〜

14:00-15:00 オンライン

AI時代の Google Workspace 共有設定の見直し方〜Google Workspace 標準のセキュリティ機能と、共有状態の見える化〜

詳細はこちら

【ぶっちゃけどうなの?】現行システムの移行から Gemini 活用まで 〜現場のリアルから紐解く Google Workspace 導入・活用の実態〜

14:00-15:00 オンライン

【ぶっちゃけどうなの?】現行システムの移行から Gemini 活用まで 〜現場のリアルから紐解く Google Workspace 導入・活用の実態〜

詳細はこちら

「閉じた」共有ドライブの利便性を最大化する! Cmosy Pocketで実現する、安全・快適な外部コラボレーション術セミナー

14:00-15:00 オンライン

「閉じた」共有ドライブの利便性を最大化する! Cmosy Pocketで実現する、安全・快適な外部コラボレーション術セミナー

詳細はこちら

オンラインセミナー開催中

お申込みはこちらをCheck!