在Google Compute Engine实例上进行Google BigQuery身份验证的最简单方法是什么?
答案 0 :(得分:3)
在Python中:
AppAssertionCredentials
是一个python类,它允许Compute Engine实例向Google和其他OAuth 2.0服务器标识自己,而不需要流量。
https://developers.google.com/api-client-library/python/
可以从元数据服务器读取项目ID,因此不需要将其设置为变量。
https://cloud.google.com/compute/docs/metadata
以下代码使用AppAssertionCredentials获取令牌,来自元数据服务器的项目ID,并使用此数据实例化BigqueryClient:
import bigquery_client
import urllib2
from oauth2client import gce
def GetMetadata(path):
return urllib2.urlopen(
'http://metadata/computeMetadata/v1/%s' % path,
headers={'Metadata-Flavor': 'Google'}
).read()
credentials = gce.AppAssertionCredentials(
scope='https://www.googleapis.com/auth/bigquery')
client = bigquery_client.BigqueryClient(
credentials=credentials,
api='https://www.googleapis.com',
api_version='v2',
project_id=GetMetadata('project/project-id'))
为此,您需要在创建时为GCE实例授予对BigQuery API的访问权限:
gcloud compute instances create <your_instance_name> --scopes storage-ro bigquery
答案 1 :(得分:2)
首先确保您的实例具有访问BigQuery的范围 - 您只能在创建时决定这一点。
在bash脚本中,通过调用:
获取oauth令牌ACCESSTOKEN=`curl -s "http://metadata/computeMetadata/v1/instance/service-accounts/default/token" -H "X-Google-Metadata-Request: True" | jq ".access_token" | sed 's/"//g'`
echo "retrieved access token $ACCESSTOKEN"
现在让我们说你想要一个项目中的数据集列表:
CURL_URL="https://www.googleapis.com/bigquery/v2/projects/YOURPROJECTID/datasets"
CURL_OPTIONS="-s --header 'Content-Type: application/json' --header 'Authorization: OAuth $ACCESSTOKEN' --header 'x-goog-project-id:YOURPROJECTID' --header 'x-goog-api-version:1'"
CURL_COMMAND="curl --request GET $CURL_URL $CURL_OPTIONS"
CURL_RESPONSE=`eval $CURL_COMMAND`
JSON格式的响应可以在变量CURL_RESPONSE
中找到PS:我现在意识到这个问题被标记为Python,但同样的原则适用。