尽管我是所有者,但无法以所有者身份访问资源

Posted

技术标签:

【中文标题】尽管我是所有者,但无法以所有者身份访问资源【英文标题】:Can't access resource as OWNER despite the fact I'm the owner 【发布时间】:2015-01-26 06:17:07 【问题描述】:

我正在尝试对存储桶和资源执行操作,但我不断收到拒绝访问错误

例如

```

$ gsutil ls -L gs://images/large

gs://images/large/aa.png:
   Creation time:       Tue, 25 Nov 2014 20:03:19 GMT
   Cache-Control:       public, max-age=2592000
   Content-Length:      343034
   Content-Type:        image/png
   Generation:      1416945799570000
   Metageneration:      2
   ACL:     ACCESS DENIED. Note: you need OWNER permission
            on the object to read its ACL.

```

当我尝试运行 acl 操作或覆盖文件时也是如此。

【问题讨论】:

对象是怎么写的?存储桶上是否设置了默认的对象 ACL?您可以通过gsutil defacl get gs://bucketname 查询 【参考方案1】:

首先,我想提一下,作为存储桶所有者意味着您始终可以删除存储在该存储桶中的对象,但如果默认 ACL 被覆盖,您可能没有对象所有者权限。这与存在超级用户概念的流行操作系统的工作方式不同。

您是否尝试使用 APIs & auth -> Credentials 开发人员控制台中列出的项目中的现有 service accounts 运行该命令?

如果您仍然收到该错误,则该对象可能是通过 App Engine 上传的。您可以使用以下代码在Python 中创建 App Engine 应用程序 lists the object ACLs using the JSON API,因为 App Engine 有自己的服务帐户 (<project ID>@appspot.gserviceaccount.com),它与 ​​Developers Console 中显示的不同。

#!/usr/bin/env python                                                                                                                     
import webapp2
from google.appengine.api import app_identity
from google.appengine.api import urlfetch


class MainPage(webapp2.RequestHandler):
    def get(self):
        scope = "https://www.googleapis.com/auth/devstorage.full_control"
        authorization_token, _ = app_identity.get_access_token(scope)
        acls = urlfetch.fetch(
            "https://www.googleapis.com/storage/v1/b/<bucket>/o/<object/acl",
            method=urlfetch.GET,
            headers = "Content-Type": "application/json", "Authorization": "OAuth " + authorization_token)
        self.response.headers['Content-Type'] = 'application/json'
        self.response.write(acls.content)

application = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

【讨论】:

以上是关于尽管我是所有者,但无法以所有者身份访问资源的主要内容,如果未能解决你的问题,请参考以下文章

身份服务器刷新令牌资源所有者密码凭证流

无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证

尽管 Google 帐户是所有者,但来自 Google 身份验证 Web api 的“错误 403:access_denied”

尽管我使用了有效的令牌,但 Laravel Passport 得到未经身份验证的响应

控制台应用程序无法以域管理员身份读取基于访问的枚举的完整目录列表

OAuth 授权与身份验证