2016-07-30 119 views
1

在學習如何將Google Compute Engine與Google雲端存儲配合使用時,我遇到了ACL問題。從我自己的電腦上,使用我自己的SSH憑據,我可以用我的存儲桶做任何我想做的事情。但是當我使用基於Web的SSH客戶端登錄我的計算實例時,我只能從存儲桶中讀取數據。將數據複製回存儲桶會得到'AccessDeniedException:403權限不足'錯誤。 (我做的所有的gsutil這些複製的實驗。)如何使用谷歌雲存儲調試訪問控制問題?

這是沒有意義的我。唯一的一個服務帳戶授予了項目編輯器角色,並且我確認存儲區ACL列表可讓所有者訪問項目編輯器角色和服務帳戶。我也嘗試更改服務帳戶以在存儲桶上擁有「WRITE」權限而不是「OWNER」,但這沒有幫助。最後,我在本地機器上完成所有這些工作時,將下載的ssh密鑰用於相同的默認服務帳戶,所以我不明白它爲什麼會改變。問題的

的是,我不能看到那裏的橡膠符合道路 - 我得到的是一個403,沒有更多的信息。我看不到gsutil在做什麼(事實上,我甚至不知道gsutil如何獲得它的憑據,因爲當你通過控制檯ssh時,所有這些都是自動完成的 - 我只是假設它記錄在服務帳戶下)。

我明明想解決這個迫在眉睫的問題,但我也很感激任何提示就如何爲他們拿出在未來調試這些問題。

回答

1

我相信你碰到的一個很常見的問題,但我可能是錯的,所以我將概述什麼從頂部需要之前我解釋。

默認情況下,計算引擎上的gsutil不使用您的個人用戶憑證。相反,它將自動獲取憑證以充當爲該VM配置的服務帳戶(通常是Compute Engine默認服務帳戶)。

該服務帳戶將需要兩件事情,以寫GCS:1)從GCS權限寫入特定的位置,和2)範圍寫入GCS。

這聽起來像你已經設置了服務帳戶作爲一個項目編輯器,連上了有問題的水桶的主人,所以你照顧項目1.然而,在默認情況下,僅GCE授予您實例用於訪問存儲的只讀範圍。這很可能是爲什麼讀取爲你工作,但寫道不是。

解決這個問題有點煩人,因爲範圍無法在運行實例上編輯。因此,您需要創建一個新的GCE實例,並且在這樣做時,確保您明確指定了一個範圍。如果您使用的是用戶界面,請選擇「允許完全訪問所有云API」,或者選擇「爲每個API設置訪問權限」,並確保爲存儲選擇「讀寫」或「全部」。

有關如何在Google網站上執行此操作的更好說明:https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#using

+0

感謝布蘭登。 GCE實例的範圍不正確是問題所在。我必須說,無論我重讀了多少文檔,我都無法將自己的頭埋在這個安全模型中。我認爲引發我的一點是,安全性通常是(1)是否允許(2)(3)身份資源。但是這個模型也有(4)「範圍」,它們類似於(1)和(3),並非特定於任何給定的資源,但通常應用於從GCE實例訪問的任何資源。這是正確的心智模式嗎? –

+0

正確。範圍背後的想法是,您可能希望授予應用程序權限以充當您,但您不想授予他們所有的能力。想象一下,如果你想使用一些第三方的GCS瀏覽器。您可能希望授予其權限以充當您使用GCS的目的,但這並不意味着您希望它啓動GCE實例或閱讀您的電子郵件。這只是限制和控制訪問的另一種方式。 –