Amazon SDK - временные полномочия и AssomRoleRequest

Я использую версию 1.11.79 SDK Amazon Java У меня есть работа, которая создает моментальный снимок всех томов моего сервера. С сонками и т.д. (Для удовлетворения рекомендаций Amazon SDK) - это заняло более часа

Я использую следующий код для создания моего AmazonEC2Client с использованием временных учетных данных

        AssumeRoleRequest assumeRequest = new AssumeRoleRequest().withRoleArn(roleARN).withExternalId(externalId).withDurationSeconds(3600)
            .withRoleSessionName(roleSessionName);

    AssumeRoleResult assumeResult = amazonSecurityTokenServiceClient.assumeRole(assumeRequest);
    Credentials credentials = assumeResult.getCredentials();

    temporaryCredentials = new BasicSessionCredentials(credentials.getAccessKeyId(), credentials.getSecretAccessKey(), credentials.getSessionToken());

    CustomAmazonCredentialsProviderVO customAmazonCredentialsProviderVO = new CustomAmazonCredentialsProviderVO();
    customAmazonCredentialsProviderVO.setCredentials(temporaryCredentials);
    LOG.debug("customAmazonCredentialsProviderVO:{}", customAmazonCredentialsProviderVO);

    amazonEC2Client = new AmazonEC2Client(customAmazonCredentialsProviderVO, amazonClientConfiguration);

Проблема заключается в методе AssumeRoleRequest и методе withDurationSeconds - максимальное значение, которое вы можете установить, составляет 3600 секунд (1 час)

Мне нужно уметь задавать это 2 или 3 часа

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

Спасибо Damien

Ответ 1

Вы можете использовать GetSessionToken, который принимает значение DurationSeconds до 129600, если вы являетесь пользователем IAM.

Из документов:

Учетные данные, созданные пользователями IAM, действительны в течение указанного вами времени - от 900 секунд (15 минут) до 129600 секунд (36 часов) со значением по умолчанию 43200 секунд (12 часов)

Ответ 2

Предполагая, что вы контролируете роль, которую принимает задание, вы можете просто установить свойство MaxSessionDuration. Из документов (подчеркните мои):

Максимальная продолжительность сеанса (в секундах) для указанной роли. Любой, кто использует AWS CLI или API для принятия роли, может указать продолжительность с помощью необязательного параметра DurationSeconds API или параметра CLI длительности-секунды. Минимальное значение 3600. Максимальное значение 43200.

Увеличение этого лимита должно позволить вам использовать значение> 3600 в вашем AssumeRoleRequest.

Я только что попробовал это с помощью AWS SDK для .NET, и, кажется, работает нормально.

Ответ 3

Для тех из вас, кто попадает в этот поток и хочет найти решение, которое гарантирует, что сеанс всегда будет жить. Вы можете использовать STSAssumeRoleSessionCredentialsProvider, предоставленный AWS SDK, но обратите внимание, что он создаст дополнительный поток, чтобы убедиться, что сеанс жив. Вы также можете использовать пользовательскую реализацию, которая не создает дополнительный поток, как в приведенной ниже реализации netflix:

https://www.javatips.net/api/SimianArmy-master/src/main/java/com/netflix/simianarmy/aws/STSAssumeRoleSessionCredentialsProvider.java