1

grailsアプリケーションからバブルを作成したいと思います。 私は既にGoogleクラウドにバケツを作成しました。サービスアカウントを作成し、そのオーナーにバケツにアクセスしてサービスアカウントに与えました。その後、サービスアカウントキーproject-id-c4b144.jsonが作成され、すべての資格情報が保持されます。GrailsアプリケーションからGoogle Cloud Storageにアクセスする

このコードを実行すると、jsonエラーメッセージが返されます。

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden 
{ 
    "code" : 403, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Caller does not have storage.objects.create access to bucket dispatching-photos.", 
    "reason" : "forbidden" 
    } ], 
    "message" : "Caller does not have storage.objects.create access to bucket dispatching-photos." 
} 

| Grailsバージョン:3.2.10 | Groovyバージョン:2.4.10 | JVMのバージョン:1.8.0_131

グーグル、クラウド型データストア:1.2.1

グーグル-AUTH-ライブラリのOAuth2-のhttp:0.7.1

Googleのクラウド・ストレージ:1.2.2

サービスに関する
+0

サービスアカウントは、独自の個別のアクセス権を持つ一意のユーザーとしてカウントされます。資格情報 'project-id-c4b144.json'に関連付けられたサービスアカウントは、そのバケット内にオブジェクトを作成する権限を持っていますか? –

+0

@Brandon Yarbrough、はい、私はjsonファイルからクライアントのメールを受け取り、バケツの管理者として「バケットの権限」から追加しました。 –

+0

これは実行した実際のコードですか?構文的には有効ではありませんが(セミコロンが数行についていない)、中間の編集状態にあるようです(storage.get()呼び出しが必要ないようです)。また、私はあなたのプロジェクトIDが実際には "プロジェクトID"ではないと思われます - 投稿であなたの実際のプロジェクトIDを隠すことだけでしたか?それともあなたがコードで使った価値ですか? –

答えて

1

はJSONファイルが対応するアカウント - 私はどちらか賭けている:

A)アクセスしようとしているバケットは以下のように設定したアカウントをお持ちものとは別のプロジェクトによって所有されますストレージ管理者

またはB)jsonファイルと異なるサービスアカウントのアクセス許可を設定しています

+0

ありがとうございます。はい、バケットに2つの異なるプロジェクトからアクセスできる場合でも、アクセスの問題が発生しました。私の場合、同じバケット(「ディスパッチング写真」)にはproject1とproject2の2つのプロジェクトからアクセスできました.pop2に対応するサービスアカウントが作成されました。だからproject2で別のバケットを作成し、project1でアクセスできないバブルを作成すると、新しいバケットにBLOBを作成しました。だから私たちはさらに問題を調査します。私はすでにあなたの反応を盛り上げていましたが、現時点では、問題が正確にはわかりません。一度私が確信したら、私はポストを更新したままにします。 –

+0

原因はおそらく、オブジェクトを作成するために使用しているサービスアカウントには、project2に対するストレージ管理権限しかないことが考えられます。そのサービスアカウントがproject1のバケットにアクセスできるようにするには、そのアカウントをproject1のプロジェクトメンバーとして追加し、ストレージ管理権限を与える必要があります。 – mhouglum

関連する問題