Следует использовать StsAssumeRoleCredentialsProvider
, который обновляет временные токены для вас.
def apply(roleArn: String, externalId: String, expires: FiniteDuration, sessionName: String): StsAssumeRoleCredentialsProvider = {
val durationSecs: Int = expires.toSeconds.toInt
val stsClient: StsClient = StsClient.builder.build()
val req: AssumeRoleRequest = AssumeRoleRequest.builder
.roleArn(roleArn)
.externalId(externalId)
.durationSeconds(durationSecs)
.roleSessionName(sessionName)
.build()
StsAssumeRoleCredentialsProvider.builder
.stsClient(stsClient)
.refreshRequest(req)
.build()
}
Обратите внимание, что при вызове .resolveCredentials()
AWS SDK 2 возвращает AwsCredentials
, который не обеспечивает сеансмаркер.Возвращаемое значение можно просто преобразовать в AwsSessionCredentials
, что обеспечивает все три.
val prov: AwsCredentialsProvider = ???
val creds: AwsSessionCredentials = prov.resolveCredentials().asInstanceOf[AwsSessionCredentials]