我使用的是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小时的临时凭证?
由于 达明
答案 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实现: