Google Calendar APIでサービスアカウントから更新できないハマりメモ
Google Calendar APIを使って、サービスアカウントからカレンダーを更新…したいができなくてハマったメモ。 前提として、Google Workspaceで使っている「組織」があって、カレンダーも管理者もサービスアカウントもそこに属しているという場合の話(サービスアカウントは、厳密にはアカウントに属している)
カレンダーの共有設定で変更を許可できない
編集したいカレンダーの共有設定で 特定のユーザーとの共有 をする…も、権限のドロップダウンボックスを見ると、予定の変更があるのに許可できない…という問題。
組織の権限を委任する
GCPではなく、 Google Admin から更新する。
セキュリティ > APIの制御 > ドメイン全体の委任。
その画面を開くと、APIクライアント、というのがあるので 新しく追加 を選択。
クライアントIDは、サービスアカウントの認証情報として jsonや、GCPの管理画面から引っ張ってこれる。
OAuthスコープは、委任したい権限を設定する。今回のケースでいえば https://www.googleapis.com/auth/calendar
となる。他の用途で同じハマり方をした場合は調べながら適切に書き換えよう。
これで終わり…ではないので注意
予備カレンダーの権限変更
今度は、「予備カレンダー」の権限を変更する。ここがハマりポイント。
Google Calendarには メインカレンダー と 予備カレンダー という概念がある。メインカレンダーは、各ユーザーに紐付いているカレンダーのことで、それ以外の、みんなで共有するためのカレンダーなどは、 グループカレンダー といって、予備カレンダーの一種である、ということになっている。
カレンダーの共有URLを見ると、 group.
などとなっている場合は、つまり予備カレンダー。
Google Admin > アプリ > Google Workspace > カレンダー に肝心の共有オプション設定画面があるが、ここにはメインカレンダーと予備カレンダーそれぞれの共有設定がある。なので、共有カレンダーを変更させたいのであれば、「予備カレンダー」が対象となる。これを間違うと一向に権限が反映されなくてハマる。
組織外の権限を編集して変更を許可しておく。