2017-04-24 44 views
0

我想在Google雲端數據流中使用管道(以前的階段模板)(使用Google Cloud Function中的GAPI JS庫,如https://shinesolutions.com/2017/03/23/triggering-dataflow-pipelines-with-cloud-functions/所示)。我如何限制這條管道可以訪問的資源?例如,我不希望它能夠寫入所有發佈/訂閱,項目下的所有存儲桶等。我甚至不希望管道能夠例如根本就做一個HTTP請求。如何在雲中運行Google雲端數據流管道的沙箱/限制訪問權限?

從我讀到的https://cloud.google.com/dataflow/security-and-permissions我只能在從本地機器運行管道時這樣做,因爲那麼訪問權限是由我的用戶訪問權限決定的。然而,當它在雲中運行時,它會在Cloudservices帳戶和計算引擎服務帳戶下運行,並且我無法限制,因此我不會在其他地方破壞它們......正確?

我想要這樣做的原因是我正在構建一個多租戶系統,該系統將在ETL客戶的數據可用於查詢之前將DF利用到該租戶。管道將由數據工程師/顧問編寫(根據客戶的數據形狀定製),這些管道可能會出錯 - 原則上,該代碼默認情況下不可信。

那麼,如果不從本地機器執行它,我該如何限制它的功能?完全獨立的項目?一個權利受到嚴格限制的項目,然後使用跨項目訪問權調整逐個分配桶和其他資源? 或者我可以通過安裝gcloud util來設置一些微型實例來「模擬」本地,然後使用單獨的用戶從那裏運行它?

是否會使用Dataproc(並接受較低抽象和更多devops的價格)幫助?

回答

1

首先,在DF的工作虛擬機中運行的用戶代碼默認承擔計算引擎服務帳戶憑據,這與從哪裏啓動作業的人無關。

所以基本上你的問題可以被重新解釋爲:

  1. 放在虛擬機數據流一些網絡限制。
  2. 對正在使用的服務帳戶設置一些權限限制。

兩個高層次的解決方案在這裏:

答:每一個客戶的管道放入不同的項目。

  1. 對於每個客戶,創建一個新項目。
  2. 授予計算引擎服務帳戶只有必要的權限。
  3. 通過使用對該項目具有正確權限的服務帳戶(例如編輯器),可以從任何地方啓動作業。

B:對單個管道應用限制,而不創建新項目。

  1. 創建一個新的服務帳戶並授予它正確的權限。
  2. 啓動管道時,請使用--serviceAccount使用服務帳戶。

在這兩種情況下,可以使用--network創建管道,以便您靈活地配置網絡。

解決方案A是更好,因爲你正在建設一個多租戶服務和隔離客戶之間可能是非常重要的。而且你應該更容易正確配置。

+0

謝謝你的澄清。我誤解了文檔,並認爲雲中運行的部分僅適用於整個工作流發生在雲中的情況。 –

+0

通過'--serviceAccount'和'--network'你的意思是'--service-account-email'(或JS API中的serviceAccountEmail和WorkerPool.network),對吧? –

+0

不,我的意思是數據流選項:https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/options/DataflowPipelineOptions.html#getServiceAccount--和https:// cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/options/DataflowPipelineWorkerPoolOptions.html#getNetwork--基本上--serviceAccount被轉換爲在這裏得到/ setServiceAccount對。另請注意serviceAccount選項是* experimental *。我仍然推薦上面的解決方案A. –

相關問題