我在帐户A中的Lambda函数中使用STS,在另一个帐户B中使用AssumeRole将记录放在帐户B中。
下面是我在Lambda函数中使用的用于交叉帐户动态访问的代码
sts_client = boto3.client('sts')
assumedRoleObject = sts_client.assume_role(RoleArn=CROSS_ACC_KINESIS_ROLE, RoleSessionName="AssumeRoleSession1")
credentials = assumedRoleObject['Credentials']
kinesis_cross_acc_client = boto3.client(
'kinesis',
aws_access_key_id = credentials['AccessKeyId'],
aws_secret_access_key = credentials['SecretAccessKey'],
aws_session_token = credentials['SessionToken'],
region_name=CROSS_ACC_KINESIS_REGION)我确实继续在调用ClientError操作时出错(ExpiredTokenException):请求中包含的安全令牌已过期
我认为当Lambda运行时,它应该能够一次又一次地得到令牌,所以我不需要刷新它。默认情况下,STS令牌在3600秒后到期。羔羊跑不了那么久。
如何检查令牌是否过期并刷新?
谢谢你的帮助
发布于 2019-04-05 22:57:00
您将在创建的凭据变量中发现过期。
凭据credentials['Expiration']
发布于 2019-11-06 21:24:09
在每次运行Lambda时,我都会检查Expiration,然后使用它来确定是否需要刷新STS令牌。
time_left = int(
credentials['Expiration'].timestamp() - datetime.now().timestamp()
)
logger.info('STS Timeleft: {}'.format(time_left))
# If time left is less than 5 minutes, refresh
if time_left < 300:
assumed_role_object = sts_client.assume_role(
RoleArn=CROSS_ACC_KINESIS_ROLE,
RoleSessionName='AssumeRoleSession1'
)
credentials = assumed_role_object['Credentials']
logger.info("STS renewed. New Time: {}".format(
credentials['Expiration']
))
kinesis_cross_acc_client = boto3.client(
'kinesis',
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'],
region_name=CROSS_ACC_KINESIS_REGION
)https://stackoverflow.com/questions/48696100
复制相似问题