我在和Google bucket玩耍。该存储桶不是公开的。这些文件也不公开。
上传.csv文件后。我单击它,它在谷歌浏览器的浏览器中显示带有复杂的URL链接的文件。
现在,如果我采用该链接并在没有google帐户登录的IE之类的其他浏览器中打开。我可以获取数据。这是缺陷吗? Google小组说这是权限问题。我尝试通过删除所有权限来尝试该操作,但该文件仍可访问。您是否在使用存储桶时遇到同样的问题?
答案 0 :(得分:1)
以下内容假设存储桶名称为xtest
,对象名称为test.txt
。
这个冗长而复杂的URL包含一个签名,该签名提供了访问对象的权限。
如果该URL看起来非常复杂并且看起来不是这样,则它可能具有签名作为URL的一部分。
http://xtest.storage.googleapis.com/test.txt
OR
http://storage.googleapis.com/xtest/test.txt
如果URL不包含允许任何人访问存储桶对象的签名,则下一步是确定已应用了哪些权限以允许匿名访问。
弄清楚对存储桶和对象应用了哪些权限。
我更喜欢使用CLI gsutil
,以便使用精确的JSON描述所有权限。
有两种方法可以授予对存储桶和对象的访问权限。值区ACL和值区IAM策略。
PART 1-存储段ACL
获取存储桶ACL。
gsutil acl get gs://xtest
这将返回JSON响应。如果存储桶acl包含以下任一条目,则您的存储桶已暴露。
[
{
"entity": "allUsers",
"role": "READER"
},
{
"entity": "allAuthenticatedUsers",
"role": "READER"
}
]
删除公共权限。
allUsers
实体允许任何人使用role
指定的权限。
allAuthenticatedUsers
实体允许拥有Google帐户的任何人获得role
指定的权限。
此命令将从存储桶ACL中删除allUsers
。
gsutil acl ch -d allUsers gs:/xtest
此命令将从存储桶ACL中删除allAuthenticatedUsers
。
gsutil acl ch -d allAuthenticatedUsers gs:/xtest
更改存储桶或文件上的ACL时,大约需要一分钟时间才能生效。
重复该对象的过程:
gsutil acl get gs://xtest/test.txt
使用类似的命令删除所有公共ACL:
gsutil acl ch -d allUsers gs://xtest/test.txt
gsutil acl ch -d allAuthenticatedUsers gs://xtest/test.txt
重复验证是否已删除公共ACL。
gsutil acl get gs://xtest
gsutil acl get gs://xtest/test.txt
第2部分-存储区IAM策略
获取存储区IAM策略。
gsutil iam get gs://xtest
这将返回JSON响应。如果存储区IAM策略包含以下任一条目,则显示您的存储区。
{
"bindings": [
{
"members": [
"allUsers"
],
"role": "roles/storage.legacyBucketReader"
},
{
"members": [
"allAuthenticatedUsers"
],
"role": "roles/storage.objectViewer"
}
],
"etag": "CBM="
}
删除公共权限。
allUsers实体允许任何人按角色指定权限。 allAuthenticatedUsers实体允许具有Google帐户的任何人按角色指定的权限。
此命令将从存储区IAM策略中删除所有用户。
gsutil iam ch -d allUsers gs://xtest
此命令将从存储区IAM策略中删除所有AuthenticatedUsers。
gsutil iam ch -d allAuthenticatedUsers gs://xtest
重复该对象的过程:
gsutil iam get gs://xtest/test.txt
使用类似的命令来删除所有公共对象IAM策略:
gsutil iam ch -d allUsers gs://xtest/test.txt
gsutil iam ch -d allAuthenticatedUsers gs://xtest/test.txt
重复验证是否已删除公共IAM策略。
gsutil iam get gs://xtest
gsutil iam get gs://xtest/test.txt