如何调试 google 云存储的访问控制问题?
How does one debug access control problems with google cloud storage?
在学习如何将 Google 计算引擎与 Google 云存储结合使用时,我 运行 遇到了 ACL 问题。在我自己的计算机上,使用我自己的 SSH 凭据,我可以对我的存储桶做任何我想做的事。但是当我使用基于 Web 的 SSH 客户端登录到我的计算实例时,我只能从存储桶中读取。将数据复制回存储桶让我遇到 'AccessDeniedException: 403 Insufficient Permission' 错误。 (我正在使用 gsutil 进行所有这些复制实验。)
这对我来说毫无意义。唯一的服务帐户被授予项目编辑角色,我确认存储桶 ACL 列表授予所有者对项目编辑角色和服务帐户的访问权限。我还尝试将服务帐户更改为对存储桶具有 "WRITE" 权限而不是 "OWNER" 权限,但这无济于事。最后,在我的本地计算机上执行所有这些操作时,我使用的是相同默认服务帐户的下载 ssh 密钥,所以我不明白为什么它会发生变化。
部分问题是我看不到橡胶与道路的交汇处——我得到的只是一条没有更多信息的 403。我看不到 gsutil 在做什么(事实上,我什至不确定 gsutil 如何获取其凭据,因为当您通过控制台 ssh 时,这一切都是自动完成的——我只是假设它在服务帐户下登录).
很明显,我很想解决这个紧迫的问题,但我也很感激任何有关如何在将来出现这些问题时进行调试的提示。
我相信你 运行 遇到了一个很常见的问题,但我可能是错的,所以我会在解释之前从顶部概述需要什么。
默认情况下,计算引擎上的 gsutil 不使用您的个人用户凭据。相反,它将自动获取凭据以充当为该 VM 配置的服务帐户(通常是 Compute Engine 默认服务帐户)。
该服务帐户需要两件事才能写入 GCS:1.) GCS 允许写入该特定位置,以及 2.) 写入 GCS 的范围。
听起来您已将服务帐户设置为项目编辑器,甚至使其成为相关存储桶的所有者,因此您已经处理了第 1 项。但是,默认情况下,GCE 仅授予您的实例是一个用于访问存储的只读范围。这很可能就是为什么读取对您有用,而写入却不行。
解决这个问题有点烦人,因为无法在 运行ning 个实例上编辑范围。因此,您需要创建一个新的 GCE 实例,并且在这样做时,请确保您明确指定了一个范围。如果您使用 UI,请选择 "Allow full access to all Cloud APIs",或选择 "set access for each API",并确保为存储选择 "Read Write" 或 "Full"。
在 Google 的网站上有更好的操作说明:https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#using
在学习如何将 Google 计算引擎与 Google 云存储结合使用时,我 运行 遇到了 ACL 问题。在我自己的计算机上,使用我自己的 SSH 凭据,我可以对我的存储桶做任何我想做的事。但是当我使用基于 Web 的 SSH 客户端登录到我的计算实例时,我只能从存储桶中读取。将数据复制回存储桶让我遇到 'AccessDeniedException: 403 Insufficient Permission' 错误。 (我正在使用 gsutil 进行所有这些复制实验。)
这对我来说毫无意义。唯一的服务帐户被授予项目编辑角色,我确认存储桶 ACL 列表授予所有者对项目编辑角色和服务帐户的访问权限。我还尝试将服务帐户更改为对存储桶具有 "WRITE" 权限而不是 "OWNER" 权限,但这无济于事。最后,在我的本地计算机上执行所有这些操作时,我使用的是相同默认服务帐户的下载 ssh 密钥,所以我不明白为什么它会发生变化。
部分问题是我看不到橡胶与道路的交汇处——我得到的只是一条没有更多信息的 403。我看不到 gsutil 在做什么(事实上,我什至不确定 gsutil 如何获取其凭据,因为当您通过控制台 ssh 时,这一切都是自动完成的——我只是假设它在服务帐户下登录).
很明显,我很想解决这个紧迫的问题,但我也很感激任何有关如何在将来出现这些问题时进行调试的提示。
我相信你 运行 遇到了一个很常见的问题,但我可能是错的,所以我会在解释之前从顶部概述需要什么。
默认情况下,计算引擎上的 gsutil 不使用您的个人用户凭据。相反,它将自动获取凭据以充当为该 VM 配置的服务帐户(通常是 Compute Engine 默认服务帐户)。
该服务帐户需要两件事才能写入 GCS:1.) GCS 允许写入该特定位置,以及 2.) 写入 GCS 的范围。
听起来您已将服务帐户设置为项目编辑器,甚至使其成为相关存储桶的所有者,因此您已经处理了第 1 项。但是,默认情况下,GCE 仅授予您的实例是一个用于访问存储的只读范围。这很可能就是为什么读取对您有用,而写入却不行。
解决这个问题有点烦人,因为无法在 运行ning 个实例上编辑范围。因此,您需要创建一个新的 GCE 实例,并且在这样做时,请确保您明确指定了一个范围。如果您使用 UI,请选择 "Allow full access to all Cloud APIs",或选择 "set access for each API",并确保为存储选择 "Read Write" 或 "Full"。
在 Google 的网站上有更好的操作说明:https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#using