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

访问CloudTrail Events触发UnrecognizedClientException的原因及代码问题咨询

排查CloudTrail LookupEvents调用时的UnrecognizedClientException异常

你遇到的UnrecognizedClientException(请求中的安全令牌无效),核心问题出在临时凭证的处理和重复配置上,以下是具体问题点和修正方案:

代码中的两个关键问题

  • 临时凭证存储错误:AssumeRole返回的临时凭证包含accessKeyId、secretAccessKey和**sessionToken**三个字段,但你使用的BasicAWSCredentials仅支持前两个字段,无法携带session token,导致CloudTrail服务无法识别有效凭证。
  • 重复配置凭证提供者:已经通过AWSCloudTrailClientBuilder为客户端设置了凭证,再在LookupEventsRequest中调用withRequestCredentialsProvider属于冗余操作,可能引发凭证逻辑冲突。

修正后的代码

AWSCloudTrailClientBuilder awsCloudTrailClientBuilder = AWSCloudTrailClientBuilder.standard();
// 使用BasicSessionCredentials存储完整的临时凭证(包含sessionToken)
AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(
        new BasicSessionCredentials(
                awsCredentials.getAccessKeyId(),
                awsCredentials.getSecretAccessKey(),
                awsCredentials.getSessionToken() // 补充sessionToken
        )
);
AWSCloudTrail awsCloudTrailClient = awsCloudTrailClientBuilder
        .withClientConfiguration(new ClientConfiguration()
                .withSocketTimeout(5000)
                .withConnectionMaxIdleMillis(30000L))
        .withCredentials(awsCredentialsProvider)
        .withRegion(Regions.US_EAST_1)
        .build();

// 移除request中的凭证配置,直接使用客户端已有的凭证
LookupEventsRequest request = new LookupEventsRequest();

LookupEventsResult lookupEventsResult = awsCloudTrailClient.lookupEvents(request);

额外验证点

  1. 确认awsCredentials对象确实包含有效的sessionToken值,避免AssumeRole调用后未正确提取该字段。
  2. 再次验证RoleA的权限策略是否包含cloudtrail:LookupEvents动作,且资源范围正确(可临时设为*测试)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:03:16