AUTOMATION NOTE — 056

情シスが設計するGoogle Workspace退職者対応:Admin SDKとVaultの実装パターンと落とし穴

Google Workspaceにおける退職者アカウントの適切な管理は、情報セキュリティとコンプライアンス維持の観点から非常に重要です。本記事では、Google VaultとAdmin SDKを組み合わせることで、退職者データの保持とアカウント整理を効率化する方法を解説します。

この記事を読んだほうが良い人

  • 100名規模の企業でGoogle Workspaceを管理している情シス担当者
  • 退職者対応を手作業で行っており、アカウントの削除漏れや権限残存に不安を感じている人
  • ISMSやコンプライアンス対応で、退職者アカウントの棚卸しとデータ保持の証跡が必要な人
  • Google Workspaceのオフボーディングフローを効率化・自動化したいと考えている人

退職者対応の自動化:何から手をつけるかの整理

退職者対応を「全部自動化したい」と考え始めると、実装の優先度を見誤ることがある。まず、対応項目を「自動化しやすいもの」と「人手の判断が必要なもの」に分けて整理するのが現実的です。

自動化しやすい処理

  • アカウントの一時停止(Admin SDK Directory APIで完結)
  • グループメンバーシップの削除(同上)
  • メール転送設定(Gmail APIで対応可能)

人手の判断が必要な処理

  • Driveデータの移譲先の決定(誰に渡すかは業務判断)
  • Vault Legal Holdの設定範囲(保持対象データの範囲は法務・コンプライアンスとの確認が必要な場合がある)
  • アカウントの最終削除(削除前に「本当に不要か」の確認が必要)

Google Workspaceは「Google Vault」と「Admin SDK Directory API」という2つのツールを提供しており、これらを組み合わせることで上記の自動化処理を大幅に効率化できます。

  • Google Vault: 退職者のメールやドライブデータなどを一定期間保持(Legal Hold)し、コンプライアンス要件を満たすための電子情報開示(eDiscovery)ツールです。アカウントが無効化されてもデータは保持されます。
  • Admin SDK Directory API: Google Workspaceのユーザー、グループ、デバイスなどをプログラムで管理できるAPIです。Google Apps Script (GAS) と組み合わせることで、ユーザーの無効化やグループからの削除などを自動化できます。

Google Vaultによるデータ保持(Legal Hold)設定

Google Vaultは、退職者アカウントのデータを法的な証拠として保持するための「Legal Hold(訴訟ホールド)」機能を提供します。これにより、アカウントが無効化されたり、最終的に削除されたりしても、指定されたデータはVault内に安全に保持されます。

なぜVaultの設定をアカウント無効化より先にするか

企業は、従業員の退職後も一定期間、業務関連データを保持する法的義務や社内規定がある場合があります。順番が重要なのは、アカウントを先に削除するとVaultでのLegal Hold設定が難しくなるためです。Google VaultのLegal Holdは、データ保持要件を満たし、将来的な監査や電子情報開示の要請に迅速に対応するための基盤となります。

設定手順

Google VaultでLegal Holdを設定する基本的な流れは以下の通りです。

  1. Google Vaultへのアクセス: Google Workspace管理コンソールに管理者としてログインし、メニューアイコンから「ツール」>「Google Vault」を選択します。
  2. 案件の作成: Vaultの管理画面で「案件」を作成します。案件は、関連するデータをグループ化するためのコンテナです。例えば、「退職者データ保持2024」のような名称を設定します。
  3. 保持ルールの設定: - 作成した案件内で、「保持」タブに移動し、「カスタム保持ルール」を作成します。 - 対象サービス: 保持したいデータが保存されているサービス(例: Gmail、ドライブ)を選択します。 - 対象ユーザー: 退職対象のユーザーアカウントを指定します。複数のユーザーを一度に追加することも可能です。 - 条件: 必要に応じて、特定のキーワードを含むメールのみを保持するなど、詳細な条件を設定します。 - 保持期間: データを保持する期間を設定します。期間が終了するとデータは削除されますが、Legal Hold中は永続的に保持されます。 - 重要: Legal Holdが設定されているユーザーアカウントは、Google Workspace上では無効化できますが、VaultからLegal Holdを解除するまで完全に削除することはできません。

注意点:対象エディション

Google Vaultは、Google Workspaceの一部のエディションで利用可能です。詳細は公式ドキュメントをご確認ください。

GASからAdmin SDK Directory APIを呼び出す:実装ステップと注意点

Google Apps Script (GAS) とAdmin SDK Directory APIを組み合わせることで、退職者アカウントの無効化やグループからの削除といった作業を自動化できます。これにより、手動作業によるミスを減らし、情シスの運用負荷を軽減します。

手動対応のどこがボトルネックになるか

退職者が発生するたびに、管理コンソールでユーザーを検索し、無効化し、所属するグループを一つずつ確認して削除する作業は、非常に手間がかかります。特に組織規模が大きくなると、この作業は情シス担当者の大きな負担となり、削除漏れや設定ミスにつながるリスクも高まります。自動化はこれらの問題を解決するための最も効果的な手段です。

GASスクリプトの準備

GASでAdmin SDK Directory APIを利用するには、以下の準備が必要です。

  1. 新しいGASプロジェクトの作成: Google Driveから「新規」>「その他」>「Google Apps Script」で新しいプロジェクトを作成します。
  2. Advanced Serviceの有効化: - GASエディタの左側メニュー「サービス」アイコン(+記号)をクリックします。 - 「Admin SDK Directory API」を検索し、「追加」をクリックして有効化します。 - 同様に、Driveファイルの所有権を移譲する場合は「Drive API」を、メール転送設定を行う場合は「Gmail API」も有効化します。
  3. スコープの設定: Advanced Serviceを有効化すると、必要なOAuthスコープが自動的に追加されますが、プロジェクトのマニフェストファイル(appsscript.json)で明示的に定義することをお勧めします。

    以下は必要なスコープをまとめた appsscript.json の例です。

    json { "oauthScopes": [ "https://www.googleapis.com/auth/admin.directory.user", "https://www.googleapis.com/auth/admin.directory.group", "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/gmail.settings.sharing" ] }

    これらのスコープは、スクリプトがユーザーやグループ、ドライブ、Gmailの設定を変更するために必要です。

GASコード例1: ユーザー無効化スクリプト

以下のスクリプトは、指定されたメールアドレスのユーザーアカウントを無効化(一時停止)します。

function suspendUserAccount() {
  const userEmail = "retiree@yourdomain.com"; // 無効化する退職者のメールアドレス

  try {
    // ユーザーアカウントを一時停止する
    AdminDirectory.Users.update({suspended: true}, userEmail);
    Logger.log(`ユーザー ${userEmail} を正常に一時停止しました。`);
  } catch (e) {
    Logger.log(`ユーザー ${userEmail} の一時停止中にエラーが発生しました: ${e.message}`);
  }
}
  • suspendUserAccount: この関数は、userEmail変数に指定されたメールアドレスのGoogle Workspaceユーザーを一時停止します。
  • AdminDirectory.Users.update: Admin SDK Directory APIのUsersサービスにあるupdateメソッドを使用します。このメソッドに、{suspended: true}というオブジェクトと対象ユーザーのメールアドレスを渡すことで、ユーザーアカウントを一時停止状態にできます。

GASコード例2: グループからのメンバー削除スクリプト

このスクリプトは、指定されたユーザーが所属するすべてのグループからそのユーザーを削除します。

function removeUserFromAllGroups() {
  const userEmail = "retiree@yourdomain.com"; // グループから削除する退職者のメールアドレス

  try {
    // ユーザーが所属するすべてのグループを取得
    let pageToken;
    let groups = [];
    do {
      const response = AdminDirectory.Groups.list({
        userKey: userEmail,
        pageToken: pageToken
      });
      groups = groups.concat(response.groups || []);
      pageToken = response.nextPageToken;
    } while (pageToken);

    if (groups.length === 0) {
      Logger.log(`ユーザー ${userEmail} はどのグループにも所属していません。`);
      return;
    }

    // 各グループからユーザーを削除
    groups.forEach(group => {
      try {
        AdminDirectory.Members.delete(group.id, userEmail);
        Logger.log(`ユーザー ${userEmail} をグループ ${group.name} (${group.email}) から削除しました。`);
      } catch (e) {
        Logger.log(`グループ ${group.name} からユーザー ${userEmail} の削除中にエラーが発生しました: ${e.message}`);
      }
    });

    Logger.log(`ユーザー ${userEmail} のすべてのグループからの削除処理が完了しました。`);

  } catch (e) {
    Logger.log(`グループメンバーシップの処理中にエラーが発生しました: ${e.message}`);
  }
}
  • removeUserFromAllGroups: この関数は、userEmailに指定されたユーザーがメンバーとなっているすべてのGoogle Workspaceグループからそのユーザーを削除します。
  • AdminDirectory.Groups.list: userKeyパラメータにユーザーのメールアドレスを指定することで、そのユーザーが所属するグループのリストを取得します。ページネーションに対応するため、pageTokenを使用しています。
  • AdminDirectory.Members.delete: 各グループのidと対象ユーザーのメールアドレスを渡すことで、グループからメンバーを削除します。

データ移譲・メール転送設定について

退職者のGoogle DriveファイルやGmailの履歴は、後任者や部署の共有ドライブへ移譲する必要がある場合があります。

  • Driveデータ移譲: Admin SDK Directory APIのAdminDirectory.Users.transferOwnership(oldOwnerKey, {newOwnerUserId: newOwnerId})を使用すると、退職者のすべてのGoogle Driveデータを新しい所有者に一括で移譲できます。
  • メール転送設定: Gmail APIを利用して、退職者の受信メールを後任者のメールアドレスに自動転送する設定が可能です。

これらの処理もGASで自動化できますが、スクリプトが複雑になるため、ここでは詳細なコードは割愛します。まずはユーザー無効化とグループ解除から着手し、その後必要に応じてデータ移譲やメール転送の自動化を進めるのが現実的です。

VaultとAdmin SDKを組み合わせる順番の設計根拠

Google VaultとAdmin SDKを組み合わせた退職者対応では、処理の順番が実装の品質を左右します。順序を誤るとデータ消失やLegal Hold設定の手間が増えるため、以下の流れを設計の基準として押さえておいてください。

  1. 退職情報の取得: 人事システムなどから退職者の情報を取得します。
  2. Google Vault Legal Hold設定: 退職者のアカウントに対し、Google Vaultでデータ保持(Legal Hold)を設定します。アカウント無効化の前にこの設定を行うのがポイントです。アカウントを先に無効化しても技術的には設定できますが、確認操作が煩雑になります。
  3. GASスクリプト実行: - ユーザーアカウントの無効化(一時停止) - 所属するすべてのグループからメンバーを削除 - 必要に応じて、Driveデータの移譲やメール転送設定を自動または手動で行います
  4. アカウント削除: 一定期間(例えば、データ保持期間の終了後や社内規定に基づく期間)が経過した後、VaultのLegal Holdを解除し、アカウントを完全に削除します。

このフローにより、コンプライアンス要件を満たしつつ、セキュリティリスクを低減し、情シスの運用負担を削減できます。

実装前に決めておく:権限設計とリスク管理の判断軸

実装に入る前に、以下の点を確認・決定しておくことが重要です。

  • Google Vaultの対象エディション: 前述の通り、Vaultは一部のGoogle Workspaceエディションでのみ利用可能です。自社エディションを確認してください。
  • GAS実行ユーザーの権限: GASスクリプトを実行するアカウントには、Admin SDK Directory APIやGmail API、Drive APIを操作するための適切な管理者権限が必要です。通常はスーパー管理者アカウントで実行するか、必要な権限を付与したカスタム管理者ロールを作成します。
  • データ移譲の複雑さ: Google Driveのファイル移譲は、共有ドライブへの移行や個別のファイル所有権変更など、状況に応じて複雑になる場合があります。一括移譲で対応できない場合は、手動での確認や個別対応が必要になることも考慮に入れるべきです。
  • メール転送設定のリスク: メール転送は、プライバシーや情報漏洩のリスクも伴います。設定時には、転送先や転送期間について社内規定や情報セキュリティポリシーを遵守することが重要です。
  • 監査ログの活用: Google Workspaceの監査ログ(管理アクティビティ、Vault監査ログなど)を定期的に確認し、退職者対応が適切に行われたか、不正なアクセスがないかを継続的に監視する体制を整えておくと、インシデント発生時の対応が速くなります。

段階実装で始める:全自動化を目指さない理由

退職者対応の自動化は、いきなり全処理を自動化しようとすると設計が複雑になり、逆にリスクが高まります。まずはユーザー無効化とグループ解除という「ミスが起きやすく、かつGASで完結する2処理」から自動化を始め、運用が安定したらデータ移譲やメール転送の自動化を段階的に追加していく方針が現実的です。

本記事で解説したGoogle Vaultによるデータ保持と、Admin SDK Directory APIおよびGASを用いたアカウント管理の自動化は、その最初のステップとなります。自動化の範囲を絞ることで、情シス担当者がスクリプトの動作を把握しやすくなり、問題が起きたときのトラブルシューティングも容易になります。退職者対応のような「抜け漏れがあると後から取り返しのつかない処理」ほど、まず小さく動かして確認するアプローチが安全です。

コーポレートITのご相談はお気軽に

この記事で書いたような業務改善・自動化の設計から実装まで、DRASENASではコーポレートITの現場に寄り添った支援を行っています。 「まず相談だけ」でも大歓迎です。DRASENAS 公式サイトからお気軽にどうぞ。

CONTACT

御社の IT 部門、ここにあります。

「ITのことはあまりわからない」── そのような状態からで、まったく問題ございません。まずはお気軽にご相談ください。

一社ずつ、一から。