😵‍💫

Google Workspaceのclasp認証でつまづいた

に公開

はじめに

Google Apps Script CLIツール「clasp」を使って開発しようとしたら、認証でハマった話です。結論としては、個人アカウントとGoogle Work spaceのアカウントだとセキュリティ面で必要なことが違うんですね。

私は個人アカウントでの成功体験があったので、なぜエラーが出るのか理解できず、ChatGPTに質問しても個人アカウント前提の答えしか返ってこないことが多く苦労しました。

組織アカウントではどのようなステップが必要なのか備忘も兼ねて整理しておきます。

組織アカウントで謎のエラー

個人アカウントの場合、初回の clasp login ではブラウザが開いてGoogle認証画面が出ます。一度承認すれば設定完了。2回目以降はキャッシュで即座に通ります。

個人アカウント(@gmail.com)の場合

clasp login
# → 即座に認証完了!

ところが、Google Workspaceアカウントではそうはいきません。

組織アカウント(@company.com)の場合

clasp login
# → "We are sorry, but you do not have access to this service"

個人と組織で認証の仕組みが違う

個人アカウントの認証(簡単)

  • Googleが用意したデフォルトの認証情報を使用
  • 制限が少なく、管理者承認不要
  • clasp loginだけでOK

組織アカウントの認証(複雑)

  • セキュリティポリシーにより外部アプリがブロック
  • 管理者による明示的な許可が必要
  • カスタム認証情報の作成が必須

4つのステップ

ログイン問題解決には、Google Workspaceアカウントでは下記の5つのステップが必要でした。

  1. Admin ConsoleでAPI許可(管理者の許可)
  2. Admin ConsoleでAPI許可(プロジェクトレベルの有効化)
  3. OAuth同意画面設定(ユーザーの明示的な承諾)
  4. OAuth認証情報作成(アプリケーションの身元証明)
  5. カスタム認証でログイン(組織専用の認証方式)

個人アカウントでは、1〜3はGoogle側で自動的に処理済み、4もデフォルト認証で通過しているとのこと。

1. Google Admin ConsoleでApps Script APIを許可

解説

  • 組織として「Apps Scriptを使ってもOK」と許可するイメージ
  • これがないと、そもそも組織のポリシーでブロックされる
  • 例: 会社の玄関の鍵を開けるようなもの

手順

  1. Admin Console にログイン
  2. セキュリティAPIコントロールアプリアクセス制御 へ移動
  3. claspを「Unrestrictedに変更」または「RestrictedにしてclaspをTrustedに追加」

2. Google Cloud ConsoleでApps Script APIを有効化

解説

  • clasp が使う「Apps Script API」を有効にしないと認証が進まない
  • デフォルトではオフになっている場合がある
  • 例: 社員証を発行する前に「入館システム」を起動するようなもの

手順

  1. Google Cloud Console にログイン
  2. APIとサービスライブラリ を開く
  3. 「Google Apps Script API」を検索
  4. 有効化をクリック

3. OAuth同意画面の設定

解説

  • 「clasp があなたの Apps Script にアクセスしますが良いですか?」という確認画面
  • どんなデータにアクセスするかをユーザーに明示
  • 例: 来客に「何の用事で来ましたか?」と聞く受付のようなもの

手順

  1. Google Cloud Console → OAuth consent screen を開く
  2. アプリ情報(名前・サポートメール)を入力
  3. User Type を Internal に設定
  4. テストユーザーに自分のアカウントを追加

4. OAuth 2.0認証情報の作成

解説

  • clasp が「私は clasp です」と自己紹介するための身分証明書
  • Client ID と Client Secret がセットになっている
  • 例: 会社の入館証を発行するようなもの

手順

  1. Google Cloud Console にログイン
  2. APIとサービス認証情報 へ移動
  3. 「OAuth Client ID」を「Desktop application」として作成
  4. Client ID と Client Secret を取得

4. カスタム認証情報での認証

解説

  • デフォルトの汎用的な認証ではなく、組織用にカスタマイズした認証情報を使用
  • 組織のセキュリティポリシーに準拠した方法でアクセス
  • 例: 汎用の訪問者証ではなく、専用の社員証を使って入館するようなもの

手順

  1. 既存の認証をログアウト
    clasp logout
    
  2. ダウンロードした認証情報を使ってログイン
    clasp login --creds ./credentials.json
    

重要なポイント

  • 両方の設定が必要: Cloud ConsoleとAdmin Consoleの両方
  • 設定反映に時間: 数分〜数時間かかる場合あり
  • Desktop applicationがポイント: Web applicationではダメ
  • Internalユーザータイプ: 組織内のみでOK

終わりに

今回は自分が組織の管理者権限を持っていたため、比較的スムーズに解決できました。しかし、もし一般ユーザーの立場だったら、管理者に問い合わせて原因を調べてもらうのは手間がかかり、大変だったと思います。

組織のセキュリティ要件を満たすためには、どうしても複雑な設定が必要になりますが、その背景を理解すれば手順にも納得がいきます。この記事が、同じような状況で困っている方の参考になれば幸いです。

参考リンク

Discussion