AWS CLI 不支持 MultiFactorAuthAge

Mau*_*ein 6 aws-cli multi-factor-authentication

我正在尝试将我的 AWS CLI 设置为使用 MFA 承担一个角色,并在 15 分钟后使凭证过期(显然,允许的最小duration_seconds)。

我的 IAM 角色政策是:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:user/myuser"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        },
        "NumericLessThan": {
          "aws:MultiFactorAuthAge": "900"
        }
      }
    }
  ]
}

Run Code Online (Sandbox Code Playgroud)

我的 CLI 配置设置如下:

[profile xxx]
role_arn = arn:aws:iam::XXXXXXXXXXXX:role/mfa
mfa_serial = arn:aws:iam::XXXXXXXXXXXX:mfa/foobar
source_profile = mfa
Run Code Online (Sandbox Code Playgroud)

当我使用xxx上面的配置文件运行命令时,第一次询问 MFA 并且对所有后续请求保持有效。但是,15 分钟后,令牌仍然有效并且不会再次询问 MFA。

[profile xxx]
role_arn = arn:aws:iam::XXXXXXXXXXXX:role/mfa
mfa_serial = arn:aws:iam::XXXXXXXXXXXX:mfa/foobar
source_profile = mfa
Run Code Online (Sandbox Code Playgroud)

我尝试duration_seconds在我的 CLI 上设置参数,如下所示:

[profile xxx]
role_arn = arn:aws:iam::XXXXXXXXXXXX:role/mfa
mfa_serial = arn:aws:iam::XXXXXXXXXXXX:mfa/foobar
source_profile = mfa
duration_seconds = 900
Run Code Online (Sandbox Code Playgroud)

但是现在,即使时间差在几秒内,我也会为发出的每个命令询问 MFA 令牌。

我在这里错过了什么吗?

AWS CLI 版本:aws-cli/2.0.49 Python/3.7.4 Darwin/19.6.0 exe/x86_64

感谢任何帮助。

提前致谢!

Mau*_*ein 4

所以,我发现了这种行为的原因:

如本 Github 问题中所述,AWS CLI 会将 15 分钟内的任何会话视为已过期,并自动刷新信用(或在 MFA 的情况下要求新的一次性密码)。

因此,将会话持续时间设置为 15 分钟(900 秒)基本上与获取一次性凭证相同。

我刚刚测试了设置session_duration930(15分钟+30秒),会话确实有效时间为30秒。