Back

/ 2 min read

サービスアカウントの権限借用経由でGoogle Driveを操作する

需要は一定ありそうだがあまり書かれている記事がなさそうなので書いておく。

事前設定

  • GCP projectを作成しておく。
  • GCPコンソールからGoogle Drive APIを有効にしておく
  • google driveにアクセスするディレクトリ/ファイルを用意しておく

Steps

サービスアカウントの作成

サービスアカウントを作成する。例えば以下のようなコマンド。 また、このサービスアカウントの権限借用をするためにサービスアカウントのトークン生成を行うロールを付与しておく。例えばgoogleアカウントなどのプリンシパルをmemberとして設定する。

Terminal window
$ gcloud iam service-accounts create your-service-account --display-name "Your account display name"
$ gcloud iam service-accounts add-iam-policy-binding \
your-service-account@your-project.iam.gserviceaccount.com \
--member="user:your-principal@gmail.com" \
--role="roles/iam.serviceAccountTokenCreator"

サービスアカウントに対してGoogle Driveのアクセス権を付与

SSIA。Google DriveのUIから付与する。

権限借用を用いたアクセス

pythonのsdkで権限借用を使ってgoogle driveにアクセスしてみる。 ADCを使うので事前に gcloud auth application-default login しておく必要がある。

from google.auth import impersonated_credentials
from google.auth import default
from googleapiclient.discovery import build
# デフォルト認証情報を取得(ADC)
source_credentials, project = default()
target_credentials = impersonated_credentials.Credentials(
source_credentials=source_credentials,
target_principal='your-service-account@your-project.iam.gserviceaccount.com', # 権限借用するサービスアカウント
target_scopes=['https://www.googleapis.com/auth/drive']
)
drive_service = build('drive', 'v3', credentials=target_credentials)
print(drive_service.files().list(pageSize=10).execute())

参考文献