Как продлить токен в sts

#amazon-web-services #aws-sts

Вопрос:

Я использую сервис aws sts для подключения к ресурсам amazon. Для этой цели у меня есть следующий java-код

  AssumeRoleRequest roleRequest = AssumeRoleRequest.builder()
                        .roleArn(roleArm)
                        .roleSessionName(roleSessionName)
                        .build();
             
  AssumeRoleResponse roleResponse = stsClient.assumeRole(roleRequest);
             
  sessionCredentials = roleResponse.credentials();
         
  stsCredentials = AwsSessionCredentials.create(
                     sessionCredentials.accessKeyId(),
                     sessionCredentials.secretAccessKey(),
                     sessionCredentials.sessionToken()); 
             
  provider = StaticCredentialsProvider.create(stsCredentials);
 

Сначала у меня сложилось впечатление, что мне не нужно было определять срок действия токена и продлевать его через определенные промежутки времени (я думал, что служба сама его продлит), но, похоже, срок действия токена истекает через определенный промежуток времени.

Как мне обнаружить и обновить токен?

Комментарии:

1. Учетные данные STS не могут быть продлены, вам необходимо сгенерировать новые учетные данные, используя опубликованный вами код.

2. @jordanm но как я узнаю, когда нужно вызвать приведенный выше код? Каждый час? Каждые 3 часа?

Ответ №1:

Как мне обнаружить и обновить токен?

Ваш AssumeRoleResponse должен дать вам срок годности. Поэтому вы должны следить за этим, и когда за несколько минут до истечения срока действия ваших учетных данных, вы должны сами создать новые учетные данные. Автоматическое обновление невозможно, если вы не запустите свой код на экземпляре EC2, контейнере ECS или лямбда-функции. В этом случае AWS позаботится об этом процессе.

Комментарии:

1. Да, я запускаю код на экземпляре ec2, но он говорит мне, что он не может подключиться к ресурсу через некоторое время, потому что срок действия токена истек.

2. @user2175783, поэтому вам не нужно явно брать на себя роль, если вы делаете это, например, для роли. Очевидно, что если вы принимаете какую-либо другую роль, а не роль экземпляра, вам все равно придется управлять ею самостоятельно.

3. Имеет ли значение, каким провайдером я пользуюсь? Например, в приведенном выше коде я использую StaticCredentialsProvider, но не уверен, имеет ли это значение.

4. @user2175783 Вам нужно будет прочитать, как работают роли экземпляров и как их прозрачно использовать в вашем приложении.