Объединение результатов «aws iam list-users» и соответствующей информации из «aws iam list-groups-for-user» - PullRequest
0 голосов
/ 06 марта 2019

Как передать все выходные данные «aws iam list-users» и указать имя пользователя, чтобы я мог получить всю соответствующую информацию из «aws iam list-groups-for-user»?Желательно в красивый аккуратный файл .tsv.

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Чтобы объединить (в смысле SQL) таблицы, возвращаемые aws iam list-users и итерации aws iam list-groups-for-user, как данные, разделенные табуляцией, вы можете попробовать что-то вроде этого:

#!/usr/bin/env bash

aws iam list-users --output text > users.txt

cut -f6 users.txt | while read user ; do
  (echo $user ; aws iam list-groups-for-user \
      --user-name $user \
      --output text) | paste - - >> groups.txt
done

join -1 6 -2 1 users.txt groups.txt

Примечания:

  • Указание --output text заставляет все команды CLI AWS возвращать разделенные табуляцией данные. Таким образом, первая строка создает «таблицу» users.txt из aws iam list-users.
  • Обратите внимание, что команда cut использует вкладку в качестве разделителя по умолчанию. Итак, мы читаем пользователя из 6-го поля и для каждого пользователя запускаем aws iam list-groups-for-user.
  • Обратите внимание, что команда paste - - вставляет две предыдущие строки текста в одну и ту же строку. Цель этого состоит в том, чтобы добавить пользователя в поле в таблице groups.txt, чтобы у нас было поле для «соединения».
  • join -1 6 -2 1 users.txt groups.txt подобен соединению SQL в таблицах users.txt и groups.txt. -1 6 говорит, что использует 6-е поле из 1-го файла, а -2 1 говорит, что использует 1-е поле из второго файла в качестве поля для присоединения.

Если вы хотите удалить некоторые из этих полей в своем выводе, вы можете изменить команду соединения. Вы делаете это, указав список полей для включения через -o. Э.Г.

join -o 1.6,1.3,1.4,1.5,2.6,2.3,2.4,2.5,2.7 -1 6 -2 1  users.txt groups.txt

Это говорит о том, что выберите 6-е, 3-е, 4-е, 5-е поля из первого файла и 6-е, 3-е, 4-е, 5-е и 7-е поля из второго файла.

1 голос
/ 06 марта 2019

Это может помочь вам начать:

#!/usr/bin/env bash

users=$(aws iam list-users \
  --query 'Users[].UserName' \
  --output text
)
for user in $users ; do
  groups=$(aws iam list-groups-for-user \
      --user-name $user \
      --query 'Groups[].GroupName' \
      --output text \
    | paste -s -d, -  # join newlines as comma-separated values
  )
  printf "%s\t%s\n" $user $groups
done
...