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

AWS S3预签名URL提示“令牌已过期”问题求助

解决S3预签名URL token过期问题的实操方案

1. 把EC2关联的IAM角色最大会话时长拉满到36小时

  • 登录IAM控制台,找到你的EC2实例绑定的IAM角色
  • 进入角色详情页点击「配置」标签,找到「最大会话时长」设置
  • 将时长调整为36小时(129600秒)并保存
  • 注意:该上限受AWS管控,多数场景支持36小时,若有异常可确认角色权限配置

2. 放弃EC2元数据默认凭证,主动调用STS获取长有效期凭证

EC2实例元数据自动提供的临时凭证最大仅支持12小时,无法满足36小时预签名URL的需求,需在Java代码里主动调用STS的AssumeRole接口生成36小时有效期的凭证:

import com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import java.util.Date;

public class S3PresignedUrlHelper {
    public static void main(String[] args) {
        String roleArn = "arn:aws:iam::你的账号ID:role/你的EC2角色名";
        String sessionName = "LongSessionForPresigned";

        // 创建STS凭证提供者,指定36小时有效期
        STSAssumeRoleSessionCredentialsProvider stsCreds = new STSAssumeRoleSessionCredentialsProvider.Builder(
                roleArn, sessionName)
                .withDurationSeconds(129600)
                .build();

        // 用STS凭证构建S3客户端
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                .withCredentials(stsCreds)
                .withRegion("你的S3存储桶所在区域")
                .build();

        // 生成预签名URL,过期时间设为36小时后
        GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest("你的桶名", "你的对象键")
                .withExpiration(new Date(System.currentTimeMillis() + 129600 * 1000));

        String presignedUrl = s3Client.generatePresignedUrl(urlRequest).toString();
        System.out.println(presignedUrl);
    }
}

3. 检查IAM角色信任策略是否存在限制

确保角色的信任策略允许EC2服务调用AssumeRole,且未添加会话时长相关的限制条件:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

4. 避免长期持有S3客户端实例

若之前使用元数据凭证的S3客户端,即便SDK会自动刷新凭证,长期持有客户端实例仍可能出现刷新不及时的问题。使用上述主动生成的STS凭证提供者,可自动管理凭证刷新,规避该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:52:54