为什么会出现这个错误?连接到 sts.amazonaws.com:443 [sts.amazonaws.com/54.239.29.25] 失败:连接超时:com.amazonaws.SdkClientException

Why this error? Connect to sts.amazonaws.com:443 [sts.amazonaws.com/54.239.29.25] failed: connect timed out: com.amazonaws.SdkClientException

在基于 Java 的 lambda 中使用 STS 客户端担任 IAM 角色时,有人遇到并解决了这个错误 -
Connect to sts.amazonaws.com:443 [sts.amazonaws.com/54.239.29.25] failed: connect timed out: com.amazonaws.SdkClientException

我想知道 - 当我在我的 pom 中有 aws-java-sdk-stsclient 依赖项并因此在我的阴影罐中时,为什么会有 internet 调用?由于lambda在配置了SG的VPC中,因此无法上网。

注意 - 我必须担任角色才能从另一个 AWS 帐户访问 S3 上的文件。更新 IAM 信任策略以拥有列表访问权不是一个选项。

这是我的 pom 中的依赖项 -

<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-sts -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-sts</artifactId>
            <version>1.11.163</version>
        </dependency>

这是我的 java class,我正在使用 sts 客户端担任角色 -

public class AWSTokenManager {
        public void awsTokenManager() {
            System.out.println("Inside awsTokenManager method");
            STSAssumeRoleSessionCredentialsProvider stsAssumeRoleSessionCredentialsProvider = new STSAssumeRoleSessionCredentialsProvider.Builder("role-arn-here", "us-east-1b")
                    .withStsClient(AWSSecurityTokenServiceClientBuilder.standard().build())
                    .withRoleSessionDurationSeconds(900)
                    .build();
            System.out.println("SessionCredentials awsaccesskeyid is - " + stsAssumeRoleSessionCredentialsProvider.getCredentials().getAWSAccessKeyId());
            System.out.println("SessionCredentials awsaccesskeyid is - " + stsAssumeRoleSessionCredentialsProvider.getCredentials().getAWSSecretKey());
            System.out.println("SessionCredentials awsaccesskeyid is - " + stsAssumeRoleSessionCredentialsProvider.getCredentials().getSessionToken());
            }

why would there be in internet call?

为什么没有?您正在使用 STS 客户端访问 STS 服务。

除非您创建并配置了 VPC Endpoint for STS(您没有提及),否则需要通过 Internet 访问 STS 端点才能发送调用 AssumeRole 的请求。