You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在长脚本运行时自动重置AWS会话令牌?

解决AWS会话凭证过期自动刷新问题

方案1:在脚本中集成aws-azure-login自动刷新逻辑

可以在脚本里定期检查凭证过期时间,临近过期时自动调用aws-azure-login更新凭证:

  • 解析~/.aws/credentials文件,提取会话的expiration字段
  • 在脚本循环或关键操作前,判断当前时间是否距过期不足10分钟(可自定义提前量)
  • 若需刷新,调用aws-azure-login --no-prompt(需提前配置无交互登录,确保Azure凭据可自动复用)

示例Python代码片段:

import os
import time
from configparser import ConfigParser
from datetime import datetime

def is_credential_expiring():
    config = ConfigParser()
    config.read(os.path.expanduser('~/.aws/credentials'))
    if 'default' not in config or 'expiration' not in config['default']:
        return True
    expire_time = datetime.fromisoformat(config['default']['expiration'].replace('Z', '+00:00'))
    return (expire_time - datetime.utcnow()).total_seconds() < 600

def refresh_credentials():
    os.system('aws-azure-login --no-prompt')

# 业务逻辑循环中嵌入检查
while True:
    if is_credential_expiring():
        refresh_credentials()
    # 执行你的核心操作,比如LookupEvents
    # ...
    time.sleep(300)  # 每5分钟检查一次

方案2:利用AWS SDK的凭证自动刷新机制

多数AWS SDK(如Python的boto3)支持自定义凭证提供者,实现凭证过期时自动刷新:

import boto3
from botocore.credentials import CredentialProvider, Credentials
import os
from configparser import ConfigParser
from datetime import datetime

class AzureAWSCredentialProvider(CredentialProvider):
    def load(self):
        if is_credential_expiring():
            refresh_credentials()
        config = ConfigParser()
        config.read(os.path.expanduser('~/.aws/credentials'))
        creds = config['default']
        return Credentials(
            access_key=creds['aws_access_key_id'],
            secret_key=creds['aws_secret_access_key'],
            token=creds.get('aws_session_token'),
            expiry_time=datetime.fromisoformat(creds['expiration'].replace('Z', '+00:00'))
        )

# 配置自定义凭证提供者
session = boto3.Session()
session._session.get_component('credential_provider').set_provider(
    'custom', AzureAWSCredentialProvider()
)
client = session.client('cloudtrail')  # 替换为你使用的AWS服务

# 后续调用client方法时,会自动检查并刷新凭证

方案3:系统定时任务定期刷新

用系统定时工具(Linux cron/Windows任务计划)定期执行aws-azure-login --no-prompt,确保凭证始终有效:

  • Linux下添加cron任务(每3小时执行一次):
0 */3 * * * /usr/local/bin/aws-azure-login --no-prompt
  • 注意定时任务的执行用户需与脚本运行用户一致,且aws-azure-login已配置无交互登录参数

关键注意事项

  • 确保aws-azure-login支持无交互模式,可提前通过交互式登录保存会话,或使用密钥链存储Azure凭据(避免明文密码)
  • 容器环境中需挂载~/.aws目录,并确保容器内可执行aws-azure-login命令
  • 测试时可手动修改credentials文件的expiration字段为过去时间,验证刷新逻辑是否生效

内容的提问来源于stack exchange,提问作者fullstaxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:05:10