Closed7
Google Drive・Gmail → GCS連携をCloud runでい

下記を参考に進める
サービスアカウント
サービスアカウントとgoogle workspaceの権限連携

- まずはGithubのリポジトリを作成する。
- 下記を参考にしてGithub Actionsを設定する
- 定期実行のためCloud Run の
job
としてデプロイする場合は上記にあるyaml
にあるservice:
をjob:
に、環境変数のSERVICE
をJOB
に置き換える。 - serviceの場合と違い
--concurrency
など使えない引数がある。

サービスアカウントとドメイン全体の委任 (Google Workspace環境向け)
Google Workspace(旧 G Suite)をご利用の場合、サービスアカウントとドメイン全体の委任を利用することで、ユーザーの介入なしにGoogle Drive API、Gmail APIを操作できます。
仕組み
- サービスアカウントの作成: Google Cloud Platform (GCP) プロジェクトで、特別なGoogleアカウントであるサービスアカウントを作成します。
-
ドメイン全体の委任の有効化: 作成したサービスアカウントに対して、Google Workspaceドメイン全体の委任を有効にします。これにより、サービスアカウントがドメイン内の任意のユーザーとしてGmail APIにアクセスできるようになります。
-
APIスコープの承認: Google Workspaceの管理者アカウントで、サービスアカウントに必要なGmail APIのスコープ(権限)を承認します。
- サービスアカウントによるAPI呼び出し: 作成したサービスアカウントの認証情報(秘密鍵など)を使用して、プログラムからAPIを呼び出します。この際、特定ユーザーになりすまして操作を行うことができます。
メリット
- 完全に自動化された定期実行が可能です。
- ユーザー個別の認証操作は不要です。
- 複数のユーザーのメールボックスにアクセスする必要がある場合に有効です。
デメリット
- Google Workspace環境である必要があります。
- Google Workspaceの管理者権限が必要です。
- セキュリティ上の考慮事項が増えるため、適切な権限管理が重要です。
設定手順の概要
- Google Cloud Platform (GCP) プロジェクトを作成または選択します。
- APIとサービスでAPIを有効にします。
- drive
- gmail
- サービスアカウントを作成します。
- サービスアカウントの認証情報(JSON形式の秘密鍵)をダウンロードします。
- Google Workspaceの管理者アカウントで、サービスアカウントに対してドメイン全体の委任を有効にします。
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/gmail.readonly
- 必要なAPIのスコープを承認します。
- プログラム内でサービスアカウントの認証情報を使用してAPIを呼び出します。

cloud runへのサービスアカウント割り当て
Cloud Run 前提なら認証情報のファイルを含めなくていい?
デプロイコマンドでCloud Secretsに入れておいたファイルをマウントすることができる
cloud runの定期実行
デプロイ・実行ごとのサービスアカウント
必要なサービスアカウント
- GitHub Repository → (GitHub Actions) → Cloud Run Jobのデプロイをサービスアカウント
- GitHub Actionsを実行するGitHubの実行環境から認証してつかう
- Cloud Run Jobの実行を行うGCP上の操作をするサービスアカウント
- Cloud Runの実行環境に割り当てられるサービスアカウント
- APIの認証情報となる共有ドライブの操作を行うサービスアカウント
- Goolge Workspace側に登録しておいたサービスアカウント
補足
- 最初の二つは同じサービスアカウントでよさそう。二つ目にもストレージ管理者などをつけないとCloud Runでインスタンス起動時にバケットへのマウントができずエラーが出る。
- サービスアカウントは同じだけど、一つ目はWorkload identity、二つ目はdeployコマンドのパラメーターで指定して認証・割当てを実施する。
- 三つ目はサービスアカウント側に何の権限もいらない。ただ、委任の場合は認証情報のjson形式のファイルを配置する方法以外見つからなかった。SDKパッケージの関数にjson形式のファイル読み込みで認証する関数に委任を宣言する機能がある。jsonはGCPのSecret Managerに保存しておき、GitHub Actionsでデプロイ時に保存しておいたSecretをdeployコマンドの引数で指定することで、コードにcredentialなjsonを含めなくて良くなる
- 委任のいいところは、処理の実行でいちいちユーザーに認証を依頼する必要がない点。定期実行ができるようになる。
- ほんとならGoolge Workspaceのユーザーのjsonファイルがあれば、委任もいらないがそんな仕様・機能はなさそう?
- 委任がないとサービスアカウントは単なるGoogle アカウントで、個人ドライブしか使えない。共有ドライブに登録しておくと使えた。共有ドライブはGoolge workspaceでしか作成できない
- Google Chat APIはGoogle Workspaceのアカウントじゃないと利用できないらしい。そうなると、操作するGoogle Workspace組織下アカウントでサービスアカウントを揃えておくと管理しやすい気がする。

Vertex AI searchでRAGに

Google Drive API : Google Workspace独自のファイル形式
ダウンロード時の関数はfiles.export_media
。10MBまで。
出力したい形式をmineTypeで指定。拡張子までつけてくれない><。
Goolge WorkspaceのmineTypeごとに、出力できるmineTypeは下記で確認できる

Gmail API
受信メール一覧の取得
メールの本文の取得
添付ファイルの取得
このスクラップは4ヶ月前にクローズされました