对如何操作 GCS bucket/object 权限感到困惑

对如何操作 GCS bucket/object 权限感到困惑

在我的笔记本电脑上,有一个目录,其中包含一个子目录,而子目录又包含一堆 HTML 文件。它看起来像这样:

% ls -lR 2000-09
2000-09:
total 12
drwxrwxr-x 2 skip skip 12288 Nov 18 07:42 html

2000-09/html:
total 648
-rw-r--r-- 1 skip skip 18489 Dec  4  2019 index.html
-rw-r--r-- 1 skip skip 18489 Dec  4  2019 maillist.html
-rw-r--r-- 1 skip skip  3468 Dec  4  2019 msg00000.html
-rw-r--r-- 1 skip skip  3270 Dec  4  2019 msg00001.html
-rw-r--r-- 1 skip skip  3194 Dec  4  2019 msg00002.html
...

我使用 gsutil 将该目录上传到我的存储桶:

% gsutil -m cp -r 2000-09 gs://my-secret-bucket/
Copying file://2000-09/html/msg00070.html [Content-Type=text/html]...
Copying file://2000-09/html/msg00060.html [Content-Type=text/html]...           
Copying file://2000-09/html/msg00029.html [Content-Type=text/html]...           
Copying file://2000-09/html/msg00052.html [Content-Type=text/html]...           
...

通过控制台看起来不错。我看到了2000-09,里面有html,里面有一堆文件。到目前为止,一切顺利。

现在我打开一个云外壳并使用以下命令挂载该存储桶gcsfuse

gcsfuse my-secret-bucket ~/mnt

但结果目录视图显示为空:

me@cloudshell:~ (whatever)$ ls -l ~/mnt
total 0
me@cloudshell:~ (whatever)$

然后我将几个文件直接上传到我的存储桶中(在顶层)

% gsutil -m cp wrench?.jpg gs://my-secret-bucket/
Copying file://wrench1.jpg [Content-Type=image/jpeg]...
Copying file://wrench2.jpg [Content-Type=image/jpeg]...                         
/ [2/2 files][  1.0 MiB/  1.0 MiB] 100% Done                                    
Operation completed over 2 objects/1.0 MiB.

我确认它们在控制台中,然后再次列出我已安装的存储桶。它们是可见的,我可以读取它们:

$ ls -l ~/mnt
total 1049
-rw-r--r-- 1 me me 432451 Nov 18 19:09 wrench1.jpg
-rw-r--r-- 1 me me 640526 Nov 18 19:09 wrench2.jpg
me@cloudshell:~ (whatever) cksum mnt/wrench1.jpg
3659533210 432451 mnt/wrench1.jpg
me@cloudshell:~ (whatever)$

似乎文件在顶层是可见的,但我不知道如何使目录及其内容可见。对于像我这样的老 Unix 用户来说,Web 界面非常令人困惑,我希望能像rw-r--r--查看长列表时那样看到内容,并chmod 0644 ...在看起来不正确时执行操作以使其可见。如何使我的 2000-09 对象/文件夹/目录及其(递归)全部内容可见?最终,我希望它对 GCP 托管的 Flask Web 应用程序可见(也归我所有,因此不一定公开可见)。

答案1

根据这个相关主题默认情况下,gcsfuse可能不会显示未直接创建的目录。我尝试执行您描述的确切步骤,但我的目录在挂载的文件夹中不可见(顶层文件确实正确显示)。相同的答案解释了使用标志--implicit-dirs会改变此行为以显示目录。我使用该标志创建了另一个挂载,文件夹在 Cloud Shell 中可见:

gcsfuse --implicit-dirs BUCKET_NAME ~/mountedDir

为了将存储桶安装到目录中,我使用了gcsfuse 文档,详细介绍了安装程序。重要的是要检查可能的副作用使用此标志,例如额外的 API 调用。

答案2

我通过随后使用 mkdir 命令创建目录结构解决了此问题,例如:

使用 gsutil 命令 (gsutil rsync -r /test/gs:bucket/) 将测试目录及其内容复制到存储桶:

/测试/文本0.txt /测试/文本1.txt

使用安装了存储桶的虚拟机,我使用命令 mkdir /mountedbucketdir/test 重新创建了目录

这样,所有文件都会立即可见,而无需使用 --implicit-dirs 并处理其问题。重新创建目录结构很不方便,但这可以让你摆脱 GCP 的操作和延迟负担。

相关内容