Skip to content

Commit 4e05ac5

Browse files
authored
feat: configuration options for sigv4aSigningRegionSet (#1235)
1 parent 3a9014e commit 4e05ac5

File tree

7 files changed

+48
-2
lines changed

7 files changed

+48
-2
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "2654f439-0c1a-470f-951b-740d13f51bd6",
3+
"type": "feature",
4+
"description": "Added the `sigV4aSigningRegionSet` configuration option"
5+
}

aws-runtime/aws-config/api/aws-config.api

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ public final class aws/sdk/kotlin/runtime/config/AwsSdkSetting {
251251
public final fun getAwsSecretAccessKey ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
252252
public final fun getAwsSessionToken ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
253253
public final fun getAwsSharedCredentialsFile ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
254+
public final fun getAwsSigV4aSigningRegionSet ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
254255
public final fun getAwsUseDualStackEndpoint ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
255256
public final fun getAwsUseFipsEndpoint ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
256257
public final fun getAwsWebIdentityTokenFile ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
@@ -472,6 +473,7 @@ public final class aws/sdk/kotlin/runtime/config/profile/AwsProfileKt {
472473
public static final fun getRoleArn (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String;
473474
public static final fun getSdkUserAgentAppId (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String;
474475
public static final fun getServicesSection (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String;
476+
public static final fun getSigV4aSigningRegionSet (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String;
475477
public static final fun getSourceProfile (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String;
476478
public static final fun getUseDualStack (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/Boolean;
477479
public static final fun getUseFips (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/Boolean;
@@ -563,5 +565,7 @@ public class aws/sdk/kotlin/runtime/region/RegionProviderChain : aws/sdk/kotlin/
563565
public final class aws/sdk/kotlin/runtime/region/ResolveRegionKt {
564566
public static final fun resolveRegion (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
565567
public static synthetic fun resolveRegion$default (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
568+
public static final fun resolveSigV4aSigningRegionSet (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
569+
public static synthetic fun resolveSigV4aSigningRegionSet$default (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
566570
}
567571

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AbstractAwsSdkClientFactory.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ import aws.sdk.kotlin.runtime.config.profile.loadAwsSharedConfig
1616
import aws.sdk.kotlin.runtime.config.retries.resolveRetryStrategy
1717
import aws.sdk.kotlin.runtime.config.useragent.resolveUserAgentAppId
1818
import aws.sdk.kotlin.runtime.region.resolveRegion
19+
import aws.sdk.kotlin.runtime.region.resolveSigV4aSigningRegionSet
1920
import aws.smithy.kotlin.runtime.ExperimentalApi
21+
import aws.smithy.kotlin.runtime.auth.awscredentials.SigV4aClientConfig
2022
import aws.smithy.kotlin.runtime.client.RetryStrategyClientConfig
2123
import aws.smithy.kotlin.runtime.client.SdkClient
2224
import aws.smithy.kotlin.runtime.client.SdkClientConfig
@@ -90,6 +92,11 @@ public abstract class AbstractAwsSdkClientFactory<
9092
?: resolveRequestMinCompressionSizeBytes(platform, profile)
9193
}
9294

95+
if (config is SigV4aClientConfig.Builder) {
96+
config.sigV4aSigningRegionSet =
97+
config.sigV4aSigningRegionSet ?: resolveSigV4aSigningRegionSet(platform, profile)
98+
}
99+
93100
finalizeConfig(builder, sharedConfig, profile)
94101
}
95102
return builder.build()

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AwsSdkSetting.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,12 @@ public object AwsSdkSetting {
202202
*/
203203
public val AwsRequestMinCompressionSizeBytes: EnvironmentSetting<Long> =
204204
longEnvSetting("aws.requestMinCompressionSizeBytes", "AWS_REQUEST_MIN_COMPRESSION_SIZE_BYTES")
205+
206+
/**
207+
* The set of regions to use when signing a request with sigV4a.
208+
*/
209+
public val AwsSigV4aSigningRegionSet: EnvironmentSetting<String> =
210+
strEnvSetting("aws.sigV4aSigningRegionSet", "AWS_SIGV4A_SIGNING_REGION_SET")
205211
}
206212

207213
/**

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/profile/AwsProfile.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,13 @@ public val AwsProfile.disableRequestCompression: Boolean?
160160
public val AwsProfile.requestMinCompressionSizeBytes: Long?
161161
get() = getLongOrNull("request_min_compression_size_bytes")
162162

163+
/**
164+
* The set of regions to use when signing a request with sigV4a.
165+
*/
166+
@InternalSdkApi
167+
public val AwsProfile.sigV4aSigningRegionSet: String?
168+
get() = getOrNull("sigv4a_signing_region_set")
169+
163170
/**
164171
* Parse a config value as a boolean, ignoring case.
165172
*/

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/region/ResolveRegion.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66
package aws.sdk.kotlin.runtime.region
77

88
import aws.sdk.kotlin.runtime.InternalSdkApi
9+
import aws.sdk.kotlin.runtime.config.AwsSdkSetting
910
import aws.sdk.kotlin.runtime.config.profile.AwsProfile
1011
import aws.sdk.kotlin.runtime.config.profile.loadAwsSharedConfig
12+
import aws.sdk.kotlin.runtime.config.profile.sigV4aSigningRegionSet
13+
import aws.smithy.kotlin.runtime.config.resolve
1114
import aws.smithy.kotlin.runtime.io.use
1215
import aws.smithy.kotlin.runtime.util.LazyAsyncValue
1316
import aws.smithy.kotlin.runtime.util.PlatformProvider
@@ -21,3 +24,17 @@ public suspend fun resolveRegion(
2124
platformProvider: PlatformProvider = PlatformProvider.System,
2225
profile: LazyAsyncValue<AwsProfile> = asyncLazy { loadAwsSharedConfig(platformProvider).activeProfile },
2326
): String? = DefaultRegionProviderChain(platformProvider, profile = profile).use { it.getRegion() }
27+
28+
/**
29+
* Attempts to resolve sigV4aSigningRegionSet from the JVM system properties, environment variables, and file based configuration
30+
* @return The sigV4aSigningRegionSet if found, null if not
31+
*/
32+
@InternalSdkApi
33+
public suspend fun resolveSigV4aSigningRegionSet(platform: PlatformProvider = PlatformProvider.System, profile: LazyAsyncValue<AwsProfile>): Set<String>? {
34+
val rawString = AwsSdkSetting.AwsSigV4aSigningRegionSet.resolve(platform) ?: profile.get().sigV4aSigningRegionSet
35+
return rawString
36+
?.split(",")
37+
?.map { it.trim() }
38+
?.filter { it.isNotEmpty() }
39+
?.toSet()
40+
}

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ coroutines-version = "1.7.3"
99
atomicfu-version = "0.23.1"
1010

1111
# smithy-kotlin codegen and runtime are versioned separately
12-
smithy-kotlin-runtime-version = "1.0.17"
13-
smithy-kotlin-codegen-version = "0.30.18"
12+
smithy-kotlin-runtime-version = "1.0.18"
13+
smithy-kotlin-codegen-version = "0.30.19"
1414

1515
# codegen
1616
smithy-version = "1.42.0"

0 commit comments

Comments
 (0)