我在玩谷歌bucket。水桶不是公共的。这些文件也不是公开的。
在我上传.csv文件之后。我点击它,它在谷歌chrome浏览器中显示了一个复杂的url链接。
现在,如果我使用该链接并在另一个浏览器中打开,如IE,其中没有谷歌帐户登录。我可以获取数据。这是一个缺陷吗?谷歌团队表示,这是权限问题。我尝试删除所有权限,但该文件仍然可以访问。你的水桶也有同样的问题吗。
以下假设bucket名称为xtest
,对象名称为test.txt
。
这个长而复杂的URL包含一个签名,该签名提供访问对象的权限。
如果URL看起来非常复杂,并且不是这样的,那么它可能有一个签名作为URL的一部分。
http://xtest.storage.googleapis.com/test.txt
或
http://storage.googleapis.com/xtest/test.txt
如果URL不包含允许任何人访问bucket对象的签名,那么接下来的步骤是确定应用了哪些允许匿名访问的权限。
弄清楚对bucket和对象应用了哪些权限
我更喜欢使用CLIgsutil
,这样我就有了描述所有权限的精确JSON。
有两种方法可以授予对存储桶和对象的访问权限。Bucket ACL和Bucket IAM策略。
第1部分-Bucket ACL
获取Bucket ACL
gsutil acl get gs://xtest
这将返回一个JSON响应。如果bucket acl包含以下任何一个条目,则您的bucket将被公开。
[
{
"entity": "allUsers",
"role": "READER"
},
{
"entity": "allAuthenticatedUsers",
"role": "READER"
}
]
删除公共权限
allUsers
实体允许任何人拥有role
指定的权限。allAuthenticatedUsers
实体允许任何拥有谷歌帐户的人拥有role
指定的权限。
此命令将从bucket ACL中删除allUsers
。
gsutil acl ch -d allUsers gs:/xtest
此命令将从bucket 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部分-Bucket IAM政策
获取Bucket IAM策略
gsutil iam get gs://xtest
这将返回一个JSON响应。如果bucket IAM策略包含以下任何一个条目,则会暴露您的bucket。
{
"bindings": [
{
"members": [
"allUsers"
],
"role": "roles/storage.legacyBucketReader"
},
{
"members": [
"allAuthenticatedUsers"
],
"role": "roles/storage.objectViewer"
}
],
"etag": "CBM="
}
删除公共权限
allUsers实体允许任何人拥有角色指定的权限。allAuthenticatedUsers实体允许拥有Google帐户的任何人拥有角色指定的权限。
此命令将从bucket IAM策略中删除allUsers。
gsutil iam ch -d allUsers gs://xtest
此命令将从bucket 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