特定のプロジェクトのGCPUIを使用してサービスアカウントを設定しましたProject X
。中Project X
には3つのデータセットがあります:
Dataset 1
Dataset 2
Dataset 3
私は役割を割り当てた場合BigQuery Admin
にProject X
、この現在すべてのデータセット3によって継承されています。
現在、これらのデータセットはすべて、プロジェクトレベルでサービスアカウントに割り当てられた権限を継承しています。指定されたデータセットにのみアクセスできるようにサービスアカウントのアクセス許可を変更する方法はありますか?たとえば、またはへのアクセスを許可しますがDataset 1
、許可しません。Dataset 2
Dataset 3
このタイプの構成は可能ですか?
UIに条件を追加しようとしましたが、Name
リソースタイプを使用して値をに設定すると、Dataset 1
どのデータセットにもアクセスできません。おそらく、値が正しくありません。または、データセットが有効な名前リソースではありません。
投稿する前にすでに試したことに関する詳細と、私が行っていることに関する詳細を追加します。
私の特定のユースケースでは、SQLクエリを実行し、APIを介して(Pythonを使用して)BigQueryのテーブルを変更しようとしています。
ケースA:ロール「BigQueryAdmin」でサービスアカウントを作成します。
この役割はプロジェクト内のすべてのデータセットに伝達されます。プロパティは継承され、このサービスアカウントの役割をどのデータセットからも削除できません。
この場合、ご想像のとおり、PythonAPIを使用してすべてのデータセットとテーブルにクエリを実行できます。
ケースB:デフォルトの役割のないサービスアカウントを作成します。
ロールは伝達されません。UIの[データセットの共有]オプションをクリックして特定のデータセットにロールを割り当て、[BigQueryAdmin]ロールを割り当てることができます。
この場合、データセットまたはテーブルのいずれにもクエリを実行できず、試行すると次のエラーが発生します。
*Forbidden: 403 POST https://bigquery.googleapis.com/bq/projects/project-x/jobs: Access Denied: Project X: User does not have bigquery.jobs.create permission in project Project X.*
必要なbigquery.jobs.create
データセット(この場合)に必要なアクセス許可が存在していてbigquery.jobs.create
も、APIを使用するにはプロジェクトレベルでもアクセス許可が必要であると思われるため、データをクエリできません。
同じことを達成しようとしている他の誰かに役立つ場合に備えて、問題に対して見つけた解決策を投稿します。
プロジェクトのサービスアカウントに権限を割り当てるには、プロジェクトレベルでロール「BigQueryJobUser」をbigquery.jobs.create
割り当てます。
次に、PythonのAPIを介してクエリを実行するために、特定のデータセットに「BigQueryデータエディター」の役割を手動で割り当てることができます。これを行うには、BigQueryUIの[データセットの共有]をクリックします。したがって、この例では、サービスアカウントDataset 1
と「共有」しDataset 2
ました。
これで、PythonでBigQueryデータエディターの役割を割り当てたデータセットをクエリできるようになります。
しかしながら、Dataset 3
そのために、「BigQueryのデータエディタ」の役割が割り当てられていない、あなたがテーブルを照会しようとすると、これはエラーを返す必要があります。
Forbidden: 403 Access Denied: Table Project-x:dataset_1.table_1: User does not have permission to query table Project-x:dataset_1.table_1.
上記のように、プロジェクトにアクセスするための十分な権限がありますが、Dataset 3
設計上、内部のテーブルにはアクセスできません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加