私は、googlesheets4
いくつかのデータを読み取るために使用し、ガーグルを使用して API 呼び出しを認証する単純なスクリプトに取り組んでいます。gs4_auth()
が間違ったユーザーを認証するという問題が発生しています。
最初gs4_auth("example@example.com")
に Google アカウントで認証を実行すると、すべてが機能します。
その後、gargle::credentials_service_account()
ローカル サービス アカウントの json キーを使用してトークンを生成し、API 呼び出しを認証します。それもうまくいきます。
この問題は、以前に API 呼び出しを認証した後でスクリプトを再度実行しようとすると発生します。実行するgs4_auth()
と、サービス アカウントの資格情報が使用され、read_sheet()
呼び出しで 403 エラーが返されます。
gs4_auth()
サービス アカウント資格情報を使用しないように強制する方法はありますか。サービス アカウントには、渡された電子メールとは異なる電子メールがあるgs4_auth()
ため、一致しない資格情報を使用することは期待できません。
で認証を実行したoptions(options(gargle_verbosity = "debug")
ところ、次の出力が得られました。
> gs4_auth(email = 'example@example.com')
trying `token_fetch()`
trying `credentials_service_account()`
Error caught by `token_fetch()`:
Argument 'txt' must be a JSON string, URL or file.
trying `credentials_external_account()`
aws.ec2metadata not installed; can't detect whether running on EC2 instance
trying `credentials_app_default()`
file exists at ADC path:
/Users/path-to-service-account-credentials/json-key-filename.json
ADC cred type: "service_account"
trying `credentials_service_account()`
adding "userinfo.email" scope
service account email: example-service-account@project.iam.gserviceaccount.com
example@example.com には Google シートへのアクセス権がありますが、example-service-account@project.iam.gserviceaccount.com にはアクセスできないため、後続の 403 エラーが発生します。