サービスベースの認証を使用してGCSにアクセスするPythonスクリプトを作成しようとすると、次のことがわかりました。'key'は私のp12ファイルの内容であることに注意してください。
アカウントのバケットのリストを読み込もうとしています。GCSへのWebインターフェイスを使用して1つのバケットを正常に作成しましたが、gsutilでそれを確認できます。
以下のコードを実行すると、403エラーが発生します。最初は正しく認証されていないと思っていましたが、この非常に便利なWebページ(Webベースの認証を使用)から試してみましたが、正しく機能します。https://developers.google.com/apis-explorer/#p/storage/v1beta1/storage.buckets.list?projectId=&_h = 2&
ヘッダーとクエリ文字列を見て、それらをウェブサイトで生成されたリクエストのキーダーとクエリと比較すると、承認ヘッダーがなく、クエリ文字列にkey=タグがないことがわかります。私は、資格認定が私のためにこれを処理していただろうと思ったと思います。
私は何が間違っているのですか?
コード:
credentials = SignedJwtAssertionCredentials(
'xxx-my-long-email-from-the-console@developer.gserviceaccount.com',
key,
scope='https://www.googleapis.com/auth/devstorage.full_control')
http = httplib2.Http()
http = credentials.authorize(http)
service = build("storage", "v1beta1", http=http)
# Build the request
request = service.buckets().list(projectId="159910083329")
# Diagnostic
pprint.pprint(request.headers)
pprint.pprint(request.to_json())
# Do it!
response = request.execute()
実行しようとすると、403が表示されます。