簡體   English   中英

如何查看 python bigquery 客戶端使用的服務帳戶?

[英]How can I see the service account that the python bigquery client uses?

要創建默認的 bigquery 客戶端,我使用:

from google.cloud import bigquery
client = bigquery.Client()

這使用環境中可用的(默認)憑據。

但是我如何查看使用了哪個(默認)服務帳戶?

這使我朝着正確的方向前進:
使用錯誤憑據的 Google BigQuery Python 客戶端

要查看使用的服務帳戶,您可以執行以下操作:

client._credentials.service_account_email

然而:
當您在 jupyter 筆記本(在 Vertex AI 中)上運行它時,上面的這條語句有效,但是當您使用print(client._credentials.service_account_email)在雲函數中運行它時,它只會將'default'記錄到 Cloud Logging。 但是雲函數的默認服務帳戶應該是: <project_id>@appspot.gserviceaccount.com


這也會給你錯誤的答案:

client.get_service_account_email()

client.get_service_account_email()的調用不會返回憑據的服務帳戶電子郵件地址。 相反,它會返回用於 KMS 加密/解密的 BigQuery 服務帳號電子郵件地址。

雖然您可以直接查詢憑據(無論是 json 密鑰、元數據服務器等),但我偶爾會發現使用SESSION_USER()函數簡單地查詢 bigquery 很有價值。

像這樣快速的東西就足夠了:

client = bigquery.Client()
query_job = client.query("SELECT SESSION_USER() as whoami")
results = query_job.result()
for row in results:
    print("i am {}".format(row.whoami))

按照 John Hanley 的評論(在 Compute Engine 上運行時),您可以查詢元數據服務以獲取電子郵件用戶名:
https://cloud.google.com/compute/docs/metadata/default-metadata-values

所以你可以使用linux:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email" -H "Metadata-Flavor: Google"

或蟒蛇:

import requests

headers = {'Metadata-Flavor': 'Google'}
response = requests.get(
    "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email", 
    headers=headers
)
print(response.text)

使用的 url 中的default是實際使用的服務帳戶的別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM