Skip to content

Commit dbde5bd

Browse files
authored
feat(rt): Add STS assume role and web identity credential providers (#352)
1 parent 69a3dfd commit dbde5bd

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/CrtCredentialUtils.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,11 @@ internal fun Credentials.toCrt(): CredentialsCrt = CredentialsCrt(accessKeyId, s
2626
* Convert CRT credentials into SDK equivalent
2727
*/
2828
internal fun CredentialsCrt.toSdk(): Credentials = Credentials(accessKeyId, secretAccessKey, sessionToken)
29+
30+
/**
31+
* Adapt or convert a SDK credentials provider into CRT equivalent
32+
*/
33+
internal fun asCrt(sdkProvider: CredentialsProvider): CredentialsProviderCrt = when (sdkProvider) {
34+
is CrtCredentialsProvider -> sdkProvider.crtProvider
35+
else -> CredentialsProviderCrtProxy(sdkProvider)
36+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0.
4+
*/
5+
6+
package aws.sdk.kotlin.runtime.auth.credentials
7+
8+
import aws.sdk.kotlin.crt.auth.credentials.build
9+
import aws.sdk.kotlin.runtime.crt.SdkDefaultIO
10+
import aws.sdk.kotlin.crt.auth.credentials.StsAssumeRoleCredentialsProvider as StsAssumeRoleCredentialsProviderCrt
11+
12+
/**
13+
* A provider that gets credentials from the STS assume role credential provider.
14+
*
15+
* @param credentialsProvider The underlying Credentials Provider to use for source credentials
16+
* @param roleArn The target role's ARN
17+
* @param sessionName The name to associate with the session
18+
* @param durationSeconds The number of seconds from authentication that the session is valid for
19+
*/
20+
public class StsAssumeRoleCredentialsProvider public constructor(
21+
credentialsProvider: CredentialsProvider,
22+
roleArn: String,
23+
sessionName: String,
24+
durationSeconds: Int? = null,
25+
) : CrtCredentialsProvider {
26+
override val crtProvider: StsAssumeRoleCredentialsProviderCrt = StsAssumeRoleCredentialsProviderCrt.build {
27+
clientBootstrap = SdkDefaultIO.ClientBootstrap
28+
tlsContext = SdkDefaultIO.TlsContext
29+
this.credentialsProvider = asCrt(credentialsProvider)
30+
this.roleArn = roleArn
31+
this.sessionName = sessionName
32+
this.durationSeconds = durationSeconds
33+
}
34+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0.
4+
*/
5+
6+
package aws.sdk.kotlin.runtime.auth.credentials
7+
8+
import aws.sdk.kotlin.crt.auth.credentials.build
9+
import aws.sdk.kotlin.runtime.crt.SdkDefaultIO
10+
import aws.sdk.kotlin.crt.auth.credentials.StsWebIdentityCredentialsProvider as StsWebIdentityCredentialsProviderCrt
11+
12+
/**
13+
* A provider that gets credentials from the STS web identity credential provider.
14+
*/
15+
public class StsWebIdentityCredentialsProvider : CrtCredentialsProvider {
16+
override val crtProvider: StsWebIdentityCredentialsProviderCrt = StsWebIdentityCredentialsProviderCrt.build {
17+
clientBootstrap = SdkDefaultIO.ClientBootstrap
18+
tlsContext = SdkDefaultIO.TlsContext
19+
}
20+
}

0 commit comments

Comments
 (0)