[英]Accessing files in the Google Cloud Storage from two different google cloud projects
考慮以下情況:
我有一個帶有以下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.