如何从 Google Cloud Storage 存储桶获取项目名称/ID?

nwl*_*wly 14 google-cloud-platform

我获得了一个 Google Cloud Storage 存储桶地址 ( gs://some_bucket_name),我已被授予读取访问权限。该存储桶属于另一个项目。有什么办法可以查到bucket所属的项目名称或id吗?

MBH*_*nix 9

您可以使用 Storage JSON API获取存储桶项目编号。更具体地说,您可以请求GET https://storage.googleapis.com/storage/v1/b/<BUCKET_NAME>. 有关更多详细信息并测试此请求,请查看此文档: https: //cloud.google.com/storage/docs/json_api/v1/buckets/get

获得项目编号后,您可以使用资源管理器 APIgcloud获取项目 ID 和/或名称

以下是获取存储桶的project_id和名称的完整示例:

authorization flow
# the user <ACCOUNT> must have these permission 
# storage.buckets.get
# resourcemanager.projects.get on the bucket project 
gcloud auth login <ACCOUNT>

BUCKET_NAME=<BUCKET_NAME>

ACCESS_TOKEN=$(gcloud auth print-access-token)

PROJECT_NUMBER=$(curl -s -H "Authorization: Bearer ${ACCESS_TOKEN}" https://storage.googleapis.com/storage/v1/b/${BUCKET_NAME} | jq -r .projectNumber)

gcloud projects list --filter="PROJECT_NUMBER=${PROJECT_NUMBER}" --format="value(PROJECT_ID, NAME)"

Run Code Online (Sandbox Code Playgroud)

  • 此答案仅适用于旧版 API,不适用于具有统一对象访问权限的存储桶(现在是默认值)。 (2认同)

LEC*_*LEC 8

我今天结合使用了从终端中的 gcloud 或Cloud Shell运行的两个命令来完成此操作

  1. gcloud storage buckets describe gs://<your-bucket> | grep projectNumber- 这将返回项目编号
  2. gcloud projects describe <projectNumber>- 这将返回有关项目的信息,包括项目名称和 ID。


Daz*_*kin 5

这是个好问题。

存储桶没有明显的项目范围,并且它们的全局唯一名称不会作为包含项目标识符的层次结构的一部分呈现。

然而... acls 可能是一个不错的选择...我不确定这个确定,请检查:

gsutil acl get gs://[[BUCKET-NAME]]
Run Code Online (Sandbox Code Playgroud)

从而产生projectNumber

[
  {
    "entity": "project-owners-123456789012",
    "projectTeam": {
      "projectNumber": "123456789012",
      "team": "owners"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-editors-123456789012",
    "projectTeam": {
      "projectNumber": "123456789012",
      "team": "editors"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-viewers-123456789012",
    "projectTeam": {
      "projectNumber": "123456789012",
      "team": "viewers"
    },
    "role": "READER"
  }
]
Run Code Online (Sandbox Code Playgroud)

  • 此答案仅适用于旧版 API,不适用于具有统一对象访问权限的存储桶(现在是默认值)。 (5认同)
  • 如果原始的“READER”已被授予,这是一个很好的答案。但是,IAM 角色 `role/viewer`、`roles/storage.legacyObjectReader` 和 `roles/storage.objectViewer` 不授予对 ACL 的访问权限。答案取决于授予用户的确切权限。 (4认同)
  • `gsutil ls -L -b gs://[[BUCKET-NAME]]` 并且您也可以使用 API Explorer:https://developers.google.com/apis-explorer/#search/storage.buckets.get/ m/storage/v1/storage.buckets.get?bucket=[[存储桶名称]]` (2认同)