如果当前令牌过期,有没有办法告诉 aws-cli 运行命令来获取新的会话令牌?

Mar*_*itz 6 amazon-web-services aws-cli

在我的工作中,我们的 AWS 身份验证与我们的企业登录 (SSO) 系统集成。换句话说,当我们想要访问 AWS 时,我们会执行一些操作,对我们的公司系统进行身份验证,然后颁发 AWS 会话令牌。令牌会在一小时后过期,因此 AWS 命令​​经常会因为令牌过期而失败,然后我必须获取新令牌,然后重复该命令。

这并不可怕,但由于我是一名工程师,我编写了一个“aws”包装脚本,用于检测令牌是否过期,如果过期,它可以运行可配置命令来获取新令牌,然后执行给出的命令。这是脚本:

#!/bin/bash

AWS=${AWS:-"/usr/local/bin/aws"}

if [ -z "$AWS_FORCE_GET_TOKEN" ] && ${AWS} sts get-caller-identity > /dev/null 2>&1; then
    ${AWS} "$@"
else
    CMD=$($AWS configure get get_token_command)
    echo "Error doing \"${AWS} sts get-caller-identity\"; Going to try running \"$CMD\"" > /dev/tty
    if $CMD 1>&2; then
        ${AWS} "$@"
    else
        echo "Failed to renew token with \"$CMD\"" 1>&2
    fi
fi
Run Code Online (Sandbox Code Playgroud)

该脚本看起来相当不错,但一个限制是它仅在调用“aws”可执行文件时才有效。boto3如果我有一个用于与 AWS 交互的Python 程序,那么它就不起作用。

现在我想知道我是否错过了 AWS 工具中内置的某些功能(botocore也许?)可以做到这一点?

我是一名 Python 程序员,所以如果它尚不存在并且被认为是一个好主意,我愿意添加它。但我想先检查一下它是否已经存在以及这是否是明智之举。

str*_*gjz 0

假设您使用aws sts get-federation-tokenCLI 来获取令牌,您可以使用令牌过期时间戳设置文件,并让 cron 运行脚本以每 20 分钟获取新令牌;将时间戳与当前时间进行比较,并更新它们是否即将过期。

到期 ->(时间戳)当前凭证到期的日期。

http://docs.aws.amazon.com/cli/latest/reference/sts/get-federation-token.html