亚马逊SDK - 临时凭证和AssumeRoleRequest

时间:2017-01-30 19:19:11

标签: java amazon-web-services amazon-ec2

我使用的是Amazon Java SDK 1.11.79版 我有一份工作,可以创建所有服务器卷的快照。 随着睡眠等(以满足亚马逊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小时的临时凭证?

由于 达明

3 个答案:

答案 0 :(得分:5)

您可以使用GetSessionToken,如果您是IAM用户,则会接受高达129600的DurationSeconds值。

来自文档:

  

由IAM用户创建的凭据在您指定的持续时间内有效,从900秒(15分钟)到最多129600秒(36小时),默认值为43200秒(12小时)

答案 1 :(得分:0)

假设您可以控制作业所承担的角色,您只需设置MaxSessionDuration属性即可。来自docs(强调我的):

  

指定角色的最长会话持续时间(以秒为单位)。 使用AWS CLI或API承担此角色的任何人都可以使用可选的DurationSeconds API参数或duration-seconds CLI参数指定持续时间。最小值3600.最大值43200。

增加此限制应该允许您使用值>您AssumeRoleRequest中的3600。

我刚刚尝试使用适用于.NET的AWS开发工具包,它似乎工作正常。

答案 2 :(得分:0)

对于那些使用此线程的人,他们想要一个可以确保会话始终存在的解决方案。您可以使用AWS开发工具包提供的STSAssumeRoleSessionCredentialsProvider,但请注意,它将创建额外的线程以确保会话仍在运行。您还可以使用不创建额外线程的自定义实现,例如以下netflix实现:

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