小编ono*_*ouv的帖子

aws sts get-session-token ... --token-code ... 失败并显示 InvalidClientTokenId,但 MFA 控制台登录正常

我正在尝试在 AWS CLI 上检索会话令牌,如下所示:

aws sts get-session-token --serial-number arn-string --token-code mfacode

在哪里

  • arn-string从 IAM 管理控制台复制,分配的 MFA 设备的安全凭证,格式如下arn:aws:iam:<number>:mfa/<name>
  • mfacode取自已注册的虚拟 MFA 设备

错误:

An error occurred (InvalidClientTokenId) when calling the GetSessionToken operation: The security token included in the request is invalid.

但是,我使用该 MFA 设备在浏览器中登录控制台就可以了

我的 ~/.aws/ 中只有一个默认配置文件,但我不知道这会产生什么影响。

尝试过这个:

  1. 多次尝试以确保没有发生 MFA 翻转
  2. 删除 MFA 设备分配并重新分配设备 — 同样的错误
  3. 省略--token-code,希望它提示我输入 MFA 设备令牌——同样的错误
  4. 使用arn:aws:iam:<number>:user/<name>-- 与预期相同的错误,因为aws get-session-id help 明确指出它需要是 MFA 设备的 arn

我认为这与 arn-string 而不是令牌有关,但是什么?任何关于导致此问题的原因的想法都非常受欢迎。

问候,奥拉夫

amazon-web-services aws-cli multi-factor-authentication

8
推荐指数
1
解决办法
6773
查看次数

bash JSON with jq - 如何检查空 JSON 成员?

我想根据错误消息 JSON 字段为空或非空来检测错误。我正在使用 jq 来分割成员,但在我的 bash“if”中评估它时遇到了很大的麻烦。

我的变量 $input 引用了一个 json 文件,该文件确实有一个 errMsg 成员,但作为一个空字符串(请注意,我的 CLI 提示符是 ~$):

~$ echo $(jq "." $input)
{ "projectCode": "145", "fullCode": "1", "errMsg": "" }
Run Code Online (Sandbox Code Playgroud)

在这种情况下检索 errMsg 字段会正确生成一个空字符串:

~$ err=$(jq ".errMsg" $input)
~$ echo $err
""
Run Code Online (Sandbox Code Playgroud)

问题:测试该变量似乎不可能:

~$ if [ $err = "" ]; then echo EMPTY; else echo CONTENT; fi 
CONTENT
Run Code Online (Sandbox Code Playgroud)

我期望 EMPTY 因为 $err 刚刚显示“”。检查其他方式:

~$ if [ $err != "" ]; then echo EMPTY; else echo CONTENT; fi
EMPTY 
Run Code Online (Sandbox Code Playgroud)

所以 $err 显然不是 "",即使 …

bash json if-statement jq

6
推荐指数
1
解决办法
1万
查看次数