#google-cloud-platform
#google-облачная платформа
Вопрос:
Мне предоставляется адрес корзины облачного хранилища Google ( gs://some_bucket_name
), к которому мне уже предоставлен доступ на чтение. Корзина принадлежит другому проекту. Есть ли какой-либо способ узнать, к какому имени проекта или идентификатору относится корзина?
Комментарии:
1. какой тип доступа у вас есть (учетная запись службы, IAM, общедоступное чтение)?
Ответ №1:
Вы можете получить номер проекта в корзине, используя Storage JSON API. Более конкретно, вы можете запросить GET https://storage.googleapis.com/storage/v1/b/<BUCKET_NAME>
. Для получения более подробной информации и проверки этого запроса ознакомьтесь с этим документом: https://cloud.google.com/storage/docs/json_api/v1/buckets/get
Как только вы получите номер проекта, вы можете получить project_id и / или имя, используя либо gcloud
, либо API-интерфейс resource manager
Вот полный пример получения 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)"
Комментарии:
1. Этот ответ работает только для устаревшего API, а не для групп с единообразным доступом к объектам, который сейчас используется по умолчанию.
Ответ №2:
Хороший вопрос.
Корзины не имеют очевидной области видимости для проектов, и их глобально уникальные имена не представлены как часть иерархии, которая включает идентификаторы проектов.
Однако… acl могут быть хорошим выбором… Я не уверен, что это окончательно, пожалуйста, проверьте:
gsutil acl get gs://[[BUCKET-NAME]]
Что приводит к 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"
}
]
Комментарии:
1.
gsutil ls -L -b gs://[[BUCKET-NAME]]
и вы также можете использовать APIs Explorer: developers.google.com/apis-explorer/#search/storage.buckets.get / … `2. Это хороший ответ при условии, что был предоставлен примитив
READER
. Однако роли IAMrole/viewer
,roles/storage.legacyObjectReader
иroles/storage.objectViewer
не предоставляют доступ к спискам управления доступом. Ответ зависит от точных разрешений, которые предоставлены пользователю.3. Этот ответ работает только для устаревшего API, а не для групп с единообразным доступом к объектам, который сейчас используется по умолчанию.
Ответ №3:
Я сделал это сегодня с помощью комбинации двух команд, выполняемых из gcloud в вашем терминале или из облачной оболочки
gcloud storage buckets describe gs://<your-bucket> | grep projectNumber
— это возвращает номер проектаgcloud projects describe <projectNumber>
— это возвращает информацию о проекте, которая включает в себя как название проекта, так и идентификатор.
Ответ №4:
поиск активов gcloud по всем ресурсам работает лучше всего для меня.
Важно определить область поиска, в противном случае выполняется поиск только по активному проекту.
gcloud asset search-all-resources --scope folders/<number> --asset-types=storage.googleapis.com/bucket --filter='name:some_bucket_name'