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

问题描述 投票:0回答:2

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

shell aws-cli
2个回答
1
投票

要加入(在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会导致所有AWS CLI命令返回以制表符分隔的数据。因此第一行从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就像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个字段。


1
投票

这可能会让你开始:

#!/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
© www.soinside.com 2019 - 2024. All rights reserved.