2015-10-19 201 views
2

我正在瀏覽Google的OAuth 2.0 for Server to Server Applications指南,並嘗試使用服務帳戶的憑據調用Google API。限制Google服務帳戶的權限?

所以我有一個data對象,其中包含從JSON密鑰文件解析的憑據。

def get_bigquery_service(): 
    # ... Read and parse JSON Key file 
    scope = ["https://www.googleapis.com/auth/bigquery"] 
    credentials = SignedJwtAssertionCredentials(
     data['client_email'], 
     data['private_key'], 
     scope=scope) 
    http = httplib2.Http() 
    http = credentials.authorize(http) 
    return build("bigquery", "v2", http=http) 

然後我將有權訪問BigQuery API,因爲我聲稱它在scope

我擔心的是,我看不到任何允許我實際限制該服務帳戶能夠在Google Developer Console中使用BigQuery API的選項。比方說,如果憑證文件意外泄露給他人,他們基本上可以對我的任何服務做任何事情,只需在scope中聲明他們想要訪問的內容即可。

有什麼辦法可以限制服務帳戶擁有的權限嗎?

回答

1

所以你有項目-A,你想創建一個服務帳戶,只能使用BigQuery和分析項目-A中的數據?

創建項目B,並且只爲其啓用BigQuery API。爲項目B創建一個服務帳戶。然後在項目-A中給項目-B訪問權限分析其數據。

+0

嗯。但是我已經在項目A中擁有大量的歷史數據,無法遷移到項目B. –

+0

您不必遷移數據,只需告訴tell BigQuery ProjectB可以查看ProjectA數據(讀取權限) –

+1

請注意,您有兩個選項可以授予讀取權限:(1)您可以將項目B的服務帳戶添加爲項目A中的項目讀取器。這將爲所有項目A的數據集提供讀取權限,並可讀取項目A的項目狀態。 (2)您可以將項目B的服務帳戶添加到您想要共享的項目A中的特定數據集。這將使讀取訪問這些數據集。無論哪種情況,項目B的服務帳戶都會將查詢作業提交給項目B,項目B將讀取項目A中的表格。您將需要使用完全限定的表格引用,即「[projectA:dataset.table]」。 –