GCPのサービスアカウントでファイルを操作する時の注意点

GCPのサービスアカウントを利用して、Google Driveのファイルを読み書きする場合、これまではサービスアカウントのメールアドレスをファイルの共有に追加するといった事をしていました。しかし、いつの間にかこの手法が使えなくなっていたようです。また、その場合、サービスアカウントからファイルを操作する際の手法が変更になっていたようで、これらの注意点についてまとめてみることにしました。

※あまりGASでサービスアカウントを使ってファイル操作はしたことがないので気が付きませんでした。確かに最近、この件についてどこかで情報を見た記憶があるのですが、ニュースソースを見つけられず。

共有へ追加できなくなった?

これまで、サービスアカウントが読み書きする必要のあるファイルについては、Google Drive上の対象のファイルについて共有に「iam.gserviceaccount.com」のドメインのアカウントを追加する事で許可としてきました。2021年頃までは確かにこの方法で動いていました。おそらく昨今のセキュリティ向上の一環でOAuth2.0認証でなければアクセスさせないように制限が加わったのかもしれません。

自分が何かしたのかな?と探索したところ、こちらのサイトに理由が書かれていました。

故に厳密にいえば共有不可ではないものの、現在この方法は推奨されていないようです。外部共有がオンじゃなければダメとなると、通常の企業のセキュリティポリシーを考えるとオンには出来ません。組織部門を切ってその組織部門だけこの設定にし、専用のアカウントを用意して、専用の場所でだけ許可するといった厳格な運用が必要になります。

図:管理コンソールでの外部共有の設定

図:サービスアカウントを共有に追加した様子

Google Workspaceで高度なアクセス制限を実現する

サービスアカウントを利用する

サービスアカウントをGASから操作する

すでに過去のエントリーで、GASからサービスアカウントを利用しての操作自体は実現しています。Google Vertex APIを利用するケースなどでGASのoauthScopesに「https://www.googleapis.com/auth/cloud-platform」を追加して、最初に認証をする事でトークンを取得しリクエストをするという形を取ります。

また、この手法以外ではStackOverflowでも言及されていますが、対象のGCPプロジェクトの対象のスコープをGoogle Workspaceのドメイン全体の委任に追加するという手法を合わせて行います。しかし、ドメイン全体の委任で追加する手法は、セキュリティ的にどうなのよ?という懸念もあることから、利用する場合はかなり厳格にアカウント管理や適用範囲を絞っておく必要性があります。

Google Apps ScriptからBard API?で質問してみた

Google Apps Scriptで一部だけをユーザ権限で動かしたい時は?

サービスアカウントにファイルを読み書きさせる場合

ドメイン全体に委任しての操作はちょっとアレという事であれば、やはりここはOAuth2.0認証でサービスアカウントの認証を行い、トークンをもってしてAPIから操作する必要性があります。この場合、対象のファイルに対してサービスアカウントのメアドを追加する必要もないので、ドライブ共有オプションをオンにする必要もありません。

こちらで紹介されてるような、Googleグループにサービスアカウントを追加して、信頼ルールとして追加するといった手法もあるようなのですが、この手段はEnterprise Standard以上でなければ利用が出来ません。

その詳細は前述のGoogle Bardを呼び出すの中に記述されてるような手法で、スコープとしてはGoogle Sheets APIなど対象のドキュメントのAPIを加えておきます(手動で、https://www.googleapis.com/auth/spreadsheetsを追加)。あらかじめ有効なAPIとサービスにてGoogle Sheets APIを追加しておく必要があります。Google DriveのScopeも追加しておきましょう。

OAuthライブラリで認証を行う事で許可されて読み書きが可能になります。

とはいえ、こちらの方法は方法でClient IDやSecret、OAuth2.0認証によるAccess Tokenを利用してアクセスさせているのでトークンの流出等といったリスクがありますので厳格に管理する必要性があるのには変わりません。

図:Sheets APIを有効化

図:Scopeとして追加する

サービスアカウントが作ったファイルについて

サービスアカウントでファイルを作成すると、不思議な挙動になります。この辺りについてはこちらのサイトが非常に細かく検証とまとめを行っています。

  • ファイルのオーナーはサービスアカウントとなる(自分ではない)
  • ファイルの置き場は、サービスアカウントのマイドライブにフォルダが作成されて、ファイルが作成され、フォルダが自分に共有される
  • ファイルを削除してもサービスアカウントがある限り、サービスアカウントのマイドライブに存在し続ける
  • ファイルのオーナーは自分に変更することが出来る。但し変更には制限が伴う
  • サービスアカウントを削除するとこれらのファイルも全て削除される
  • 故にファイルについては共有ドライブなどに移動するのが望ましい

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)