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

AWS S3会话过期问题:如何每日自动建立新会话?

解决AWS S3临时会话过期及自动续期问题

核心问题分析

你通过PowerShell生成的是临时安全凭证,这类凭证默认有效期为8小时,因此次日运行脚本必然会触发过期报错。要解决这个问题,要么让Boto3自动获取有效凭证,要么实现凭证的自动定期刷新。

解决方案一:利用AWS凭证链自动加载有效凭证

Boto3内置凭证链机制,无需手动硬编码凭证参数,会自动按优先级查找有效凭证:

  1. 系统环境变量
  2. ~/.aws/credentials文件(你当前使用的凭证存储位置)
  3. EC2实例元数据(若脚本在AWS云服务器运行)
  4. AWS SSO会话凭证(若使用SSO登录)

优化后的Python代码

移除硬编码的凭证参数,让Boto3自动读取最新有效凭证:

import boto3
from io import StringIO

# 无需手动传入凭证,Boto3自动从凭证链获取有效信息
s3_client = boto3.client("s3", region_name='你的实际区域')

# 写入S3逻辑
bucket = 'automated-reports'
csv_buffer = StringIO()
all_active_scraper_counts_df.to_csv(csv_buffer, index=False)

put_response = s3_client.put_object(
    Bucket=bucket, 
    Key="all_active_scrapers.csv", 
    Body=csv_buffer.getvalue()
)

status = put_response.get("ResponseMetadata", {}).get("HTTPStatusCode")
if status == 200:
    print(f"Successful S3 put_object response. Status - {status}")
else:
    print(f"Unsuccessful S3 put_object response. Status - {status}")

解决方案二:自动刷新.aws/credentials文件(本地Windows环境适用)

如果必须通过PowerShell登录获取凭证,可以编写脚本实现自动刷新,并借助Windows任务计划每日执行:

1. 编写PowerShell刷新脚本(refresh-aws-creds.ps1)

根据你的实际登录方式选择对应逻辑:

# 方式1:AWS SSO登录(如果用SSO验证)
aws sso login --profile your-profile-name

# 方式2:STS角色假设(如果通过角色获取临时凭证)
# $roleArn = "arn:aws:iam::123456789012:role/your-target-role"
# $credResult = (aws sts assume-role --role-arn $roleArn --role-session-name "daily-s3-session").ConvertFrom-Json
# $accessKey = $credResult.Credentials.AccessKeyId
# $secretKey = $credResult.Credentials.SecretAccessKey
# $sessionToken = $credResult.Credentials.SessionToken
# 
# # 覆盖写入credentials文件
# $credFilePath = "$env:USERPROFILE\.aws\credentials"
# @"
# [default]
# aws_access_key_id = $accessKey
# aws_secret_access_key = $secretKey
# aws_session_token = $sessionToken
# "@ | Out-File $credFilePath -Force

2. 设置Windows任务计划自动执行

  • 打开「任务计划程序」,创建基本任务
  • 触发器设置为每日,比如每天凌晨1点执行
  • 操作选择「启动程序」,程序/脚本填powershell.exe,添加参数:-ExecutionPolicy Bypass -File "C:\你的脚本路径\refresh-aws-creds.ps1"
  • 确保任务运行的用户账户有修改.aws/credentials文件的权限

额外注意事项

  • 若使用AWS SSO,可在AWS控制台调整SSO会话有效期(最长支持12小时)
  • 绝对避免在代码中硬编码凭证,既不安全又会因过期频繁报错
  • 测试时可先手动执行刷新脚本,再运行Python脚本验证功能是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:20:40