在最初为实例配置错误的范围后恢复访问
Recovering access after initially provisioning wrong scopes for an instance
我最近创建了一个 VM,但错误地授予了默认服务帐户 Storage: Read Only
权限,而不是 "Identity & API access" 下的预期 Read Write
权限,因此来自 VM 的 GCS 写入操作现在失败.
我意识到我的错误,所以按照 中的建议,我停止了 VM,将范围更改为 Read Write
并启动了 VM。但是,当我 SSH 登录时,我在尝试创建存储桶时仍然遇到 403 错误。
$ gsutil mb gs://some-random-bucket
Creating gs://some-random-bucket/...
AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation.
Acceptable scopes: https://www.googleapis.com/auth/cloud-platform
我该如何解决这个问题?我使用的是默认服务帐户,没有 IAM 权限,无法创建新帐户。
$ gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* (projectnum)-compute@developer.gserviceaccount.com
尝试使用您的用户帐户创建 Google Cloud Storage 存储桶。
键入 gcloud auth login
并访问系统提供的 link,然后复制代码并将其粘贴到命令行中。
然后gsutil mb gs://bucket-name
.
安全模型有两个作用,API 范围和 IAM 权限。访问由它们的 AND 决定。因此,您需要一个可接受的范围和足够的 IAM 权限才能执行任何操作。
- API 范围绑定到凭据。它们由 URL 表示,例如 https://www.googleapis.com/auth/cloud-platform。
- IAM 权限与身份绑定。这些设置在 Cloud Console 的 IAM & admin > IAM 部分。
这意味着您可以使用默认服务帐户拥有 2 个 VM,但它们具有不同级别的访问权限。
为简单起见,您通常只想设置 IAM 权限并使用云平台 API 身份验证范围。
要检查您是否有此设置,请转到云控制台中的虚拟机,您会看到类似以下内容:
Cloud API access scopes
Allow full access to all Cloud APIs
默认情况下,当您通过 SSH 连接到 VM 时,gcloud 将作为 VM 上的服务帐户登录。我不鼓励以您自己的身份登录,否则您或多或少会破坏 gcloud 的配置以读取默认服务帐户。
完成此设置后,您应该能够正确使用 gsutil。
我建议您尝试通过 运行 下面的 gcloud 命令将范围 "cloud-platform" 添加到实例
gcloud alpha compute instances set-scopes INSTANCE_NAME [--zone=ZONE]
[--scopes=[SCOPE,…] [--service-account=SERVICE_ACCOUNT
作为范围放置“https://www.googleapis.com/auth/cloud-platform”,因为它提供对所有 Google 云平台资源的完全访问权限。
我最近创建了一个 VM,但错误地授予了默认服务帐户 Storage: Read Only
权限,而不是 "Identity & API access" 下的预期 Read Write
权限,因此来自 VM 的 GCS 写入操作现在失败.
我意识到我的错误,所以按照 Read Write
并启动了 VM。但是,当我 SSH 登录时,我在尝试创建存储桶时仍然遇到 403 错误。
$ gsutil mb gs://some-random-bucket
Creating gs://some-random-bucket/...
AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation.
Acceptable scopes: https://www.googleapis.com/auth/cloud-platform
我该如何解决这个问题?我使用的是默认服务帐户,没有 IAM 权限,无法创建新帐户。
$ gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* (projectnum)-compute@developer.gserviceaccount.com
尝试使用您的用户帐户创建 Google Cloud Storage 存储桶。
键入 gcloud auth login
并访问系统提供的 link,然后复制代码并将其粘贴到命令行中。
然后gsutil mb gs://bucket-name
.
安全模型有两个作用,API 范围和 IAM 权限。访问由它们的 AND 决定。因此,您需要一个可接受的范围和足够的 IAM 权限才能执行任何操作。
- API 范围绑定到凭据。它们由 URL 表示,例如 https://www.googleapis.com/auth/cloud-platform。
- IAM 权限与身份绑定。这些设置在 Cloud Console 的 IAM & admin > IAM 部分。
这意味着您可以使用默认服务帐户拥有 2 个 VM,但它们具有不同级别的访问权限。
为简单起见,您通常只想设置 IAM 权限并使用云平台 API 身份验证范围。
要检查您是否有此设置,请转到云控制台中的虚拟机,您会看到类似以下内容:
Cloud API access scopes
Allow full access to all Cloud APIs
默认情况下,当您通过 SSH 连接到 VM 时,gcloud 将作为 VM 上的服务帐户登录。我不鼓励以您自己的身份登录,否则您或多或少会破坏 gcloud 的配置以读取默认服务帐户。
完成此设置后,您应该能够正确使用 gsutil。
我建议您尝试通过 运行 下面的 gcloud 命令将范围 "cloud-platform" 添加到实例
gcloud alpha compute instances set-scopes INSTANCE_NAME [--zone=ZONE] [--scopes=[SCOPE,…] [--service-account=SERVICE_ACCOUNT
作为范围放置“https://www.googleapis.com/auth/cloud-platform”,因为它提供对所有 Google 云平台资源的完全访问权限。