web-dev-qa-db-ja.com

サーバーキーを使用すると、Google Sheets APIから「呼び出し元に権限がありません」が返される

API Managerでサーバーキーを生成し、Macで次を実行しようとしました。

curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'

しかし、これはそれが返すものです:

{
 "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

ここで何が間違っていますか?

39
Instabrite

この問題を解決するには、次を試してください。

  1. サービスアカウントを作成します: https://console.developers.google.com/iam-admin/serviceaccounts/
  2. オプションで、キーを作成します。このキーは通常のclient_secret.jsonです-同じ方法で使用します
  3. このサービスアカウントに所有者のアクセス許可を追加します(メンバー名=サービスアカウントID =サービスアカウントメール例:[email protected]
  4. サービスアカウントのメールアドレスをコピー=サービスアカウントID
  5. ブラウザで操作したいGoogleシートに移動するだけです
  6. 画面右上の共有に移動します
  7. 詳細設定に移動し、サービスアカウントのメールアドレスと共有します例:[email protected]

それは私のために働いた:)

43

私は答えるのが少し遅れていることを知っていますが、同じ問題に苦しんでいる他の人々にとっては。
Just シートの許可をパブリックに変更ドライブ上で、API呼び出しによる認証なしでアクセスできるようにします。

アクセスを変更するには:

  1. Googleドライブでシートを開く
  2. 右上の[共有]をクリックします
  3. プロンプトウィンドウの下部で、[詳細設定]をクリックします
  4. パブリックまたはリンクを持っている人へのアクセス許可の変更(サインインは不要)

APIリクエストを送信して、認証なしでシートからデータを取得します。

注:シートに機密データが含まれている場合、それを公開して、認証されたアクセスで行うことは安全ではありません。

32
WLatif

@KishanPatelのコメントに注意してください:

また、このシートを特定のメールで共有できます。サービスアカウント(プロジェクト)メール。 「client_email」:「[email protected]」、これにより、スクリプトからシートにアクセスできます。

16
Horen

最も簡単な方法は、gcloud cliを使用して修正することです。その他のドキュメントはこちら https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin

gcloudをインストールする

Sudo apt-get install google-cloud-sdk

それから電話する

gcloud init

次に、アクティブなプロジェクトと資格情報を確認します

gcloud config configurations list

うまくいかない場合は、正しいアカウントで認証されていることを確認してください。

gcloud auth list
* account 1
  account 2

そうでない場合は、プロジェクトのアカウントに変更します。

gcloud config set account `ACCOUNT`

アカウントに応じて、プロジェクトリストは異なります。

gcloud projects list

- project 1
- project 2...

目的のプロジェクトに切り替えます。

gcloud config set project `PROJECT NAME`

次に、gcloud auth application-default loginを使用してアプリケーションのデフォルト認証情報を作成すると、google-cloudはそのような認証情報を自動的に検出します。

3
Yuliia Ashomok