shell 将“aws iam list-users”的输出与“aws iam list-groups-for-user”中的相应信息相结合

wbrvyc0a  于 2023-01-26  发布在  Shell
关注(0)|答案(2)|浏览(90)

如何传递“aws iam list-users”的所有输出并引用用户名,以便从“aws iam list-groups-for-user”中提取所有相应的信息?最好是一个漂亮整洁的.tsv文件。

to94eoyn

to94eoyn1#

要将aws iam list-usersaws iam list-groups-for-user的迭代返回的表连接(在SQL意义上)为制表符分隔的数据,可以尝试如下操作:

#!/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会导致所有AWS CLI命令返回制表符分隔的数据。因此,第一行从aws iam list-users创建一个"表" users.txt
  • 注意,cut命令使用制表符作为默认分隔符,因此我们从第6个字段读取用户,并为每个用户运行aws iam list-groups-for-user
  • 注意,paste - -命令将前面两行文本"粘贴"到同一行上,其目的是将用户添加到groups.txt表的一个字段中,这样我们就有了一个可以"连接"的字段。
  • join -1 6 -2 1 users.txt groups.txt类似于users.txtgroups.txt表上的SQL联接。-1 6表示使用第一个文件中的第6个字段,-2 1表示使用第二个文件中的第1个字段作为联接的字段。

如果你想删除输出中的一些字段,你可以修改join命令,通过-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个字段。

3j86kqsm

3j86kqsm2#

这可能会让你开始:

#!/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

相关问题