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

时间:2019-03-08 18:25:48

标签: java amazon-s3 aws-lambda aws-sdk

在基于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依存关系,因此在我的阴影jar中有依存关系时,为什么会出现互联网通话?由于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>

View from my external dependencies showing aws-java-sdk-sts libraries

这是我的Java类,我在其中使用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());
            }

1 个答案:

答案 0 :(得分:2)

  

为什么会有互联网通话?

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

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