Скрипт GCP gcloud для сравнения всех ролей проекта со списком ролей в файле

# #bash #google-cloud-platform #gcloud

Вопрос:

Ищу сценарий для получения всех ролей для всех проектов в Организации, а затем сравниваю их со списком ролей в compare.txt файл, и если роли совпадают, то получите роль и идентификатор проекта для того, где она совпадает.

роли в compare.txt файлы перечислены следующим образом.

 roles/abc
roles/xyz
roles/123
roles/example.admin
roles/billing.xyz 

опять же, в этой задаче есть 2 части.

  1. получите роли для всех проектов в организации (может быть, что-то вроде » for project in $(gcloud project list) do gcloud projects get-iam-policy $project | grep role done > list.txt

Блок-цитата 2) сравните все роли с шага 1 с ролями в compare.txt и всякий раз, когда они совпадают, получите идентификатор проекта и роль, в которой они совпадают.

Комментарии:

1. Можете ли вы показать, что вы уже пробовали?

Ответ №1:

Подумайте о том, чтобы перевернуть проблему.

Определите список ролей, представляющих интерес:

 WANTS=("roles/editor" "roles/datastore.user")
 

Затем извлеките (уже уникальный) набор ролей из привязок проекта:

 ROLES=$(
  gcloud projects get-iam-policy ${PROJECT} 
  --flatten="bindings" 
  --format="value(bindings.role)")
 

Затем перечислите все проекты и проверьте каждую желаемую роль:

 WANTS=("roles/editor" "roles/datastore.user")

PROJECTS=$(
  gcloud projects list 
  --format="value(projectId)")

for PROJECT in ${PROJECTS}
do
  ROLES=$(
    gcloud projects get-iam-policy ${PROJECT} 
    --flatten="bindings" 
    --format="value(bindings.role)")
  for ROLE in ${ROLES}
  do
    if [[ "${WANTS[@]}" =~ "${ROLE}" ]]
    then
      echo "Project: ${PROJECT} contains ${ROLE}"
    fi
  done
done