0

を拒否されました:のStackdriver GoogleのPythonのAPIアクセスが、私はエラーを取得する

import os 
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path_to_json_secrets.json' 

from google.cloud.bigquery.client import Client as bqClient 
bqclient = bqClient() 
ds = bqclient.dataset('dataset_name') 

print(ds.access_grants) 
[] 

ds.delete() 
ds.create() 

print(ds.access_grants) 
[<AccessGrant: role=WRITER, specialGroup=projectWriters>, 
<AccessGrant: role=OWNER, specialGroup=projectOwners>, 
<AccessGrant: role=OWNER, [email protected]_2.iam.gserviceaccount.com>, 
<AccessGrant: role=READER, specialGroup=projectReaders>] 

from google.cloud.logging.client import Client as lClient 
lclient = lClient() 
dest = 'bigquery.googleapis.com%s' %(ds.path) 
sink = lclient.sink('sink_test', filter_='jsonPayload.project=project_name', destination=dest) 
sink.create() 
:私が使用

RetryError: GaxError(Exception occurred in retry method that was not classified as transient, caused by <_Rendezvous of RPC that terminated with (StatusCode.PERMISSION_DENIED, The caller does not have permission)>) 

コードは、この1でした

これがなぜ起こっているのかよく分かりません。 lclient.log_struct()を使用すると、ロギングコンソールにログが到着していることがわかりますので、スタックドライバのロギングにアクセスできます。

この設定に間違いはありますか?

ありがとうございます。

答えて

1

シンクの作成には、ログエントリの作成とは異なるアクセス許可が必要です。デフォルトでは、サービスアカウントにはプロジェクトエディタ(所有者ではない)が割り当てられていますが、シンクを作成する権限はありません。

必要な権限の一覧を参照してくださいin the access control docs

使用しているサービスアカウントにlogging.sinks.create権限があることを確認してください。これを行う最も簡単な方法は、サービスアカウントをエディタから所有者に切り替えることですが、ログエディタロールを追加して、必要な権限を与えるだけの方がよいでしょう。

関連する問題