1

Google Cloud と BigQuery は初めてです。関連していると思われる他の多数の質問を確認しましたが、それらの回答に何が欠けているかはわかりませんでした。公開データセットにクエリを実行しようとしています。

エラー:

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Access Denied: Project airy-advantage-235802: The user kafka-learning@airy-advantage-235802.iam.gserviceaccount.com does not have bigquery.jobs.create permission in project airy-advantage-235802.",
    "reason" : "accessDenied"
  } ],
  "message" : "Access Denied: Project airy-advantage-235802: The user kafka-learning@airy-advantage-235802.iam.gserviceaccount.com does not have bigquery.jobs.create permission in project airy-advantage-235802."
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:150)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:401)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1132)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:499)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:432)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:549)
    at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.create(HttpBigQueryRpc.java:183)

私がやったこと:

  1. 新しい Google Cloud アカウントを作成しました
  2. Google がプロジェクト ID airy-advantage-235802 を割り当てた新しいプロジェクトを作成しました。プロジェクト名は Kafka Learning です。
  3. サービス アカウント kafka-learning@airy-advantage-235802.iam.gserviceaccount.com を作成しました
  4. そのユーザーにプロジェクト内の BigQuery 管理者の役割を付与します (最初に BigQuery ユーザーと BigQuery データ閲覧者を試しました)
  5. JSON 資格情報ファイルをローカル フォルダーに保存しました
  6. 環境変数GOOGLE_APPLICATION_CREDENTIALSを JSON ファイルへのパスに設定します
  7. 公開データセットをクエリするための小さな Java プロジェクトがあります
  8. 上記のエラーを受け取りました
  9. 確認済みの課金が有効になっています (私が知る限り、以下を参照してください)

見逃したステップはありますか?

Google Cloud プロジェクトのセットアップ

サービス アカウントの設定

ここに画像の説明を入力

var bigquery = BigQueryOptions.getDefaultInstance().getService();
var query = "SELECT * FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160801` LIMIT 10";
var queryConfig = QueryJobConfiguration.newBuilder(query).build();
var table = bigquery.query(queryConfig);

また、ビルダーを次のように変更して、プロジェクト ID (json ファイルにもあります) を明示的に設定しようとしました。

var bigquery = BigQueryOptions.newBuilder().setProjectId("airy-advantage-235802").build().getService();
4

2 に答える 2

2

これは通常、「新しい」サービス アカウントに古いロールがバインドされている可能性があるため、同じ名前のサービス アカウントを削除して作成したときに発生します。したがって、次のことができます。

  • 新しいサービス アカウントを使用する
  • そのロールをサービス アカウントに付与するバインディングを明示的に削除する
  • これらのロールを「新しい」サービス アカウントに再付与します。

詳細については、このリンクを確認してください。

それが役に立てば幸い。

于 2019-03-27T16:06:14.350 に答える
0

私もこの問題を抱えています。ドキュメントを読むと解決します。

サービス アカウントを削除してから、同じ名前で新しいサービス アカウントを作成することができます。削除されたサービス アカウントの名前を再利用すると、予期しない動作が発生する可能性があります。

サービス アカウントを削除しても、そのロール バインディングはすぐには削除されません。最近削除されたサービス アカウントと同じ名前で新しいサービス アカウントを作成すると、古いバインディングがまだ存在する可能性があります。ただし、両方のアカウントが同じメール アドレスを持っていても、新しいサービス アカウントには適用されません。この動作は、作成時に Cloud IAM 内でサービス アカウントに一意の ID が与えられるために発生します。内部的には、サービス アカウントのメール アドレスではなく、これらの ID を使用してすべてのロール バインディングが付与されます。したがって、削除されたサービス アカウントに存在していたロール バインディングは、同じメール アドレスを使用する新しいサービス アカウントには適用されません。

混乱を避けるために、一意のサービス アカウント名を使用することをお勧めします。これが不可能な場合は、次の方法で新しいサービス アカウントにロールを付与できます。

その役割を古いサービス アカウントに付与するすべてのバインディングを明示的に削除します。これらのロールを新しいサービス アカウントに再付与します。再度追加する前に、最初にロール バインディングを削除する必要があります。ロールを再度付与するだけでは、削除された古いサービス アカウントにロールが付与されるため、暗黙のうちに失敗します。 ここにリンクの説明を入力

于 2019-05-17T08:51:38.743 に答える