如何使用AWS生成的密码在AWS CLI上正确创建IAM用户?

时间:2018-09-17 04:34:37

标签: amazon-web-services amazon-iam aws-cli

我编写了一个脚本来:1)生成随机密码2)创建新的IAM用户3)使用生成的密码为该用户设置登录配置文件。 下面是我在bash中的代码:

RANDOM_PASS=$(aws secretsmanager get-random-password --include-space --password-length 20 --require-each-included-type | jq '.RandomPassword' | tr -d '"')

aws iam create-user --user-name $USERID
aws iam create-login-profile --user-name $USERID --password $RANDOM_PASS --password-reset-required

如您所见,我使用jq获取了特定的密码字符串,然后将其截断了,因此可以将其放在create-login-profile中。但是它看起来不是很优雅,我觉得必须有一个更好的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

重新讨论此部分:

jq '.RandomPassword' | tr -d '"')

收件人:

jq -r '.RandomPassword'

-r表示不带引号的原始输出。

答案 1 :(得分:1)

实际上您根本不需要JQ。

代替:

aws secretsmanager get-random-password --include-space --password-length 20 \
  --require-each-included-type | jq '.RandomPassword' | tr -d '"'

您只需要:

aws secretsmanager get-random-password --include-space --password-length 20 \
  --require-each-included-type --output text

AWS CLI命令允许您通过传递--output开关在JSON和文本(和表)输出之间切换。

关于脚本的一般可读性,我也尽量避免使用长行,因此我将其重构为:

RANDOM_PASS=$(aws secretsmanager get-random-password \
  --require-each-included-type \
  --password-length 20 \
  --include-space \
  --output text)

aws iam create-user --user-name $USERID

aws iam create-login-profile \ 
  --user-name $USERID \
  --password $RANDOM_PASS \
  --password-reset-required

显然,这只是个人喜好。