Как мне перечислить всех пользователей IAM для моего Google Cloud Project

Я хотел бы иметь возможность перечислять всех пользователей и учетные записи служб, связанные с моими проектами (желательно с gcloud Инструмент CLI, но с удовольствием сделаю вызов API, если потребуется).

Я могу легко перечислить все учетные записи служб, связанные с проектом, используя это, но как можно также перечислить всех пользователей? Я бы ожидал что-то вроде следующего, но я не вижу ничего в документе:

gcloud beta iam users list

7 ответов

Список всех учетных записей служб в проекте

Следующая команда выводит список всех учетных записей служб, связанных с проектом:

$ gcloud iam service-accounts list

NAME                                    EMAIL
Compute Engine default service account  12345678-compute@developer.gserviceaccount.com
dummy-sa-1                              dummy-sa-1@MY_PROJECT.iam.gserviceaccount.com

Перечислите все учетные записи пользователей и служб в проекте с их ролями IAM

Если вы хотите перечислить всех пользователей / учетных записей служб, которым предоставлены роли IAM в указанном проекте, вы можете использовать эту команду:

$ gcloud projects get-iam-policy MY_PROJECT

bindings:
- members:
  - serviceAccount:12345678-compute@developer.gserviceaccount.com
  - user:alice@foobar.com
  role: roles/editor
- members:
  - user:you@yourdomain.com
  - user:someoneelse@yourdomain.com
  role: roles/owner
etag: ARBITRARY_ETAG_HERE
version: 1

Форматирование вывода

gcloud поддерживает форматирование вывода как json и множество других настроек по мере необходимости, которые в некоторых случаях проще анализировать или распечатывать только ту информацию, которая вам нужна.

Примеры:

# Prints the output as json instead of the default yaml format
$ gcloud projects get-iam-policy MY_PROJECT --format=json

# Display just the bindings in json format
$ gcloud projects get-iam-policy MY_PROJECT --format='json(bindings)'

# Display the bindings in a flattened format
$ $ gcloud projects get-iam-policy MY_PROJECT --format='flattened(bindings)'

список учетных записей служб

$ gcloud iam service-accounts list

список участников ролей для проекта

$ gcloud projects get-iam-policy [project]

добавить / повлиять на пользователя на роль

$ gcloud projects add-iam-policy-binding [project] \
--member="user:name@gmail.com" \
--role="roles/iam.serviceAccountUser" 

Удалить пользователя:

$ gcloud projects remove-iam-policy-binding [project] \
--member="user:name@gmail.com" \
--role="roles/iam.serviceAccountUser"

добавить / изменить группу google к роли

$ gcloud projects add-iam-policy-binding [project] \
--member="group:my_group@googlegroups.com" \
--role="roles/storage.admin"

Следующая команда может дать четкое представление о ЧЛЕНАХ вашего проекта в учетной записи GCP:gcloud projects get-iam-policy PROJECT_ID --flatten="bindings[].members" --format="table(bindings.members)"

Вы можете использовать search-all-iam-policies для вывода списка всех политик IAM для проекта / папки / организации и поиска пользователей:

$ gcloud beta asset search-all-iam-policies --scope=projects/123 | grep user:

Это покажет вам не только пользователей, которым предоставлены роли в самом проекте, но и пользователей, которым предоставлены роли в субресурсах, таких как вычислительные экземпляры или наборы данных bigquery.

Вы можете изменить область действия на организации /123 для поиска по всей организации, если у вас есть cloudasset.assets.searchAllIamPolicies разрешение на объем.

Более подробная информация в другом сообщении: Как перечислить, найти или выполнить поиск политик iam по сервисам (API), типам ресурсов и проектам на облачной платформе Google (GCP)?

Следующая команда выведет список всех не обслуживающих учетных записей из всей организации GCP:

gcloud organizations get-iam-policy ORGANIZATION_ID | grep user\: | sort | uniq

Получить идентификатор организации

gcloud organizations list

К сожалению, нет возможности перечислить всех пользователей, использующих

      gcloud iam . . .

дерево команд; однако мы можем перечислить все учетные записи в рамках проекта Google Cloud Platform (GCP) () через

      gcloud projects get-iam-policy

дерево команд вместо этого:

      gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="value(bindings.members)" \
--sort-by=bindings.members | uniq

#=>

. . .
serviceAccount:$SOME_SERVICE_ACCOUNT
. . .
user:$SOME_USER
. . .

который включает в себя передачу любых повторяющихся результатов, хотя uniq.

Примечание : приведенная выше команда гарантированно перечислит все учетные записи, связанные с $GCP_PROJECT_NAMEпотому что у каждой учетной записи должна быть хотя бы одна роль:

      gcloud projects add-iam-policy-binding $ANOTHER_USER \
--member="user:${ANOTHER_USER}"

#=>

ERROR: (gcloud.projects.add-iam-policy-binding) argument --role: Must be specified.

При необходимости мы можем воспользоваться .flatten(), .slice() а также .split() прогнозы, чтобы избавиться от serviceAccount: а также user: префиксы:

      gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="value(bindings.members.split(':').slice(1:).flatten())" \
--sort-by=bindings.members | uinq

#=>

. . .
$SOME_SERVICE_ACCOUNT
. . .
$SOME_USER
. . .

Еще gcloudпрогнозы здесь.

Мы также можем отфильтровать этот результат, используя --filter флаг:

      gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--filter="user" \
--flatten="bindings[].members" \
--format="value(bindings.members.split(':').slice(1:).flatten())" \
--sort-by=bindings.members | uniq

#=>

. . .
$SOME_USER
. . .

а также:

      gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--filter="serviceAccount" \
--flatten="bindings[].members" \
--format="value(bindings.members.split(':').slice(1:).flatten())" \
--sort-by=bindings.members | uniq

#=>

. . .
$SOME_SERVICE_ACCOUNT
. . .

Если вы ищете одного пользователя среди нескольких проектов, вы также можете использовать этот скрипт.

       for i in $(gcloud projects list |awk '/PROJECT_ID:/ {print$2}');
  do 
    echo ">> checking $i"; 
    gcloud projects get-iam-policy $i |grep -i YOURUSER ;
 done
Другие вопросы по тегам