Принимая на себя роль IAM с использованием клиента STS в лямбда-выражении на основе Java, столкнулся ли кто-нибудь с этой ошибкой и решил ли она эту ошибку —
Connect to sts.amazonaws.com:443 [sts.amazonaws.com/54.239.29.25] failed: connect timed out: com.amazonaws.SdkClientException
Интересно — когда у меня aws-java-sdk-stsclient
зависимость в моем pom и, следовательно, в моей заштрихованной банке, почему бы там быть в интернет-вызове? Поскольку лямбда-выражение находится в VPC с настроенным SG, доступ в Интернет заблокирован.
Примечание. Я должен взять на себя роль, чтобы получить доступ к файлам на S3 из другой учетной записи AWS. Обновление политики доверия IAM для доступа к списку невозможно.
Вот зависимость, которая у меня есть в моем помпе —
<!-- 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, в котором я беру на себя роль с помощью клиента 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());
}
Почему бы этого не быть? Вы получаете доступ к службе STS с помощью клиента STS.
Если вы не создали и не настроили конечную точку VPC для STS (которая вы не упомянули), конечная точка STS должна быть доступна через Интернет, чтобы отправить запрос на вызов
AssumeRole
.