簡體   English   中英

從兩個不同的Google雲項目訪問Google雲端存儲中的文件

[英]Accessing files in the Google Cloud Storage from two different google cloud projects

考慮以下情況:

  • 我有兩個AppEngine項目:A和B.
  • 我有一個帶有以下ACL的雲存儲桶:

     <?xml version="1.0" ?> <AccessControlList> <Owner> <ID>id-of-the-user-who-created-the-bucket</ID> </Owner> <Entries> <Entry> <Scope type="UserByEmail"> <EmailAddress>app-A-service-account-name</EmailAddress> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="UserByEmail"> <EmailAddress>app-B-service-account-name</EmailAddress> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> </Entries> </AccessControlList> 
  • 我的GAE應用程序是用Python編寫的,他們使用的是GCS Client Library

現在,這就是我想要實現的目標 :我希望應用程序A在存儲桶中創建文件,然后應用程序B來讀取它們。

起初我嘗試使用cloudstorage.open(file_name, 'w')創建一個文件,然后使用cloudstorage.stat(file_name, 'r')讀取其狀態,但這樣我在閱讀時最終會出現以下錯誤:

ForbiddenError at /.../
Expect status [200] from Google Storage. But got status 403.

(錯誤消息還提供請求/響應信息:路徑,標題,正文和額外信息。如果您認為它們可能有助於解決此案例,請告訴我)

然后我在創建文件時通過設置x-googl-acl選項開始嘗試ACL,例如:

cloudstorage.open(file_name, 'w', options={'x-goog-acl': 'authenticated-read'})

盡管ACL按預期工作,但可用的選項似乎都不符合我的要求:

  • private - 只有存儲桶擁有者具有訪問權限,B無法讀取
  • 匿名用戶可以訪問public-read -file,這是不可接受的
  • public-read-write - 與上面相同
  • authenticated-read - 具有經過身份驗證的帳戶的每個人都能夠閱讀(即使是不屬於該項目的人),因此它與之前的選項沒有區別
  • bucket-owner-read - 似乎很完美,但事實證明“存儲桶擁有者”不是通過雲控制台設置為“所有者”的用戶,而是創建存儲桶的用戶
  • bucket-owner-full-control - 與上面相同

看起來我沒有選擇,但我無法相信雲存儲無法實現這么簡單的事情。 我想到的唯一解決方案是改變系統的架構,但我想避免它。 還有其他建議嗎?

將訪問者服務帳戶(例如app1@appspot.gserviceaccount.com或1234567890-compute@developer.gserviceaccount.com用於計算引擎)添加為具有要使用的GCS存儲桶的項目的“編輯者”權限的成員。 這可以在擁有該存儲桶的項目的IAM頁面中完成: https//console.developers.google.com/iam-admin/iam/project? project =app1

暫無
暫無

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

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