diff --git a/.changes/2.25.37.json b/.changes/2.25.37.json new file mode 100644 index 000000000000..c951dbd4f12c --- /dev/null +++ b/.changes/2.25.37.json @@ -0,0 +1,72 @@ +{ + "version": "2.25.37", + "date": "2024-04-23", + "entries": [ + { + "type": "feature", + "category": "AWS Cost Explorer Service", + "contributor": "", + "description": "Added additional metadata that might be applicable to your reservation recommendations." + }, + { + "type": "feature", + "category": "AWS Performance Insights", + "contributor": "", + "description": "Clarifies how aggregation works for GetResourceMetrics in the Performance Insights API." + }, + { + "type": "feature", + "category": "AWS SDK for Java V2", + "contributor": "", + "description": "Source account Id from credentials to use in endpoint construction" + }, + { + "type": "feature", + "category": "Agents for Amazon Bedrock", + "contributor": "", + "description": "Introducing the ability to create multiple data sources per knowledge base, specify S3 buckets as data sources from external accounts, and exposing levers to define the deletion behavior of the underlying vector store data." + }, + { + "type": "feature", + "category": "Agents for Amazon Bedrock Runtime", + "contributor": "", + "description": "This release introduces zero-setup file upload support for the RetrieveAndGenerate API. This allows you to chat with your data without setting up a Knowledge Base." + }, + { + "type": "feature", + "category": "Amazon Bedrock", + "contributor": "", + "description": "This release introduces Model Evaluation and Guardrails for Amazon Bedrock." + }, + { + "type": "feature", + "category": "Amazon Bedrock Runtime", + "contributor": "", + "description": "This release introduces Guardrails for Amazon Bedrock." + }, + { + "type": "feature", + "category": "Amazon Elastic Compute Cloud", + "contributor": "", + "description": "This release introduces EC2 AMI Deregistration Protection, a new AMI property that can be enabled by customers to protect an AMI against an unintended deregistration. This release also enables the AMI owners to view the AMI 'LastLaunchedTime' in DescribeImages API." + }, + { + "type": "feature", + "category": "Amazon Relational Database Service", + "contributor": "", + "description": "Fix the example ARN for ModifyActivityStreamRequest" + }, + { + "type": "feature", + "category": "Amazon WorkSpaces Web", + "contributor": "", + "description": "Added InstanceType and MaxConcurrentSessions parameters on CreatePortal and UpdatePortal Operations as well as the ability to read Customer Managed Key & Additional Encryption Context parameters on supported resources (Portal, BrowserSettings, UserSettings, IPAccessSettings)" + }, + { + "type": "feature", + "category": "AWS SDK for Java v2", + "contributor": "", + "description": "Updated endpoint and partition metadata." + } + ] +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a207cf261ad3..e64f7ede65d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,49 @@ #### 👋 _Looking for changelogs for older versions? You can find them in the [changelogs](./changelogs) directory._ +# __2.25.37__ __2024-04-23__ +## __AWS Cost Explorer Service__ + - ### Features + - Added additional metadata that might be applicable to your reservation recommendations. + +## __AWS Performance Insights__ + - ### Features + - Clarifies how aggregation works for GetResourceMetrics in the Performance Insights API. + +## __AWS SDK for Java V2__ + - ### Features + - Source account Id from credentials to use in endpoint construction + +## __AWS SDK for Java v2__ + - ### Features + - Updated endpoint and partition metadata. + +## __Agents for Amazon Bedrock__ + - ### Features + - Introducing the ability to create multiple data sources per knowledge base, specify S3 buckets as data sources from external accounts, and exposing levers to define the deletion behavior of the underlying vector store data. + +## __Agents for Amazon Bedrock Runtime__ + - ### Features + - This release introduces zero-setup file upload support for the RetrieveAndGenerate API. This allows you to chat with your data without setting up a Knowledge Base. + +## __Amazon Bedrock__ + - ### Features + - This release introduces Model Evaluation and Guardrails for Amazon Bedrock. + +## __Amazon Bedrock Runtime__ + - ### Features + - This release introduces Guardrails for Amazon Bedrock. + +## __Amazon Elastic Compute Cloud__ + - ### Features + - This release introduces EC2 AMI Deregistration Protection, a new AMI property that can be enabled by customers to protect an AMI against an unintended deregistration. This release also enables the AMI owners to view the AMI 'LastLaunchedTime' in DescribeImages API. + +## __Amazon Relational Database Service__ + - ### Features + - Fix the example ARN for ModifyActivityStreamRequest + +## __Amazon WorkSpaces Web__ + - ### Features + - Added InstanceType and MaxConcurrentSessions parameters on CreatePortal and UpdatePortal Operations as well as the ability to read Customer Managed Key & Additional Encryption Context parameters on supported resources (Portal, BrowserSettings, UserSettings, IPAccessSettings) + # __2.25.36__ __2024-04-22__ ## __AWS Cloud Map__ - ### Features diff --git a/README.md b/README.md index 422dd23cd3f6..0b1102b8319d 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ To automatically manage module versions (currently all modules have the same ver software.amazon.awssdk bom - 2.25.36 + 2.25.37 pom import @@ -86,12 +86,12 @@ Alternatively you can add dependencies for the specific services you use only: software.amazon.awssdk ec2 - 2.25.36 + 2.25.37 software.amazon.awssdk s3 - 2.25.36 + 2.25.37 ``` @@ -103,7 +103,7 @@ You can import the whole SDK into your project (includes *ALL* services). Please software.amazon.awssdk aws-sdk-java - 2.25.36 + 2.25.37 ``` diff --git a/archetypes/archetype-app-quickstart/pom.xml b/archetypes/archetype-app-quickstart/pom.xml index 5a60eeaad5e7..454e94bf84e1 100644 --- a/archetypes/archetype-app-quickstart/pom.xml +++ b/archetypes/archetype-app-quickstart/pom.xml @@ -20,7 +20,7 @@ archetypes software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/archetypes/archetype-lambda/pom.xml b/archetypes/archetype-lambda/pom.xml index f5608ec9844a..94c8ba97c4e8 100644 --- a/archetypes/archetype-lambda/pom.xml +++ b/archetypes/archetype-lambda/pom.xml @@ -20,7 +20,7 @@ archetypes software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 archetype-lambda diff --git a/archetypes/archetype-tools/pom.xml b/archetypes/archetype-tools/pom.xml index 2153955f2a1c..483e4d42c19c 100644 --- a/archetypes/archetype-tools/pom.xml +++ b/archetypes/archetype-tools/pom.xml @@ -20,7 +20,7 @@ archetypes software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/archetypes/pom.xml b/archetypes/pom.xml index 4313aa28b3c7..c9be3f36ee58 100644 --- a/archetypes/pom.xml +++ b/archetypes/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 archetypes diff --git a/aws-sdk-java/pom.xml b/aws-sdk-java/pom.xml index f08edb2f6499..b7ecceaa63a7 100644 --- a/aws-sdk-java/pom.xml +++ b/aws-sdk-java/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../pom.xml aws-sdk-java diff --git a/bom-internal/pom.xml b/bom-internal/pom.xml index b83ae7178841..5ff2ef4e8985 100644 --- a/bom-internal/pom.xml +++ b/bom-internal/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/bom/pom.xml b/bom/pom.xml index 4850af149a9d..49ce28525010 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../pom.xml bom diff --git a/bundle-logging-bridge/pom.xml b/bundle-logging-bridge/pom.xml index 22d7ee8405cf..f7194994ce93 100644 --- a/bundle-logging-bridge/pom.xml +++ b/bundle-logging-bridge/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 bundle-logging-bridge jar diff --git a/bundle-sdk/pom.xml b/bundle-sdk/pom.xml index b1a0d28af744..2fff36832dfa 100644 --- a/bundle-sdk/pom.xml +++ b/bundle-sdk/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 bundle-sdk jar diff --git a/bundle/pom.xml b/bundle/pom.xml index 1ba5fded5d46..6db1f88c967e 100644 --- a/bundle/pom.xml +++ b/bundle/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 bundle jar diff --git a/codegen-lite-maven-plugin/pom.xml b/codegen-lite-maven-plugin/pom.xml index 2bd4f9004dad..a66e9bc0f17d 100644 --- a/codegen-lite-maven-plugin/pom.xml +++ b/codegen-lite-maven-plugin/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../pom.xml codegen-lite-maven-plugin diff --git a/codegen-lite/pom.xml b/codegen-lite/pom.xml index f03af5f2f92a..62cd64387ff8 100644 --- a/codegen-lite/pom.xml +++ b/codegen-lite/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 codegen-lite AWS Java SDK :: Code Generator Lite diff --git a/codegen-maven-plugin/pom.xml b/codegen-maven-plugin/pom.xml index e6580a069835..b38ac26f7d58 100644 --- a/codegen-maven-plugin/pom.xml +++ b/codegen-maven-plugin/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../pom.xml codegen-maven-plugin diff --git a/codegen/pom.xml b/codegen/pom.xml index 3141cfcd5b8e..5a521b9ae0ea 100644 --- a/codegen/pom.xml +++ b/codegen/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 codegen AWS Java SDK :: Code Generator diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/model/internal/LocalParameter.java b/codegen/src/main/java/software/amazon/awssdk/codegen/model/internal/LocalParameter.java new file mode 100644 index 000000000000..0ff384acaf06 --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/model/internal/LocalParameter.java @@ -0,0 +1,46 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.model.internal; + +import com.squareup.javapoet.CodeBlock; + +/** + * Represents a generic parameter that can be code generated, but isn't tied to a model shape + */ +public class LocalParameter { + + private final String name; + private final Class type; + private final CodeBlock documentation; + + public LocalParameter(String name, Class type, CodeBlock documentation) { + this.name = name; + this.type = type; + this.documentation = documentation; + } + + public String name() { + return name; + } + + public Class type() { + return type; + } + + public CodeBlock documentation() { + return documentation; + } +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/model/rules/endpoints/BuiltInParameter.java b/codegen/src/main/java/software/amazon/awssdk/codegen/model/rules/endpoints/BuiltInParameter.java index 47ae097b072c..53f3dddac21f 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/model/rules/endpoints/BuiltInParameter.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/model/rules/endpoints/BuiltInParameter.java @@ -23,6 +23,8 @@ public enum BuiltInParameter { AWS_USE_DUAL_STACK, AWS_USE_FIPS, SDK_ENDPOINT, + AWS_AUTH_ACCOUNT_ID, + AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE, AWS_STS_USE_GLOBAL_ENDPOINT, AWS_S3_FORCE_PATH_STYLE, AWS_S3_ACCELERATE, @@ -43,6 +45,10 @@ public static BuiltInParameter fromValue(String s) { return AWS_USE_FIPS; case "sdk::endpoint": return SDK_ENDPOINT; + case "aws::auth::accountid": + return AWS_AUTH_ACCOUNT_ID; + case "aws::auth::accountidendpointmode": + return AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE; case "aws::sts::useglobalendpoint": return AWS_STS_USE_GLOBAL_ENDPOINT; case "aws::s3::forcepathstyle": diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java index ed8418e1dc7c..01f143e63395 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java @@ -53,6 +53,7 @@ import software.amazon.awssdk.codegen.poet.auth.scheme.AuthSchemeSpecUtils; import software.amazon.awssdk.codegen.poet.auth.scheme.ModelAuthSchemeClassesKnowledgeIndex; import software.amazon.awssdk.codegen.poet.model.ServiceClientConfigurationUtils; +import software.amazon.awssdk.codegen.poet.rules.EndpointParamsKnowledgeIndex; import software.amazon.awssdk.codegen.poet.rules.EndpointRulesSpecUtils; import software.amazon.awssdk.codegen.utils.AuthUtils; import software.amazon.awssdk.core.SdkPlugin; @@ -87,6 +88,7 @@ public class BaseClientBuilderClass implements ClassSpec { private final EndpointRulesSpecUtils endpointRulesSpecUtils; private final AuthSchemeSpecUtils authSchemeSpecUtils; private final ServiceClientConfigurationUtils configurationUtils; + private final EndpointParamsKnowledgeIndex endpointParamsKnowledgeIndex; public BaseClientBuilderClass(IntermediateModel model) { this.model = model; @@ -96,6 +98,7 @@ public BaseClientBuilderClass(IntermediateModel model) { this.endpointRulesSpecUtils = new EndpointRulesSpecUtils(model); this.authSchemeSpecUtils = new AuthSchemeSpecUtils(model); this.configurationUtils = new ServiceClientConfigurationUtils(model); + this.endpointParamsKnowledgeIndex = EndpointParamsKnowledgeIndex.of(model); } @Override @@ -162,6 +165,8 @@ public TypeSpec poetSpec() { }); } + endpointParamsKnowledgeIndex.accountIdEndpointModeClassMethodSpec().ifPresent(builder::addMethod); + if (model.getCustomizationConfig().getServiceConfig().getClassName() != null) { builder.addMethod(setServiceConfigurationMethod()) .addMethod(beanStyleSetServiceConfigurationMethod()); @@ -176,8 +181,10 @@ public TypeSpec poetSpec() { addServiceHttpConfigIfNeeded(builder, model); builder.addMethod(invokePluginsMethod()); builder.addMethod(internalPluginsMethod()); - builder.addMethod(validateClientOptionsMethod()); + endpointParamsKnowledgeIndex.resolveAccountIdEndpointModeMethod().ifPresent(builder::addMethod); + + builder.addMethod(validateClientOptionsMethod()); return builder.build(); } @@ -430,6 +437,11 @@ private MethodSpec finalizeServiceConfigurationMethod() { builder.addCode(".option($T.CLIENT_CONTEXT_PARAMS, clientContextParams.build())", SdkClientOption.class); } + if (endpointParamsKnowledgeIndex.hasAccountIdEndpointModeBuiltIn()) { + builder.addCode(".option($T.$L, resolveAccountIdEndpointMode(config))", + AwsClientOption.class, model.getNamingStrategy().getEnumValueName("accountIdEndpointMode")); + } + builder.addCode(";\n"); builder.addStatement("return builder.build()"); return builder.build(); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterface.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterface.java index 34dae3bee3ef..7cc43e51a587 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterface.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterface.java @@ -36,6 +36,7 @@ import software.amazon.awssdk.codegen.poet.ClassSpec; import software.amazon.awssdk.codegen.poet.PoetUtils; import software.amazon.awssdk.codegen.poet.auth.scheme.AuthSchemeSpecUtils; +import software.amazon.awssdk.codegen.poet.rules.EndpointParamsKnowledgeIndex; import software.amazon.awssdk.codegen.poet.rules.EndpointRulesSpecUtils; import software.amazon.awssdk.codegen.utils.AuthUtils; import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; @@ -53,12 +54,15 @@ public class BaseClientBuilderInterface implements ClassSpec { private final EndpointRulesSpecUtils endpointRulesSpecUtils; private final AuthSchemeSpecUtils authSchemeSpecUtils; + private final EndpointParamsKnowledgeIndex endpointParamsKnowledgeIndex; + public BaseClientBuilderInterface(IntermediateModel model) { this.model = model; this.basePackage = model.getMetadata().getFullClientPackageName(); this.builderInterfaceName = ClassName.get(basePackage, model.getMetadata().getBaseBuilderInterface()); this.endpointRulesSpecUtils = new EndpointRulesSpecUtils(model); this.authSchemeSpecUtils = new AuthSchemeSpecUtils(model); + this.endpointParamsKnowledgeIndex = EndpointParamsKnowledgeIndex.of(model); } @Override @@ -87,17 +91,16 @@ public TypeSpec poetSpec() { builder.addMethod(authSchemeProviderMethod()); if (hasClientContextParams()) { - model.getClientContextParams().forEach((n, m) -> { - builder.addMethod(clientContextParamSetter(n, m)); - }); + model.getClientContextParams().forEach((n, m) -> builder.addMethod(clientContextParamSetter(n, m))); } if (hasSdkClientContextParams()) { - model.getCustomizationConfig().getCustomClientContextParams().forEach((n, m) -> { - builder.addMethod(clientContextParamSetter(n, m)); - }); + model.getCustomizationConfig().getCustomClientContextParams() + .forEach((n, m) -> builder.addMethod(clientContextParamSetter(n, m))); } + endpointParamsKnowledgeIndex.accountIdEndpointModeInterfaceMethodSpec().ifPresent(builder::addMethod); + if (generateTokenProviderMethod()) { builder.addMethod(tokenProviderMethod()); builder.addMethod(tokenIdentityProviderMethod()); @@ -185,9 +188,9 @@ private MethodSpec clientContextParamSetter(String name, ClientContextParam para TypeName type = endpointRulesSpecUtils.toJavaType(param.getType()); MethodSpec.Builder b = MethodSpec.methodBuilder(setterName) - .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) - .addParameter(type, setterName) - .returns(TypeVariableName.get("B")); + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .addParameter(type, setterName) + .returns(TypeVariableName.get("B")); PoetUtils.addJavadoc(b::addJavadoc, param.getDocumentation()); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointParamsKnowledgeIndex.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointParamsKnowledgeIndex.java new file mode 100644 index 000000000000..480262f48fda --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointParamsKnowledgeIndex.java @@ -0,0 +1,189 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.rules; + +import static javax.lang.model.element.Modifier.PRIVATE; +import static javax.lang.model.element.Modifier.STATIC; + +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.CodeBlock; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeName; +import com.squareup.javapoet.TypeVariableName; +import java.util.EnumMap; +import java.util.Map; +import java.util.Optional; +import javax.lang.model.element.Modifier; +import software.amazon.awssdk.awscore.client.config.AwsClientOption; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointModeResolver; +import software.amazon.awssdk.codegen.internal.Utils; +import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.model.internal.LocalParameter; +import software.amazon.awssdk.codegen.model.rules.endpoints.BuiltInParameter; +import software.amazon.awssdk.codegen.model.rules.endpoints.ParameterModel; +import software.amazon.awssdk.core.SelectedAuthScheme; +import software.amazon.awssdk.core.client.config.SdkClientConfiguration; +import software.amazon.awssdk.core.client.config.SdkClientOption; +import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity; +import software.amazon.awssdk.identity.spi.Identity; +import software.amazon.awssdk.utils.CompletableFutureUtils; +import software.amazon.awssdk.utils.internal.CodegenNamingUtils; + +/** + * Knowledge index to get access to endpoint parameters known to the client builder classes. + */ +public final class EndpointParamsKnowledgeIndex { + private static final Map BUILT_IN_PARAMS_FOR_CLIENT_BUILDER = + new EnumMap<>(BuiltInParameter.class); + private final IntermediateModel intermediateModel; + private Map parametersToGenerate = new EnumMap<>(BuiltInParameter.class); + + static { + BUILT_IN_PARAMS_FOR_CLIENT_BUILDER.put( + BuiltInParameter.AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE, + new LocalParameter("accountIdEndpointMode", + AccountIdEndpointMode.class, + CodeBlock.of("Sets the behavior when account ID based endpoints are created. " + + "See {@link $T} for values", AccountIdEndpointMode.class))); + } + + private EndpointParamsKnowledgeIndex(IntermediateModel intermediateModel) { + this.intermediateModel = intermediateModel; + this.parametersToGenerate = builtInsForClientBuilder(intermediateModel.getEndpointRuleSetModel().getParameters()); + } + + /** + * Creates a new {@link EndpointParamsKnowledgeIndex} using the given {@code intermediateModel}.. + */ + public static EndpointParamsKnowledgeIndex of(IntermediateModel intermediateModel) { + return new EndpointParamsKnowledgeIndex(intermediateModel); + } + + public boolean hasAccountIdEndpointModeBuiltIn() { + return parametersToGenerate.containsKey(BuiltInParameter.AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE); + } + + public Optional accountIdEndpointModeClassMethodSpec() { + if (hasAccountIdEndpointModeBuiltIn()) { + return Optional.of(clientClassBuilderParamSetter(accountIdEndpointModeBuiltInParam())); + } + return Optional.empty(); + } + + public Optional accountIdEndpointModeInterfaceMethodSpec() { + if (hasAccountIdEndpointModeBuiltIn()) { + return Optional.of(clientInterfaceBuilderParamSetter(accountIdEndpointModeBuiltInParam())); + } + return Optional.empty(); + } + + private LocalParameter accountIdEndpointModeBuiltInParam() { + return parametersToGenerate.get(BuiltInParameter.AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE); + } + + private MethodSpec clientClassBuilderParamSetter(LocalParameter param) { + String setterName = Utils.unCapitalize(CodegenNamingUtils.pascalCase(param.name())); + String keyName = intermediateModel.getNamingStrategy().getEnumValueName(param.name()); + TypeName type = TypeName.get(param.type()); + + return MethodSpec.methodBuilder(setterName) + .addModifiers(Modifier.PUBLIC) + .returns(TypeVariableName.get("B")) + .addParameter(type, setterName) + .addStatement("clientConfiguration.option($T.$L, $L)", + AwsClientOption.class, keyName, setterName) + .addStatement("return thisBuilder()") + .build(); + } + + private MethodSpec clientInterfaceBuilderParamSetter(LocalParameter param) { + String setterName = Utils.unCapitalize(CodegenNamingUtils.pascalCase(param.name())); + TypeName type = TypeName.get(param.type()); + + MethodSpec.Builder b = MethodSpec.methodBuilder(setterName) + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .addParameter(type, setterName) + .addJavadoc(param.documentation()) + .returns(TypeVariableName.get("B")); + + return b.build(); + } + + public Optional resolveAccountIdEndpointModeMethod() { + if (!hasAccountIdEndpointModeBuiltIn()) { + return Optional.empty(); + } + + String name = "accountIdEndpointMode"; + String keyName = intermediateModel.getNamingStrategy().getEnumValueName(name); + TypeName typeName = TypeName.get(AccountIdEndpointMode.class); + + MethodSpec.Builder builder = MethodSpec.methodBuilder("resolveAccountIdEndpointMode") + .addModifiers(PRIVATE) + .addParameter(SdkClientConfiguration.class, "config") + .returns(typeName); + + builder.addStatement("$T configuredMode = config.option($T.$L)", typeName, AwsClientOption.class, keyName); + + builder.beginControlFlow("if (configuredMode == null)"); + builder.addCode("configuredMode = $T.create()", AccountIdEndpointModeResolver.class); + builder.addCode(".profileFile(config.option($T.PROFILE_FILE_SUPPLIER))", SdkClientOption.class); + builder.addCode(".profileName(config.option($T.PROFILE_NAME))", SdkClientOption.class); + builder.addCode(".defaultMode($T.PREFERRED)", typeName); + builder.addStatement(".resolve()"); + builder.endControlFlow(); + + builder.addStatement("return configuredMode"); + return Optional.of(builder.build()); + } + + private Map builtInsForClientBuilder(Map serviceEndpointParams) { + Map actualParams = new EnumMap<>(BuiltInParameter.class); + serviceEndpointParams.forEach((k, v) -> { + BuiltInParameter builtInEnum = v.getBuiltInEnum(); + if (builtInEnum != null && BUILT_IN_PARAMS_FOR_CLIENT_BUILDER.containsKey(builtInEnum)) { + actualParams.put(builtInEnum, BUILT_IN_PARAMS_FOR_CLIENT_BUILDER.get(builtInEnum)); + } + }); + return actualParams; + } + + public Optional accountIdFromIdentityMethod() { + if (!hasAccountIdEndpointModeBuiltIn()) { + return Optional.empty(); + } + + ParameterizedTypeName paramType = ParameterizedTypeName.get(ClassName.get(SelectedAuthScheme.class), + TypeVariableName.get("T")); + + MethodSpec.Builder builder = MethodSpec.methodBuilder("accountIdFromIdentity") + .addModifiers(PRIVATE, STATIC) + .addTypeVariable(TypeVariableName.get("T", Identity.class)) + .addParameter(paramType, "selectedAuthScheme") + .returns(String.class); + + builder.addStatement("$T identity = $T.joinLikeSync(selectedAuthScheme.identity())", TypeVariableName.get("T"), + CompletableFutureUtils.class); + builder.addStatement("$T accountId = null", String.class); + builder.beginControlFlow("if (identity instanceof $T)", AwsCredentialsIdentity.class); + builder.addStatement("accountId = (($T) identity).accountId().orElse(null)", AwsCredentialsIdentity.class); + builder.endControlFlow(); + builder.addStatement("return accountId"); + return Optional.of(builder.build()); + } +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointResolverInterceptorSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointResolverInterceptorSpec.java index 1d54bd7e7928..8a7fbc034265 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointResolverInterceptorSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointResolverInterceptorSpec.java @@ -45,6 +45,7 @@ import software.amazon.awssdk.awscore.endpoints.authscheme.SigV4AuthScheme; import software.amazon.awssdk.awscore.endpoints.authscheme.SigV4aAuthScheme; import software.amazon.awssdk.awscore.util.SignerOverrideUtils; +import software.amazon.awssdk.codegen.internal.Utils; import software.amazon.awssdk.codegen.model.config.customization.EndpointAuthSchemeConfig; import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; import software.amazon.awssdk.codegen.model.intermediate.OperationModel; @@ -82,10 +83,12 @@ import software.amazon.awssdk.utils.AttributeMap; import software.amazon.awssdk.utils.HostnameValidator; import software.amazon.awssdk.utils.StringUtils; +import software.amazon.awssdk.utils.internal.CodegenNamingUtils; public class EndpointResolverInterceptorSpec implements ClassSpec { private final IntermediateModel model; private final EndpointRulesSpecUtils endpointRulesSpecUtils; + private final EndpointParamsKnowledgeIndex endpointParamsKnowledgeIndex; private final PoetExtension poetExtension; private final boolean dependsOnHttpAuthAws; private final boolean useSraAuth; @@ -93,6 +96,7 @@ public class EndpointResolverInterceptorSpec implements ClassSpec { public EndpointResolverInterceptorSpec(IntermediateModel model) { this.model = model; this.endpointRulesSpecUtils = new EndpointRulesSpecUtils(model); + this.endpointParamsKnowledgeIndex = EndpointParamsKnowledgeIndex.of(model); this.poetExtension = new PoetExtension(model); // We need to know whether the service has a dependency on the http-auth-aws module. Because we can't check that @@ -139,6 +143,7 @@ public TypeSpec poetSpec() { b.addMethod(signerProviderMethod()); } + endpointParamsKnowledgeIndex.accountIdFromIdentityMethod().ifPresent(b::addMethod); return b.build(); } @@ -271,41 +276,47 @@ private MethodSpec ruleParams() { if (m.getBuiltInEnum() == null) { return; } - - String setterName = endpointRulesSpecUtils.paramMethodName(n); - String builtInFn; + String setter = Utils.unCapitalize(CodegenNamingUtils.pascalCase(n)); switch (m.getBuiltInEnum()) { case AWS_REGION: - builtInFn = "regionBuiltIn"; + b.addStatement(endpointProviderUtilsSetter("regionBuiltIn", setter)); break; case AWS_USE_DUAL_STACK: - builtInFn = "dualStackEnabledBuiltIn"; + b.addStatement(endpointProviderUtilsSetter("dualStackEnabledBuiltIn", setter)); break; case AWS_USE_FIPS: - builtInFn = "fipsEnabledBuiltIn"; + b.addStatement(endpointProviderUtilsSetter("fipsEnabledBuiltIn", setter)); break; case SDK_ENDPOINT: - builtInFn = "endpointBuiltIn"; + b.addStatement(endpointProviderUtilsSetter("endpointBuiltIn", setter)); + break; + case AWS_AUTH_ACCOUNT_ID: + b.addStatement("builder.$N(accountIdFromIdentity(executionAttributes.getAttribute($T.SELECTED_AUTH_SCHEME)))", + setter, SdkInternalExecutionAttribute.class); + break; + case AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE: + b.addStatement("builder.$N(executionAttributes.getAttribute($T.$N).name())", + setter, AwsExecutionAttribute.class, + model.getNamingStrategy().getEnumValueName(m.getBuiltInEnum().name())); break; case AWS_S3_USE_GLOBAL_ENDPOINT: - builtInFn = "useGlobalEndpointBuiltIn"; + b.addStatement("builder.$N(executionAttributes.getAttribute($T.$N))", + setter, AwsExecutionAttribute.class, model.getNamingStrategy().getEnumValueName(n)); break; - // The S3 specific built-ins are set through the existing S3Configuration which is handled above + // The S3 specific built-ins are set through the existing S3Configuration and set through client context params case AWS_S3_ACCELERATE: case AWS_S3_DISABLE_MULTI_REGION_ACCESS_POINTS: case AWS_S3_FORCE_PATH_STYLE: case AWS_S3_USE_ARN_REGION: case AWS_S3_CONTROL_USE_ARN_REGION: - // end of S3 specific builtins + // end of S3 specific builtins + + // V2 doesn't support this, only regional endpoints case AWS_STS_USE_GLOBAL_ENDPOINT: - // V2 doesn't support this, only regional endpoints return; default: throw new RuntimeException("Don't know how to set built-in " + m.getBuiltInEnum()); } - - b.addStatement("builder.$N($T.$N(executionAttributes))", setterName, - endpointRulesSpecUtils.rulesRuntimeClassName("AwsEndpointProviderUtils"), builtInFn); }); if (hasClientContextParams()) { @@ -320,6 +331,11 @@ private MethodSpec ruleParams() { return b.build(); } + private CodeBlock endpointProviderUtilsSetter(String builtInFn, String setterName) { + return CodeBlock.of("builder.$N($T.$N(executionAttributes))", setterName, + endpointRulesSpecUtils.rulesRuntimeClassName("AwsEndpointProviderUtils"), builtInFn); + } + private ClassName paramsBuilderClass() { return endpointRulesSpecUtils.parametersClassName().nestedClass("Builder"); } diff --git a/codegen/src/main/resources/software/amazon/awssdk/codegen/rules/AwsEndpointProviderUtils.java.resource b/codegen/src/main/resources/software/amazon/awssdk/codegen/rules/AwsEndpointProviderUtils.java.resource index 8555b5153631..2859989b3716 100644 --- a/codegen/src/main/resources/software/amazon/awssdk/codegen/rules/AwsEndpointProviderUtils.java.resource +++ b/codegen/src/main/resources/software/amazon/awssdk/codegen/rules/AwsEndpointProviderUtils.java.resource @@ -52,10 +52,6 @@ public final class AwsEndpointProviderUtils { return null; } - public static Boolean useGlobalEndpointBuiltIn(ExecutionAttributes executionAttributes) { - return executionAttributes.getAttribute(AwsExecutionAttribute.USE_GLOBAL_ENDPOINT); - } - /** * True if the the {@link SdkExecutionAttribute#ENDPOINT_OVERRIDDEN} attribute is present and its value is * {@code true}, {@code false} otherwise. diff --git a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterfaceTest.java b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterfaceTest.java index 3839cb7bc3de..1430ba2e779d 100644 --- a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterfaceTest.java +++ b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderInterfaceTest.java @@ -17,6 +17,7 @@ import static software.amazon.awssdk.codegen.poet.ClientTestModels.bearerAuthServiceModels; import static software.amazon.awssdk.codegen.poet.ClientTestModels.composedClientJsonServiceModels; +import static software.amazon.awssdk.codegen.poet.ClientTestModels.queryServiceModels; import static software.amazon.awssdk.codegen.poet.ClientTestModels.restJsonServiceModels; import static software.amazon.awssdk.codegen.poet.builder.BuilderClassTestUtils.validateGeneration; @@ -37,6 +38,11 @@ public void baseClientBuilderInterfaceWithBearerAuth() { validateBaseClientBuilderInterfaceGeneration(bearerAuthServiceModels(), "test-bearer-auth-client-builder-interface.java"); } + @Test + public void baseClientBuilderInterfaceWithEndpointParams() { + validateBaseClientBuilderInterfaceGeneration(queryServiceModels(), "test-endpointparams-client-builder-interface.java"); + } + @Test public void syncHasCrossRegionAccessEnabledPropertyBuilderClass() { validateBaseClientBuilderInterfaceGeneration(composedClientJsonServiceModels(), diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-default-params-without-allowlist.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-default-params-without-allowlist.java index 078729faa1b7..61af97ebd2d3 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-default-params-without-allowlist.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-default-params-without-allowlist.java @@ -33,6 +33,11 @@ public final class DefaultQueryAuthSchemeParams implements QueryAuthSchemeParams private final Boolean useFIPSEndpoint; + private final String awsAccountId; + + + private final String awsAccountIdEndpointMode; + private final String endpointId; private final Boolean defaultTrueParam; @@ -54,6 +59,8 @@ private DefaultQueryAuthSchemeParams(Builder builder) { this.region = builder.region; this.useDualStackEndpoint = builder.useDualStackEndpoint; this.useFIPSEndpoint = builder.useFIPSEndpoint; + this.awsAccountId = builder.awsAccountId; + this.awsAccountIdEndpointMode = builder.awsAccountIdEndpointMode; this.endpointId = builder.endpointId; this.defaultTrueParam = Validate.paramNotNull(builder.defaultTrueParam, "defaultTrueParam"); this.defaultStringParam = Validate.paramNotNull(builder.defaultStringParam, "defaultStringParam"); @@ -88,6 +95,16 @@ public Boolean useFipsEndpoint() { return useFIPSEndpoint; } + @Override + public String awsAccountId() { + return awsAccountId; + } + + @Override + public String awsAccountIdEndpointMode() { + return awsAccountIdEndpointMode; + } + @Override public String endpointId() { return endpointId; @@ -143,6 +160,10 @@ private static final class Builder implements QueryAuthSchemeParams.Builder, Que private Boolean useFIPSEndpoint; + private String awsAccountId; + + private String awsAccountIdEndpointMode; + private String endpointId; private Boolean defaultTrueParam = true; @@ -167,6 +188,8 @@ private static final class Builder implements QueryAuthSchemeParams.Builder, Que this.region = params.region; this.useDualStackEndpoint = params.useDualStackEndpoint; this.useFIPSEndpoint = params.useFIPSEndpoint; + this.awsAccountId = params.awsAccountId; + this.awsAccountIdEndpointMode = params.awsAccountIdEndpointMode; this.endpointId = params.endpointId; this.defaultTrueParam = params.defaultTrueParam; this.defaultStringParam = params.defaultStringParam; @@ -201,6 +224,18 @@ public Builder useFipsEndpoint(Boolean useFIPSEndpoint) { return this; } + @Override + public Builder awsAccountId(String awsAccountId) { + this.awsAccountId = awsAccountId; + return this; + } + + @Override + public Builder awsAccountIdEndpointMode(String awsAccountIdEndpointMode) { + this.awsAccountIdEndpointMode = awsAccountIdEndpointMode; + return this; + } + @Override public Builder endpointId(String endpointId) { this.endpointId = endpointId; diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-endpoint-provider-without-allowlist.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-endpoint-provider-without-allowlist.java index 97e874a1cf11..8288458c45eb 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-endpoint-provider-without-allowlist.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-endpoint-provider-without-allowlist.java @@ -43,6 +43,7 @@ public static QueryAuthSchemeProvider create() { public List resolveAuthScheme(QueryAuthSchemeParams params) { QueryEndpointParams endpointParameters = QueryEndpointParams.builder().region(params.region()) .useDualStackEndpoint(params.useDualStackEndpoint()).useFipsEndpoint(params.useFipsEndpoint()) + .awsAccountId(params.awsAccountId()).awsAccountIdEndpointMode(params.awsAccountIdEndpointMode()) .endpointId(params.endpointId()).defaultTrueParam(params.defaultTrueParam()) .defaultStringParam(params.defaultStringParam()).deprecatedParam(params.deprecatedParam()) .booleanContextParam(params.booleanContextParam()).stringContextParam(params.stringContextParam()) diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-params-without-allowlist.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-params-without-allowlist.java index e9020e887cb6..1435e9ffee22 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-params-without-allowlist.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-params-without-allowlist.java @@ -49,6 +49,9 @@ static Builder builder() { Boolean useFipsEndpoint(); + String awsAccountId(); + + String awsAccountIdEndpointMode(); String endpointId(); /** @@ -90,6 +93,9 @@ interface Builder extends CopyableBuilder { Builder useFipsEndpoint(Boolean useFIPSEndpoint); + Builder awsAccountId(String awsAccountId); + + Builder awsAccountIdEndpointMode(String awsAccountIdEndpointMode); Builder endpointId(String endpointId); /** diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-without-allowlist-auth-scheme-interceptor.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-without-allowlist-auth-scheme-interceptor.java index 3c48c7bd907d..0546204d1ab1 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-without-allowlist-auth-scheme-interceptor.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-without-allowlist-auth-scheme-interceptor.java @@ -90,6 +90,8 @@ private QueryAuthSchemeParams authSchemeParams(SdkRequest request, ExecutionAttr builder.region(endpointParams.region()); builder.useDualStackEndpoint(endpointParams.useDualStackEndpoint()); builder.useFipsEndpoint(endpointParams.useFipsEndpoint()); + builder.awsAccountId(endpointParams.awsAccountId()); + builder.awsAccountIdEndpointMode(endpointParams.awsAccountIdEndpointMode()); builder.endpointId(endpointParams.endpointId()); builder.defaultTrueParam(endpointParams.defaultTrueParam()); builder.defaultStringParam(endpointParams.defaultStringParam()); diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java index 0529fabd1584..eea56f51aca8 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java @@ -11,6 +11,8 @@ import software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider; import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder; import software.amazon.awssdk.awscore.client.config.AwsClientOption; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointModeResolver; import software.amazon.awssdk.core.SdkPlugin; import software.amazon.awssdk.core.client.config.SdkClientConfiguration; import software.amazon.awssdk.core.client.config.SdkClientOption; @@ -90,8 +92,9 @@ protected final SdkClientConfiguration finalizeServiceConfiguration(SdkClientCon } return result.build(); }); - builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors).option(SdkClientOption.CLIENT_CONTEXT_PARAMS, - clientContextParams.build()); + builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors) + .option(SdkClientOption.CLIENT_CONTEXT_PARAMS, clientContextParams.build()) + .option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, resolveAccountIdEndpointMode(config)); return builder.build(); } @@ -143,6 +146,10 @@ public B stringContextParam(String stringContextParam) { return thisBuilder(); } + public B accountIdEndpointMode(AccountIdEndpointMode accountIdEndpointMode) { + clientConfiguration.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, accountIdEndpointMode); + return thisBuilder(); + } private IdentityProvider defaultTokenProvider() { return DefaultAwsTokenProvider.create(); } @@ -167,6 +174,17 @@ private List internalPlugins(SdkClientConfiguration config) { return Collections.emptyList(); } + private AccountIdEndpointMode resolveAccountIdEndpointMode(SdkClientConfiguration config) { + AccountIdEndpointMode configuredMode = config.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE); + if (configuredMode == null) { + configuredMode = AccountIdEndpointModeResolver.create() + .profileFile(config.option(SdkClientOption.PROFILE_FILE_SUPPLIER)) + .profileName(config.option(SdkClientOption.PROFILE_NAME)).defaultMode(AccountIdEndpointMode.PREFERRED) + .resolve(); + } + return configuredMode; + } + protected static void validateClientOptions(SdkClientConfiguration c) { Validate.notNull(c.option(AwsClientOption.TOKEN_IDENTITY_PROVIDER), "The 'tokenProvider' must be configured in the client builder."); diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java index 12e6fe65e94f..614959776325 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java @@ -11,6 +11,8 @@ import software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider; import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder; import software.amazon.awssdk.awscore.client.config.AwsClientOption; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointModeResolver; import software.amazon.awssdk.core.SdkPlugin; import software.amazon.awssdk.core.client.config.SdkClientConfiguration; import software.amazon.awssdk.core.client.config.SdkClientOption; @@ -89,8 +91,9 @@ protected final SdkClientConfiguration finalizeServiceConfiguration(SdkClientCon } return result.build(); }); - builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors).option(SdkClientOption.CLIENT_CONTEXT_PARAMS, - clientContextParams.build()); + builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors) + .option(SdkClientOption.CLIENT_CONTEXT_PARAMS, clientContextParams.build()) + .option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, resolveAccountIdEndpointMode(config)); return builder.build(); } @@ -140,6 +143,11 @@ public B stringContextParam(String stringContextParam) { return thisBuilder(); } + public B accountIdEndpointMode(AccountIdEndpointMode accountIdEndpointMode) { + clientConfiguration.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, accountIdEndpointMode); + return thisBuilder(); + } + private IdentityProvider defaultTokenProvider() { return DefaultAwsTokenProvider.create(); } @@ -164,6 +172,17 @@ private List internalPlugins(SdkClientConfiguration config) { return Collections.emptyList(); } + private AccountIdEndpointMode resolveAccountIdEndpointMode(SdkClientConfiguration config) { + AccountIdEndpointMode configuredMode = config.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE); + if (configuredMode == null) { + configuredMode = AccountIdEndpointModeResolver.create() + .profileFile(config.option(SdkClientOption.PROFILE_FILE_SUPPLIER)) + .profileName(config.option(SdkClientOption.PROFILE_NAME)).defaultMode(AccountIdEndpointMode.PREFERRED) + .resolve(); + } + return configuredMode; + } + protected static void validateClientOptions(SdkClientConfiguration c) { Validate.notNull(c.option(AwsClientOption.TOKEN_IDENTITY_PROVIDER), "The 'tokenProvider' must be configured in the client builder."); diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java index 5e7c97377b7c..7b477cc3df0e 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java @@ -11,6 +11,8 @@ import software.amazon.awssdk.auth.token.signer.aws.BearerTokenSigner; import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder; import software.amazon.awssdk.awscore.client.config.AwsClientOption; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointModeResolver; import software.amazon.awssdk.core.SdkPlugin; import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; import software.amazon.awssdk.core.client.config.SdkClientConfiguration; @@ -82,8 +84,9 @@ protected final SdkClientConfiguration finalizeServiceConfiguration(SdkClientCon } return result.build(); }); - builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors).option(SdkClientOption.CLIENT_CONTEXT_PARAMS, - clientContextParams.build()); + builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors) + .option(SdkClientOption.CLIENT_CONTEXT_PARAMS, clientContextParams.build()) + .option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, resolveAccountIdEndpointMode(config)); return builder.build(); } @@ -110,6 +113,11 @@ public B stringContextParam(String stringContextParam) { return thisBuilder(); } + public B accountIdEndpointMode(AccountIdEndpointMode accountIdEndpointMode) { + clientConfiguration.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, accountIdEndpointMode); + return thisBuilder(); + } + private IdentityProvider defaultTokenProvider() { return DefaultAwsTokenProvider.create(); } @@ -138,6 +146,17 @@ private List internalPlugins(SdkClientConfiguration config) { return Collections.emptyList(); } + private AccountIdEndpointMode resolveAccountIdEndpointMode(SdkClientConfiguration config) { + AccountIdEndpointMode configuredMode = config.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE); + if (configuredMode == null) { + configuredMode = AccountIdEndpointModeResolver.create() + .profileFile(config.option(SdkClientOption.PROFILE_FILE_SUPPLIER)) + .profileName(config.option(SdkClientOption.PROFILE_NAME)).defaultMode(AccountIdEndpointMode.PREFERRED) + .resolve(); + } + return configuredMode; + } + protected static void validateClientOptions(SdkClientConfiguration c) { Validate.notNull(c.option(SdkAdvancedClientOption.SIGNER), "The 'overrideConfiguration.advancedOption[SIGNER]' must be configured in the client builder."); diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-endpointparams-client-builder-interface.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-endpointparams-client-builder-interface.java new file mode 100644 index 000000000000..2b8c8460e2c3 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-endpointparams-client-builder-interface.java @@ -0,0 +1,80 @@ +package software.amazon.awssdk.services.query; + +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.auth.token.credentials.SdkTokenProvider; +import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.identity.spi.IdentityProvider; +import software.amazon.awssdk.identity.spi.TokenIdentity; +import software.amazon.awssdk.services.query.auth.scheme.QueryAuthSchemeProvider; +import software.amazon.awssdk.services.query.endpoints.QueryEndpointProvider; + +/** + * This includes configuration specific to Query Service that is supported by both {@link QueryClientBuilder} and + * {@link QueryAsyncClientBuilder}. + */ +@Generated("software.amazon.awssdk:codegen") +@SdkPublicApi +public interface QueryBaseClientBuilder, C> extends AwsClientBuilder { + /** + * Set the {@link QueryEndpointProvider} implementation that will be used by the client to determine the endpoint + * for each request. This is optional; if none is provided a default implementation will be used the SDK. + */ + default B endpointProvider(QueryEndpointProvider endpointProvider) { + throw new UnsupportedOperationException(); + } + + /** + * Set the {@link QueryAuthSchemeProvider} implementation that will be used by the client to resolve the auth scheme + * for each request. This is optional; if none is provided a default implementation will be used the SDK. + */ + default B authSchemeProvider(QueryAuthSchemeProvider authSchemeProvider) { + throw new UnsupportedOperationException(); + } + + /** + * A boolean client context parameter + */ + B booleanContextParam(Boolean booleanContextParam); + + /** + * a string client context parameter + */ + B stringContextParam(String stringContextParam); + + /** + * Sets the behavior when account ID based endpoints are created. See {@link AccountIdEndpointMode} for values + */ + B accountIdEndpointMode(AccountIdEndpointMode accountIdEndpointMode); + + /** + * Set the token provider to use for bearer token authorization. This is optional, if none is provided, the SDK will + * use {@link software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider}. + *

+ * If the service, or any of its operations require Bearer Token Authorization, then the SDK will default to this + * token provider to retrieve the token to use for authorization. + *

+ * This provider works in conjunction with the + * {@code software.amazon.awssdk.core.client.config.SdkAdvancedClientOption.TOKEN_SIGNER} set on the client. By + * default it is {@link software.amazon.awssdk.auth.token.signer.aws.BearerTokenSigner}. + */ + default B tokenProvider(SdkTokenProvider tokenProvider) { + return tokenProvider((IdentityProvider) tokenProvider); + } + + /** + * Set the token provider to use for bearer token authorization. This is optional, if none is provided, the SDK will + * use {@link software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider}. + *

+ * If the service, or any of its operations require Bearer Token Authorization, then the SDK will default to this + * token provider to retrieve the token to use for authorization. + *

+ * This provider works in conjunction with the + * {@code software.amazon.awssdk.core.client.config.SdkAdvancedClientOption.TOKEN_SIGNER} set on the client. By + * default it is {@link software.amazon.awssdk.auth.token.signer.aws.BearerTokenSigner}. + */ + default B tokenProvider(IdentityProvider tokenProvider) { + throw new UnsupportedOperationException(); + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java index 5e7c97377b7c..7b477cc3df0e 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java @@ -11,6 +11,8 @@ import software.amazon.awssdk.auth.token.signer.aws.BearerTokenSigner; import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder; import software.amazon.awssdk.awscore.client.config.AwsClientOption; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointModeResolver; import software.amazon.awssdk.core.SdkPlugin; import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; import software.amazon.awssdk.core.client.config.SdkClientConfiguration; @@ -82,8 +84,9 @@ protected final SdkClientConfiguration finalizeServiceConfiguration(SdkClientCon } return result.build(); }); - builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors).option(SdkClientOption.CLIENT_CONTEXT_PARAMS, - clientContextParams.build()); + builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, interceptors) + .option(SdkClientOption.CLIENT_CONTEXT_PARAMS, clientContextParams.build()) + .option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, resolveAccountIdEndpointMode(config)); return builder.build(); } @@ -110,6 +113,11 @@ public B stringContextParam(String stringContextParam) { return thisBuilder(); } + public B accountIdEndpointMode(AccountIdEndpointMode accountIdEndpointMode) { + clientConfiguration.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE, accountIdEndpointMode); + return thisBuilder(); + } + private IdentityProvider defaultTokenProvider() { return DefaultAwsTokenProvider.create(); } @@ -138,6 +146,17 @@ private List internalPlugins(SdkClientConfiguration config) { return Collections.emptyList(); } + private AccountIdEndpointMode resolveAccountIdEndpointMode(SdkClientConfiguration config) { + AccountIdEndpointMode configuredMode = config.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE); + if (configuredMode == null) { + configuredMode = AccountIdEndpointModeResolver.create() + .profileFile(config.option(SdkClientOption.PROFILE_FILE_SUPPLIER)) + .profileName(config.option(SdkClientOption.PROFILE_NAME)).defaultMode(AccountIdEndpointMode.PREFERRED) + .resolve(); + } + return configuredMode; + } + protected static void validateClientOptions(SdkClientConfiguration c) { Validate.notNull(c.option(SdkAdvancedClientOption.SIGNER), "The 'overrideConfiguration.advancedOption[SIGNER]' must be configured in the client builder."); diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/composedclient/customization.config b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/composedclient/customization.config index 5f33dce1133f..1e2f92deee04 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/composedclient/customization.config +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/composedclient/customization.config @@ -11,7 +11,7 @@ "asyncClientDecorator": "software.amazon.awssdk.services.builder.AsyncClientDecorator", "asyncClientDecoratorClass": true, "syncClientDecoratorClass": true, - "customClientContextParams":{ + "customClientContextParams":{ "CustomParameter":{ "documentation":"Enables this client to use Custom Parameter", "type":"boolean" diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/query/endpoint-rule-set.json b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/query/endpoint-rule-set.json index dff6431e44c2..13da37d1d7ee 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/query/endpoint-rule-set.json +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/query/endpoint-rule-set.json @@ -16,6 +16,14 @@ "type": "boolean", "builtIn": "AWS::UseFIPS" }, + "awsAccountId": { + "type": "String", + "builtIn": "AWS::Auth::AccountId" + }, + "awsAccountIdEndpointMode": { + "type": "String", + "builtIn": "AWS::Auth::AccountIdEndpointMode" + }, "endpointId": { "type": "string" }, diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-parameters.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-parameters.java index 7180601639af..7ba01efd69e4 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-parameters.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-parameters.java @@ -18,6 +18,11 @@ public final class QueryEndpointParams implements ToCopyableBuilder { Builder useFipsEndpoint(Boolean useFIPSEndpoint); + Builder awsAccountId(String awsAccountId); + + Builder awsAccountIdEndpointMode(String awsAccountIdEndpointMode); + Builder endpointId(String endpointId); Builder defaultTrueParam(Boolean defaultTrueParam); @@ -126,6 +145,10 @@ private static class BuilderImpl implements Builder { private Boolean useFIPSEndpoint; + private String awsAccountId; + + private String awsAccountIdEndpointMode; + private String endpointId; private Boolean defaultTrueParam = true; @@ -147,6 +170,8 @@ private BuilderImpl(QueryEndpointParams builder) { this.region = builder.region; this.useDualStackEndpoint = builder.useDualStackEndpoint; this.useFIPSEndpoint = builder.useFIPSEndpoint; + this.awsAccountId = builder.awsAccountId; + this.awsAccountIdEndpointMode = builder.awsAccountIdEndpointMode; this.endpointId = builder.endpointId; this.defaultTrueParam = builder.defaultTrueParam; this.defaultStringParam = builder.defaultStringParam; @@ -174,6 +199,18 @@ public Builder useFipsEndpoint(Boolean useFIPSEndpoint) { return this; } + @Override + public Builder awsAccountId(String awsAccountId) { + this.awsAccountId = awsAccountId; + return this; + } + + @Override + public Builder awsAccountIdEndpointMode(String awsAccountIdEndpointMode) { + this.awsAccountIdEndpointMode = awsAccountIdEndpointMode; + return this; + } + @Override public Builder endpointId(String endpointId) { this.endpointId = endpointId; diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-class.java index 8aef420f4a00..82ae4b7717e0 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-class.java @@ -54,6 +54,12 @@ private static Map toIdentifierValueMap(QueryEndpointParams p if (params.useFipsEndpoint() != null) { paramsMap.put(Identifier.of("useFIPSEndpoint"), Value.fromBool(params.useFipsEndpoint())); } + if (params.awsAccountId() != null) { + paramsMap.put(Identifier.of("awsAccountId"), Value.fromStr(params.awsAccountId())); + } + if (params.awsAccountIdEndpointMode() != null) { + paramsMap.put(Identifier.of("awsAccountIdEndpointMode"), Value.fromStr(params.awsAccountIdEndpointMode())); + } if (params.endpointId() != null) { paramsMap.put(Identifier.of("endpointId"), Value.fromStr(params.endpointId())); } @@ -339,6 +345,13 @@ private static EndpointRuleset ruleSet() { .addParameter( Parameter.builder().name("useFIPSEndpoint").type(ParameterType.fromValue("boolean")) .required(false).builtIn("AWS::UseFIPS").build()) + .addParameter( + Parameter.builder().name("awsAccountId").type(ParameterType.fromValue("String")) + .required(false).builtIn("AWS::Auth::AccountId").build()) + .addParameter( + Parameter.builder().name("awsAccountIdEndpointMode") + .type(ParameterType.fromValue("String")).required(false) + .builtIn("AWS::Auth::AccountIdEndpointMode").build()) .addParameter( Parameter.builder().name("endpointId").type(ParameterType.fromValue("string")) .required(false).build()) diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-know-prop-override-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-know-prop-override-class.java index ea1d2442d4ae..d8507c97a01c 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-know-prop-override-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-provider-know-prop-override-class.java @@ -53,6 +53,12 @@ private static Map toIdentifierValueMap(QueryEndpointParams p if (params.useFipsEndpoint() != null) { paramsMap.put(Identifier.of("useFIPSEndpoint"), Value.fromBool(params.useFipsEndpoint())); } + if (params.awsAccountId() != null) { + paramsMap.put(Identifier.of("awsAccountId"), Value.fromStr(params.awsAccountId())); + } + if (params.awsAccountIdEndpointMode() != null) { + paramsMap.put(Identifier.of("awsAccountIdEndpointMode"), Value.fromStr(params.awsAccountIdEndpointMode())); + } if (params.endpointId() != null) { paramsMap.put(Identifier.of("endpointId"), Value.fromStr(params.endpointId())); } @@ -338,6 +344,13 @@ private static EndpointRuleset ruleSet() { .addParameter( Parameter.builder().name("useFIPSEndpoint").type(ParameterType.fromValue("boolean")) .required(false).builtIn("AWS::UseFIPS").build()) + .addParameter( + Parameter.builder().name("awsAccountId").type(ParameterType.fromValue("String")) + .required(false).builtIn("AWS::Auth::AccountId").build()) + .addParameter( + Parameter.builder().name("awsAccountIdEndpointMode") + .type(ParameterType.fromValue("String")).required(false) + .builtIn("AWS::Auth::AccountIdEndpointMode").build()) .addParameter( Parameter.builder().name("endpointId").type(ParameterType.fromValue("string")) .required(false).build()) diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor-preSra.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor-preSra.java index e8c672150ac4..b7a7adfd9ecb 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor-preSra.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor-preSra.java @@ -31,6 +31,7 @@ import software.amazon.awssdk.http.auth.aws.signer.AwsV4aHttpSigner; import software.amazon.awssdk.http.auth.aws.signer.RegionSet; import software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeOption; +import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity; import software.amazon.awssdk.identity.spi.Identity; import software.amazon.awssdk.metrics.MetricCollector; import software.amazon.awssdk.services.query.endpoints.QueryClientContextParams; @@ -38,6 +39,8 @@ import software.amazon.awssdk.services.query.endpoints.QueryEndpointProvider; import software.amazon.awssdk.services.query.model.OperationWithContextParamRequest; import software.amazon.awssdk.utils.AttributeMap; +import software.amazon.awssdk.utils.CompletableFutureUtils; + @Generated("software.amazon.awssdk:codegen") @SdkInternalApi @@ -113,6 +116,10 @@ public static QueryEndpointParams ruleParams(SdkRequest request, ExecutionAttrib builder.region(AwsEndpointProviderUtils.regionBuiltIn(executionAttributes)); builder.useDualStackEndpoint(AwsEndpointProviderUtils.dualStackEnabledBuiltIn(executionAttributes)); builder.useFipsEndpoint(AwsEndpointProviderUtils.fipsEnabledBuiltIn(executionAttributes)); + builder.awsAccountId(accountIdFromIdentity(executionAttributes + .getAttribute(SdkInternalExecutionAttribute.SELECTED_AUTH_SCHEME))); + builder.awsAccountIdEndpointMode(executionAttributes + .getAttribute(AwsExecutionAttribute.AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE).name()); setClientContextParams(builder, executionAttributes); setContextParams(builder, executionAttributes.getAttribute(AwsExecutionAttribute.OPERATION_NAME), request); setStaticContextParams(builder, executionAttributes.getAttribute(AwsExecutionAttribute.OPERATION_NAME)); @@ -213,4 +220,13 @@ private Supplier signerProvider(EndpointAuthScheme authScheme) { } throw SdkClientException.create("Don't know how to create signer for auth scheme: " + authScheme.name()); } + + private static String accountIdFromIdentity(SelectedAuthScheme selectedAuthScheme) { + T identity = CompletableFutureUtils.joinLikeSync(selectedAuthScheme.identity()); + String accountId = null; + if (identity instanceof AwsCredentialsIdentity) { + accountId = ((AwsCredentialsIdentity) identity).accountId().orElse(null); + } + return accountId; + } } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor.java index d1d044a3e382..aa6e18499af3 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-resolve-interceptor.java @@ -26,6 +26,7 @@ import software.amazon.awssdk.http.auth.aws.signer.AwsV4aHttpSigner; import software.amazon.awssdk.http.auth.aws.signer.RegionSet; import software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeOption; +import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity; import software.amazon.awssdk.identity.spi.Identity; import software.amazon.awssdk.metrics.MetricCollector; import software.amazon.awssdk.services.query.endpoints.QueryClientContextParams; @@ -33,6 +34,7 @@ import software.amazon.awssdk.services.query.endpoints.QueryEndpointProvider; import software.amazon.awssdk.services.query.model.OperationWithContextParamRequest; import software.amazon.awssdk.utils.AttributeMap; +import software.amazon.awssdk.utils.CompletableFutureUtils; @Generated("software.amazon.awssdk:codegen") @SdkInternalApi @@ -96,6 +98,10 @@ public static QueryEndpointParams ruleParams(SdkRequest request, ExecutionAttrib builder.region(AwsEndpointProviderUtils.regionBuiltIn(executionAttributes)); builder.useDualStackEndpoint(AwsEndpointProviderUtils.dualStackEnabledBuiltIn(executionAttributes)); builder.useFipsEndpoint(AwsEndpointProviderUtils.fipsEnabledBuiltIn(executionAttributes)); + builder.awsAccountId(accountIdFromIdentity(executionAttributes + .getAttribute(SdkInternalExecutionAttribute.SELECTED_AUTH_SCHEME))); + builder.awsAccountIdEndpointMode(executionAttributes + .getAttribute(AwsExecutionAttribute.AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE).name()); setClientContextParams(builder, executionAttributes); setContextParams(builder, executionAttributes.getAttribute(AwsExecutionAttribute.OPERATION_NAME), request); setStaticContextParams(builder, executionAttributes.getAttribute(AwsExecutionAttribute.OPERATION_NAME)); @@ -187,4 +193,13 @@ private static Optional hostPrefix(String operationName, SdkRequest requ return Optional.empty(); } } + + private static String accountIdFromIdentity(SelectedAuthScheme selectedAuthScheme) { + T identity = CompletableFutureUtils.joinLikeSync(selectedAuthScheme.identity()); + String accountId = null; + if (identity instanceof AwsCredentialsIdentity) { + accountId = ((AwsCredentialsIdentity) identity).accountId().orElse(null); + } + return accountId; + } } diff --git a/core/annotations/pom.xml b/core/annotations/pom.xml index 054104b7c377..85a024b9ae24 100644 --- a/core/annotations/pom.xml +++ b/core/annotations/pom.xml @@ -20,7 +20,7 @@ core software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/arns/pom.xml b/core/arns/pom.xml index 8828e059b3c7..90eb5bd90bf0 100644 --- a/core/arns/pom.xml +++ b/core/arns/pom.xml @@ -20,7 +20,7 @@ core software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/auth-crt/pom.xml b/core/auth-crt/pom.xml index 38ca20b3af67..e1233041ad5e 100644 --- a/core/auth-crt/pom.xml +++ b/core/auth-crt/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 auth-crt diff --git a/core/auth/pom.xml b/core/auth/pom.xml index 824ddb83776c..e142273bb876 100644 --- a/core/auth/pom.xml +++ b/core/auth/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 auth diff --git a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/AwsBasicCredentials.java b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/AwsBasicCredentials.java index 52c2ec149ad6..696d35aa9c15 100644 --- a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/AwsBasicCredentials.java +++ b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/AwsBasicCredentials.java @@ -44,6 +44,8 @@ public final class AwsBasicCredentials implements AwsCredentials, ToCopyableBuilder { /** * A set of AWS credentials without an access key or secret access key, indicating that anonymous access should be used. + *

+ * This should be accessed via {@link AnonymousCredentialsProvider#resolveCredentials()}. */ // TODO(sra-identity-and-auth): Check if this static member can be removed after cleanup @SdkInternalApi @@ -53,12 +55,14 @@ public final class AwsBasicCredentials implements AwsCredentials, private final String secretAccessKey; private final boolean validateCredentials; private final String providerName; + private final String accountId; private AwsBasicCredentials(Builder builder) { this.accessKeyId = trimToNull(builder.accessKeyId); this.secretAccessKey = trimToNull(builder.secretAccessKey); this.validateCredentials = builder.validateCredentials; this.providerName = builder.providerName; + this.accountId = builder.accountId; if (builder.validateCredentials) { Validate.notNull(this.accessKeyId, "Access key ID cannot be blank."); @@ -77,6 +81,7 @@ protected AwsBasicCredentials(String accessKeyId, String secretAccessKey) { this.secretAccessKey = trimToNull(secretAccessKey); this.validateCredentials = false; this.providerName = null; + this.accountId = null; } public static Builder builder() { @@ -88,7 +93,7 @@ public static Builder builder() { * * @param accessKeyId The AWS access key, used to identify the user interacting with AWS. * @param secretAccessKey The AWS secret access key, used to authenticate the user interacting with AWS. - * */ + */ public static AwsBasicCredentials create(String accessKeyId, String secretAccessKey) { return builder().accessKeyId(accessKeyId) .secretAccessKey(secretAccessKey) @@ -119,11 +124,20 @@ public Optional providerName() { return Optional.ofNullable(providerName); } + /** + * Retrieve the AWS account id associated with this credentials identity, if found. + */ + @Override + public Optional accountId() { + return Optional.ofNullable(accountId); + } + @Override public String toString() { return ToString.builder("AwsCredentials") .add("accessKeyId", accessKeyId) .add("providerName", providerName) + .add("accountId", accountId) .build(); } @@ -137,7 +151,8 @@ public boolean equals(Object o) { } AwsBasicCredentials that = (AwsBasicCredentials) o; return Objects.equals(accessKeyId, that.accessKeyId) && - Objects.equals(secretAccessKey, that.secretAccessKey); + Objects.equals(secretAccessKey, that.secretAccessKey) && + Objects.equals(accountId, that.accountId().orElse(null)); } @Override @@ -145,6 +160,7 @@ public int hashCode() { int hashCode = 1; hashCode = 31 * hashCode + Objects.hashCode(accessKeyId()); hashCode = 31 * hashCode + Objects.hashCode(secretAccessKey()); + hashCode = 31 * hashCode + Objects.hashCode(accountId); return hashCode; } @@ -152,6 +168,7 @@ public int hashCode() { public Builder toBuilder() { return builder().accessKeyId(accessKeyId) .secretAccessKey(secretAccessKey) + .accountId(accountId) .validateCredentials(validateCredentials) .providerName(providerName); } @@ -169,6 +186,7 @@ public static final class Builder implements CopyableBuilder providerName() { return Optional.ofNullable(providerName); } + @Override + public Optional accountId() { + return Optional.ofNullable(accountId); + } + @Override public String toString() { return ToString.builder("AwsSessionCredentials") .add("accessKeyId", accessKeyId()) .add("providerName", providerName) + .add("accountId", accountId) .build(); } @@ -132,6 +140,7 @@ public boolean equals(Object o) { return Objects.equals(accessKeyId, that.accessKeyId) && Objects.equals(secretAccessKey, that.secretAccessKey) && Objects.equals(sessionToken, that.sessionToken) && + Objects.equals(accountId, that.accountId().orElse(null)) && Objects.equals(expirationTime, that.expirationTime().orElse(null)); } @@ -141,6 +150,7 @@ public int hashCode() { hashCode = 31 * hashCode + Objects.hashCode(accessKeyId()); hashCode = 31 * hashCode + Objects.hashCode(secretAccessKey()); hashCode = 31 * hashCode + Objects.hashCode(sessionToken()); + hashCode = 31 * hashCode + Objects.hashCode(accountId); hashCode = 31 * hashCode + Objects.hashCode(expirationTime); return hashCode; } @@ -150,6 +160,7 @@ public Builder toBuilder() { return builder().accessKeyId(accessKeyId) .secretAccessKey(secretAccessKey) .sessionToken(sessionToken) + .accountId(accountId) .expirationTime(expirationTime) .providerName(providerName); } @@ -167,6 +178,7 @@ public static final class Builder implements CopyableBuilder executableCommand; private final Duration credentialRefreshThreshold; private final long processOutputLimit; + private final String staticAccountId; private final CachedSupplier processCredentialCache; @@ -91,6 +92,7 @@ private ProcessCredentialsProvider(Builder builder) { this.commandFromBuilder = builder.command; this.commandAsListOfStringsFromBuilder = builder.commandAsListOfStrings; this.asyncCredentialUpdateEnabled = builder.asyncCredentialUpdateEnabled; + this.staticAccountId = builder.staticAccountId; CachedSupplier.Builder cacheBuilder = CachedSupplier.builder(this::refreshCredentials) .cachedValueName(toString()); @@ -176,20 +178,26 @@ private AwsCredentials credentials(JsonNode credentialsJson) { String accessKeyId = getText(credentialsJson, "AccessKeyId"); String secretAccessKey = getText(credentialsJson, "SecretAccessKey"); String sessionToken = getText(credentialsJson, "SessionToken"); + String accountId = getText(credentialsJson, "AccountId"); Validate.notEmpty(accessKeyId, "AccessKeyId cannot be empty."); Validate.notEmpty(secretAccessKey, "SecretAccessKey cannot be empty."); + String resolvedAccountId = accountId == null ? this.staticAccountId : accountId; + return sessionToken != null ? AwsSessionCredentials.builder() .accessKeyId(accessKeyId) .secretAccessKey(secretAccessKey) .sessionToken(sessionToken) + .expirationTime(credentialExpirationTime(credentialsJson)) + .accountId(resolvedAccountId) .providerName(PROVIDER_NAME) .build() : AwsBasicCredentials.builder() .accessKeyId(accessKeyId) .secretAccessKey(secretAccessKey) + .accountId(resolvedAccountId) .providerName(PROVIDER_NAME) .build(); } @@ -261,6 +269,7 @@ public static class Builder implements CopyableBuilder commandAsListOfStrings; private Duration credentialRefreshThreshold = Duration.ofSeconds(15); private long processOutputLimit = 64000; + private String staticAccountId; /** * @see #builder() @@ -274,6 +283,7 @@ private Builder(ProcessCredentialsProvider provider) { this.commandAsListOfStrings = provider.commandAsListOfStringsFromBuilder; this.credentialRefreshThreshold = provider.credentialRefreshThreshold; this.processOutputLimit = provider.processOutputLimit; + this.staticAccountId = provider.staticAccountId; } /** @@ -334,6 +344,19 @@ public Builder processOutputLimit(long outputByteLimit) { return this; } + /** + * Configure a static account id for this credentials provider. Account id for ProcessCredentialsProvider is only + * relevant in a context where a service constructs endpoint URL containing an account id. + * This option should ONLY be used if the provider should return credentials with account id, and the process does not + * output account id. If a static account ID is configured, and the process also returns an account + * id, the process output value overrides the static value. If used, the static account id MUST match the credentials + * returned by the process. + */ + public Builder staticAccountId(String staticAccountId) { + this.staticAccountId = staticAccountId; + return this; + } + public ProcessCredentialsProvider build() { return new ProcessCredentialsProvider(this); } diff --git a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.java b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.java index d2b5a93973eb..bcc7d77af4e6 100644 --- a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.java +++ b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.java @@ -28,7 +28,7 @@ @SdkPublicApi public final class SystemPropertyCredentialsProvider extends SystemSettingsCredentialsProvider { - private static final String PROVIDER_NAME = "SystemSettingsCredentialsProvider"; + private static final String PROVIDER_NAME = "SystemPropertyCredentialsProvider"; private SystemPropertyCredentialsProvider() { } diff --git a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtils.java b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtils.java index ef15454a0421..22da5e9986fd 100644 --- a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtils.java +++ b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtils.java @@ -157,8 +157,11 @@ private Optional credentialsProvider(Set childre private AwsCredentialsProvider basicProfileCredentialsProvider() { requireProperties(ProfileProperty.AWS_ACCESS_KEY_ID, ProfileProperty.AWS_SECRET_ACCESS_KEY); - AwsCredentials credentials = AwsBasicCredentials.create(properties.get(ProfileProperty.AWS_ACCESS_KEY_ID), - properties.get(ProfileProperty.AWS_SECRET_ACCESS_KEY)); + AwsCredentials credentials = AwsBasicCredentials.builder() + .accessKeyId(properties.get(ProfileProperty.AWS_ACCESS_KEY_ID)) + .secretAccessKey(properties.get(ProfileProperty.AWS_SECRET_ACCESS_KEY)) + .accountId(properties.get(ProfileProperty.AWS_ACCOUNT_ID)) + .build(); return StaticCredentialsProvider.create(credentials); } @@ -169,9 +172,12 @@ private AwsCredentialsProvider sessionProfileCredentialsProvider() { requireProperties(ProfileProperty.AWS_ACCESS_KEY_ID, ProfileProperty.AWS_SECRET_ACCESS_KEY, ProfileProperty.AWS_SESSION_TOKEN); - AwsCredentials credentials = AwsSessionCredentials.create(properties.get(ProfileProperty.AWS_ACCESS_KEY_ID), - properties.get(ProfileProperty.AWS_SECRET_ACCESS_KEY), - properties.get(ProfileProperty.AWS_SESSION_TOKEN)); + AwsCredentials credentials = AwsSessionCredentials.builder() + .accessKeyId(properties.get(ProfileProperty.AWS_ACCESS_KEY_ID)) + .secretAccessKey(properties.get(ProfileProperty.AWS_SECRET_ACCESS_KEY)) + .sessionToken(properties.get(ProfileProperty.AWS_SESSION_TOKEN)) + .accountId(properties.get(ProfileProperty.AWS_ACCOUNT_ID)) + .build(); return StaticCredentialsProvider.create(credentials); } @@ -180,6 +186,7 @@ private AwsCredentialsProvider credentialProcessCredentialsProvider() { return ProcessCredentialsProvider.builder() .command(properties.get(ProfileProperty.CREDENTIAL_PROCESS)) + .staticAccountId(properties.get(ProfileProperty.AWS_ACCOUNT_ID)) .build(); } diff --git a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/SystemSettingsCredentialsProvider.java b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/SystemSettingsCredentialsProvider.java index 1f980b0b358d..48e0f521f93d 100644 --- a/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/SystemSettingsCredentialsProvider.java +++ b/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/internal/SystemSettingsCredentialsProvider.java @@ -49,6 +49,7 @@ public AwsCredentials resolveCredentials() { String accessKey = trim(loadSetting(SdkSystemSetting.AWS_ACCESS_KEY_ID).orElse(null)); String secretKey = trim(loadSetting(SdkSystemSetting.AWS_SECRET_ACCESS_KEY).orElse(null)); String sessionToken = trim(loadSetting(SdkSystemSetting.AWS_SESSION_TOKEN).orElse(null)); + String accountId = trim(loadSetting(SdkSystemSetting.AWS_ACCOUNT_ID).orElse(null)); if (StringUtils.isBlank(accessKey)) { throw SdkClientException.builder() @@ -71,12 +72,14 @@ public AwsCredentials resolveCredentials() { return StringUtils.isBlank(sessionToken) ? AwsBasicCredentials.builder() .accessKeyId(accessKey) .secretAccessKey(secretKey) + .accountId(accountId) .providerName(provider()) .build() : AwsSessionCredentials.builder() .accessKeyId(accessKey) .secretAccessKey(secretKey) .sessionToken(sessionToken) + .accountId(accountId) .providerName(provider()) .build(); } diff --git a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProcessCredentialsProviderTest.java b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProcessCredentialsProviderTest.java index 2c5278ad1201..0fdedff07646 100644 --- a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProcessCredentialsProviderTest.java +++ b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProcessCredentialsProviderTest.java @@ -16,34 +16,51 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static software.amazon.awssdk.auth.credentials.internal.ProcessCredentialsTestUtils.copyErrorCaseProcessCredentialsScript; -import static software.amazon.awssdk.auth.credentials.internal.ProcessCredentialsTestUtils.copyHappyCaseProcessCredentialsScript; +import static org.assertj.core.api.Assertions.within; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UncheckedIOException; import java.time.Duration; import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.Arrays; +import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import software.amazon.awssdk.utils.DateUtils; +import software.amazon.awssdk.utils.IoUtils; +import software.amazon.awssdk.utils.Platform; -class ProcessCredentialsProviderTest { +public class ProcessCredentialsProviderTest { private static final String PROCESS_RESOURCE_PATH = "/resources/process/"; private static final String RANDOM_SESSION_TOKEN = "RANDOM_TOKEN"; + + private static final String ACCESS_KEY_ID = "accessKeyId"; + private static final String SECRET_ACCESS_KEY = "secretAccessKey"; + private static final String SESSION_TOKEN = "sessionToken"; + private static final String ACCOUNT_ID = "01234567891111"; + private static String scriptLocation; private static String errorScriptLocation; @BeforeAll - public static void setup() { + static void setup() { scriptLocation = copyHappyCaseProcessCredentialsScript(); errorScriptLocation = copyErrorCaseProcessCredentialsScript(); } @AfterAll - public static void teardown() { + static void teardown() { if (scriptLocation != null && !new File(scriptLocation).delete()) { throw new IllegalStateException("Failed to delete file: " + scriptLocation); } @@ -52,19 +69,67 @@ public static void teardown() { throw new IllegalStateException("Failed to delete file: " + errorScriptLocation); } } + + @ParameterizedTest(name = "{index} - {0}") + @MethodSource("staticCredentialsValues") + void staticCredentialsCanBeLoaded(String description, String staticAccountId, Optional expectedValue, + String cmd) { + ProcessCredentialsProvider.Builder providerBuilder = ProcessCredentialsProvider.builder().command(cmd); + if (staticAccountId != null) { + providerBuilder.staticAccountId(staticAccountId); + } + AwsCredentials credentials = providerBuilder.build().resolveCredentials(); + + verifyCredentials(credentials); + assertThat(credentials).isNotInstanceOf(AwsSessionCredentials.class); + + if (expectedValue.isPresent()) { + assertThat(credentials.accountId()).isPresent().hasValue(expectedValue.get()); + } else { + assertThat(credentials.accountId()).isNotPresent(); + } + } + + private static List staticCredentialsValues() { + return Arrays.asList( + Arguments.of("when only containing access key id, secret", null, Optional.empty(), + String.format("%s accessKeyId secretAccessKey", scriptLocation)), + Arguments.of("when output has account id", null, Optional.of(ACCOUNT_ID), + String.format("%s %s %s acctid=%s", scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, ACCOUNT_ID)), + Arguments.of("when output has account id, static account id configured", "staticAccountId", Optional.of(ACCOUNT_ID), + String.format("%s %s %s acctid=%s", scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, ACCOUNT_ID)), + Arguments.of("when only static account id is configured", "staticAccountId", Optional.of("staticAccountId"), + String.format("%s %s %s", scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY)) + ); + } @Test void staticCredentialsCanBeLoaded() { AwsCredentials credentials = ProcessCredentialsProvider.builder() - .command(scriptLocation + " accessKeyId secretAccessKey") + .command(String.format("%s accessKeyId secretAccessKey", scriptLocation)) .build() .resolveCredentials(); - assertThat(credentials).isInstanceOf(AwsBasicCredentials.class); - assertThat(credentials.accessKeyId()).isEqualTo("accessKeyId"); - assertThat(credentials.secretAccessKey()).isEqualTo("secretAccessKey"); - assertThat(credentials.providerName()).isPresent().contains("ProcessCredentialsProvider"); + assertThat(credentials).isNotInstanceOf(AwsSessionCredentials.class); + assertThat(credentials.accessKeyId()).isEqualTo(ACCESS_KEY_ID); + assertThat(credentials.secretAccessKey()).isEqualTo(SECRET_ACCESS_KEY); + assertThat(credentials.accountId()).isNotPresent(); + } + + @Test + void staticCredentialsWithAccountIdCanBeLoaded() { + AwsCredentials credentials = + ProcessCredentialsProvider.builder() + .command(String.format("%s %s %s acctid=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, ACCOUNT_ID)) + .build() + .resolveCredentials(); + + assertThat(credentials).isNotInstanceOf(AwsSessionCredentials.class); + assertThat(credentials.accessKeyId()).isEqualTo(ACCESS_KEY_ID); + assertThat(credentials.secretAccessKey()).isEqualTo(SECRET_ACCESS_KEY); + assertThat(credentials.accountId()).isPresent().isEqualTo(Optional.of(ACCOUNT_ID)); } @Test @@ -83,30 +148,75 @@ public void staticCredentials_commandAsListOfStrings_CanBeLoaded() { @Test void sessionCredentialsCanBeLoaded() { + String expiration = DateUtils.formatIso8601Date(Instant.now()); ProcessCredentialsProvider credentialsProvider = ProcessCredentialsProvider.builder() - .command(scriptLocation + " accessKeyId secretAccessKey sessionToken " + - DateUtils.formatIso8601Date(Instant.now())) + .command(String.format("%s %s %s token=%s exp=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, + SESSION_TOKEN, expiration)) .credentialRefreshThreshold(Duration.ofSeconds(1)) .build(); AwsCredentials credentials = credentialsProvider.resolveCredentials(); + verifySessionCredentials(credentials, expiration); + assertThat(credentials.accountId()).isNotPresent(); + } - assertThat(credentials).isInstanceOf(AwsSessionCredentials.class); + @Test + void sessionCredentialsWithAccountIdCanBeLoaded() { + String expiration = DateUtils.formatIso8601Date(Instant.now()); + ProcessCredentialsProvider credentialsProvider = + ProcessCredentialsProvider.builder() + .command(String.format("%s %s %s token=sessionToken exp=%s acctid=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, expiration, ACCOUNT_ID)) + .credentialRefreshThreshold(Duration.ofSeconds(1)) + .build(); + + AwsCredentials credentials = credentialsProvider.resolveCredentials(); + verifySessionCredentials(credentials, expiration); + assertThat(credentials.accountId()).isPresent().isEqualTo(Optional.of(ACCOUNT_ID)); + } + + @Test + void sessionCredentialsWithStaticAccountIdCanBeLoaded() { + String expiration = DateUtils.formatIso8601Date(Instant.now()); + ProcessCredentialsProvider credentialsProvider = + ProcessCredentialsProvider.builder() + .command(String.format("%s %s %s token=sessionToken exp=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, expiration)) + .credentialRefreshThreshold(Duration.ofSeconds(1)) + .staticAccountId("staticAccountId") + .build(); + AwsCredentials credentials = credentialsProvider.resolveCredentials(); + verifySessionCredentials(credentials, expiration); + assertThat(credentials.accountId()).isPresent().hasValue("staticAccountId"); + } + + private void verifySessionCredentials(AwsCredentials credentials, String expiration) { + verifyCredentials(credentials); + + assertThat(credentials).isInstanceOf(AwsSessionCredentials.class); AwsSessionCredentials sessionCredentials = (AwsSessionCredentials) credentials; + assertThat(sessionCredentials.sessionToken()).isEqualTo(SESSION_TOKEN); - assertThat(credentials.accessKeyId()).isEqualTo("accessKeyId"); - assertThat(credentials.secretAccessKey()).isEqualTo("secretAccessKey"); - assertThat(sessionCredentials.sessionToken()).isNotNull(); + assertThat(sessionCredentials.expirationTime()).isPresent(); + Instant exp = sessionCredentials.expirationTime().get(); + assertThat(exp).isCloseTo(expiration, within(1, ChronoUnit.MICROS)); + } + + private void verifyCredentials(AwsCredentials credentials) { + assertThat(credentials.accessKeyId()).isEqualTo(ACCESS_KEY_ID); + assertThat(credentials.secretAccessKey()).isEqualTo(SECRET_ACCESS_KEY); } @Test void resultsAreCached() { ProcessCredentialsProvider credentialsProvider = ProcessCredentialsProvider.builder() - .command(scriptLocation + " accessKeyId secretAccessKey sessionToken " + - DateUtils.formatIso8601Date(Instant.now().plusSeconds(20))) + .command(String.format("%s %s %s token=%s exp=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, SESSION_TOKEN, + DateUtils.formatIso8601Date(Instant.now().plusSeconds(20)))) .build(); AwsCredentials request1 = credentialsProvider.resolveCredentials(); @@ -119,9 +229,8 @@ void resultsAreCached() { void expirationBufferOverrideIsApplied() { ProcessCredentialsProvider credentialsProvider = ProcessCredentialsProvider.builder() - .command(String.format("%s accessKeyId secretAccessKey %s %s", - scriptLocation, - RANDOM_SESSION_TOKEN, + .command(String.format("%s %s %s token=%s exp=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, RANDOM_SESSION_TOKEN, DateUtils.formatIso8601Date(Instant.now().plusSeconds(20)))) .credentialRefreshThreshold(Duration.ofSeconds(20)) .build(); @@ -149,7 +258,8 @@ void processFailed_shouldContainErrorMessage() { void lackOfExpirationIsCachedForever() { ProcessCredentialsProvider credentialsProvider = ProcessCredentialsProvider.builder() - .command(scriptLocation + " accessKeyId secretAccessKey sessionToken") + .command(String.format("%s %s %s token=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, SESSION_TOKEN)) .credentialRefreshThreshold(Duration.ofSeconds(20)) .build(); @@ -160,19 +270,21 @@ void lackOfExpirationIsCachedForever() { } @Test - void processOutputLimitIsEnforced() { + public void processOutputLimitIsEnforced() { ProcessCredentialsProvider credentialsProvider = ProcessCredentialsProvider.builder() - .command(scriptLocation + " accessKeyId secretAccessKey") + .command(String.format("%s %s %s", + scriptLocation, + ACCESS_KEY_ID, + SECRET_ACCESS_KEY)) .processOutputLimit(1) .build(); - assertThatThrownBy(credentialsProvider::resolveCredentials).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(() -> credentialsProvider.resolveCredentials()).isInstanceOf(IllegalStateException.class); } @Test void processOutputLimitDefaultPassesLargeInput() { - - String LONG_SESSION_TOKEN = "lYzvmByqdS1E69QQVEavDDHabQ2GuYKYABKRA4xLbAXpdnFtV030UH4" + + String longSessionToken = "lYzvmByqdS1E69QQVEavDDHabQ2GuYKYABKRA4xLbAXpdnFtV030UH4" + "bQoZWCDcfADFvBwBm3ixEFTYMjn5XQozpFV2QAsWHirCVcEJ5DC60KPCNBcDi4KLNJfbsp3r6kKTOmYOeqhEyiC4emDX33X2ppZsa5" + "1iwr6ShIZPOUPmuR4WDglmWubgO2q5tZv48xA5idkcHEmtGdoL343sY24q4gMh21eeBnF6ikjZdfvZ0Mn86UQ8r05AD346rSwM5bFs" + "t019ZkJIjLHD3HoKJ44EndRvSvQClXfJCmmQDH5INiXdFLLNm0dzT3ynbVIW5x1YYBWptyts4NUSy2eJ3dTPjYICpQVCkbuNVA7PqR" + @@ -185,8 +297,10 @@ void processOutputLimitDefaultPassesLargeInput() { "Iu1sEFlKvPdfF1uefbTj6YdjUciWu1UBH47VbIcTbvbwmUiu2javB21kOenyDoelK5GUM4u0uPeXIOOhtZsJb8kz88h1joWkaKr2fc" + "jrIS08FM47Y4Z2Mi4zfwyN54L"; - ProcessCredentialsProvider credentialsProvider = ProcessCredentialsProvider.builder() - .command(scriptLocation + " accessKeyId secretAccessKey " + LONG_SESSION_TOKEN) + ProcessCredentialsProvider credentialsProvider = + ProcessCredentialsProvider.builder() + .command(String.format("%s %s %s token=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, longSessionToken)) .build(); AwsSessionCredentials sessionCredentials = (AwsSessionCredentials) credentialsProvider.resolveCredentials(); @@ -199,7 +313,8 @@ void processOutputLimitDefaultPassesLargeInput() { void closeDoesNotRaise() { ProcessCredentialsProvider credentialsProvider = ProcessCredentialsProvider.builder() - .command(scriptLocation + " accessKeyId secretAccessKey sessionToken") + .command(String.format("%s %s %s token=%s", + scriptLocation, ACCESS_KEY_ID, SECRET_ACCESS_KEY, SESSION_TOKEN)) .build(); credentialsProvider.resolveCredentials(); credentialsProvider.close(); @@ -235,4 +350,47 @@ void commandAsListOfStrings_isNotExecutedInAShell() { + "No such file or directory"); } } + + public static String copyHappyCaseProcessCredentialsScript() { + String scriptClasspathFilename = Platform.isWindows() ? "windows-credentials-script.bat" + : "linux-credentials-script.sh"; + + return copyProcessCredentialsScript(scriptClasspathFilename); + } + + public static String copyErrorCaseProcessCredentialsScript() { + String scriptClasspathFilename = Platform.isWindows() ? "windows-credentials-error-script.bat" + : "linux-credentials-error-script.sh"; + + return copyProcessCredentialsScript(scriptClasspathFilename); + } + + private static String copyProcessCredentialsScript(String scriptClasspathFilename) { + String scriptClasspathLocation = PROCESS_RESOURCE_PATH + scriptClasspathFilename; + + InputStream scriptInputStream = null; + OutputStream scriptOutputStream = null; + + try { + scriptInputStream = ProcessCredentialsProviderTest.class.getResourceAsStream(scriptClasspathLocation); + + File scriptFileOnDisk = File.createTempFile("ProcessCredentialsProviderTest", scriptClasspathFilename); + scriptFileOnDisk.deleteOnExit(); + + if (!scriptFileOnDisk.setExecutable(true)) { + throw new IllegalStateException("Could not make " + scriptFileOnDisk + " executable."); + } + + scriptOutputStream = new FileOutputStream(scriptFileOnDisk); + + IoUtils.copy(scriptInputStream, scriptOutputStream); + + return scriptFileOnDisk.getAbsolutePath(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } finally { + IoUtils.closeQuietly(scriptInputStream, null); + IoUtils.closeQuietly(scriptOutputStream, null); + } + } } \ No newline at end of file diff --git a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProfileCredentialsProviderTest.java b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProfileCredentialsProviderTest.java index 17b9b24ae092..0ffad04e77b3 100644 --- a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProfileCredentialsProviderTest.java +++ b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProfileCredentialsProviderTest.java @@ -24,6 +24,7 @@ import java.nio.file.FileSystem; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Optional; import java.util.function.Supplier; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -114,6 +115,24 @@ void presentProfileReturnsCredentials() { assertThat(provider.resolveCredentials()).satisfies(credentials -> { assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isNotPresent(); + }); + } + + @Test + void presentProfileWithAccountIdReturnsCredentialsWithAccountId() { + ProfileFile file = profileFile("[default]\n" + + "aws_access_key_id = defaultAccessKey\n" + + "aws_secret_access_key = defaultSecretAccessKey\n" + + "aws_account_id = defaultAccountId"); + + ProfileCredentialsProvider provider = + ProfileCredentialsProvider.builder().profileFile(file).profileName("default").build(); + + assertThat(provider.resolveCredentials()).satisfies(credentials -> { + assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); + assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isPresent().isEqualTo(Optional.of("defaultAccountId")); }); } @@ -201,13 +220,15 @@ void resolveCredentials_presentProfileFileSupplier_returnsCredentials() { assertThat(provider.resolveCredentials()).satisfies(credentials -> { assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isNotPresent(); }); } @Test void resolveCredentials_presentSupplierProfileFile_returnsCredentials() { Supplier supplier = () -> profileFile("[default]\naws_access_key_id = defaultAccessKey\n" - + "aws_secret_access_key = defaultSecretAccessKey\n"); + + "aws_secret_access_key = defaultSecretAccessKey\n" + + "aws_account_id = defaultAccountId"); ProfileCredentialsProvider provider = ProfileCredentialsProvider.builder() @@ -218,6 +239,7 @@ void resolveCredentials_presentSupplierProfileFile_returnsCredentials() { assertThat(provider.resolveCredentials()).satisfies(credentials -> { assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isPresent(); }); } diff --git a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/StaticCredentialsProviderTest.java b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/StaticCredentialsProviderTest.java index 8254e04c0ab1..d02b633dfd2e 100644 --- a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/StaticCredentialsProviderTest.java +++ b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/StaticCredentialsProviderTest.java @@ -30,6 +30,18 @@ void getAwsCredentials_ReturnsSameCredentials() { assertThat(actualCredentials.providerName()).isPresent(); } + @Test + void getAwsCredentialsWithAccountId_ReturnsSameCredentials() { + AwsCredentials credentials = AwsBasicCredentials.builder() + .accessKeyId("akid") + .secretAccessKey("skid") + .accountId("acctid") + .build(); + AwsCredentials actualCredentials = StaticCredentialsProvider.create(credentials).resolveCredentials(); + assertThat(actualCredentials).isEqualTo(credentials); + } + + @Test void getSessionAwsCredentials_ReturnsSameCredentials() { AwsSessionCredentials credentials = AwsSessionCredentials.create("akid", "skid", "token"); @@ -39,6 +51,18 @@ void getSessionAwsCredentials_ReturnsSameCredentials() { assertThat(actualCredentials.providerName()).isPresent(); } + @Test + void getSessionAwsCredentialsWithAccountId_ReturnsSameCredentials() { + AwsSessionCredentials credentials = AwsSessionCredentials.builder() + .accessKeyId("akid") + .secretAccessKey("skid") + .sessionToken("token") + .accountId("acctid") + .build(); + AwsCredentials actualCredentials = StaticCredentialsProvider.create(credentials).resolveCredentials(); + assertThat(actualCredentials).isEqualTo(credentials); + } + @Test void nullCredentials_ThrowsRuntimeException() { assertThatThrownBy(() -> StaticCredentialsProvider.create(null)).isInstanceOf(RuntimeException.class); diff --git a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/SystemSettingCredentialsProvidersTest.java b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/SystemSettingCredentialsProvidersTest.java new file mode 100644 index 000000000000..8961c5d0a18c --- /dev/null +++ b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/SystemSettingCredentialsProvidersTest.java @@ -0,0 +1,137 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.auth.credentials; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.function.Consumer; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import software.amazon.awssdk.core.SdkSystemSetting; +import software.amazon.awssdk.core.exception.SdkClientException; +import software.amazon.awssdk.testutils.EnvironmentVariableHelper; +import software.amazon.awssdk.utils.Pair; + +class SystemSettingCredentialsProvidersTest { + + private static final Pair ACCESS_KEY_ID = Pair.of(SdkSystemSetting.AWS_ACCESS_KEY_ID, "access"); + private static final Pair SECRET_KEY = Pair.of(SdkSystemSetting.AWS_SECRET_ACCESS_KEY, "secret"); + private static final Pair SESSION_TOKEN = Pair.of(SdkSystemSetting.AWS_SESSION_TOKEN, "token"); + private static final Pair ACCOUNT_ID = Pair.of(SdkSystemSetting.AWS_ACCOUNT_ID, "accountid"); + private static final EnvironmentVariableHelper ENVIRONMENT_VARIABLE_HELPER = new EnvironmentVariableHelper(); + + @BeforeEach + public void setup() { + clearSettings(); + } + + @AfterEach + public void teardown() { + clearSettings(); + } + + public static void clearSettings() { + ENVIRONMENT_VARIABLE_HELPER.reset(); + System.clearProperty(SdkSystemSetting.AWS_ACCESS_KEY_ID.property()); + System.clearProperty(SdkSystemSetting.AWS_SECRET_ACCESS_KEY.property()); + System.clearProperty(SdkSystemSetting.AWS_SESSION_TOKEN.property()); + System.clearProperty(SdkSystemSetting.AWS_ACCOUNT_ID.property()); + } + + @ParameterizedTest(name = "{index} - {0}") + @MethodSource("config") + void configureEnvVars_resolveCredentials(String description, + List> systemSettings, + Consumer expected) { + configureEnvironmentVariables(systemSettings); + EnvironmentVariableCredentialsProvider provider = EnvironmentVariableCredentialsProvider.create(); + if (expected != null) { + assertThat(provider.resolveCredentials()).satisfies(expected); + } else { + assertThatThrownBy(provider::resolveCredentials).isInstanceOf(SdkClientException.class); + } + } + + @ParameterizedTest(name = "{index} - {0}") + @MethodSource("config") + void configureSystemProperties_resolveCredentials(String description, + List> systemSettings, + Consumer expected) { + configureSystemProperties(systemSettings); + SystemPropertyCredentialsProvider provider = SystemPropertyCredentialsProvider.create(); + if (expected != null) { + assertThat(provider.resolveCredentials()).satisfies(expected); + } else { + assertThatThrownBy(provider::resolveCredentials).isInstanceOf(SdkClientException.class); + } + } + + private static List config() { + return Arrays.asList( + Arguments.of("When access key id and secret is set, return basic credentials", + Arrays.asList(ACCESS_KEY_ID, SECRET_KEY), + (Consumer) awsCredentials -> { + assertThat(awsCredentials.accessKeyId()).isEqualTo("access"); + assertThat(awsCredentials.secretAccessKey()).isEqualTo("secret"); + assertThat(awsCredentials).isNotInstanceOf(AwsSessionCredentials.class); + assertThat(awsCredentials).hasFieldOrPropertyWithValue("accountId", null); + }), + Arguments.of("When access key id, secret and token is set, return session credentials", + Arrays.asList(ACCESS_KEY_ID, SECRET_KEY, SESSION_TOKEN), + (Consumer) awsCredentials -> { + assertThat(awsCredentials).isInstanceOf(AwsSessionCredentials.class); + assertThat(((AwsSessionCredentials) awsCredentials).sessionToken()).isEqualTo("token"); + }), + Arguments.of("When access key id is null, throw exception", Arrays.asList(SECRET_KEY), null), + Arguments.of("When secret key is null, throw exception", Arrays.asList(ACCESS_KEY_ID), null), + Arguments.of("When account id is set, return basic credentials with account id", + Arrays.asList(ACCESS_KEY_ID, SECRET_KEY, ACCOUNT_ID), + (Consumer) awsCredentials -> { + assertThat(awsCredentials.accessKeyId()).isEqualTo("access"); + assertThat(awsCredentials.secretAccessKey()).isEqualTo("secret"); + assertThat(awsCredentials.accountId()).isPresent().isEqualTo(Optional.of("accountid")); + assertThat(awsCredentials).isNotInstanceOf(AwsSessionCredentials.class); + }), + Arguments.of("When account id and token is set, return session credentials with account id", + Arrays.asList(ACCESS_KEY_ID, SECRET_KEY, SESSION_TOKEN, ACCOUNT_ID), + (Consumer) awsCredentials -> { + assertThat(awsCredentials.accessKeyId()).isEqualTo("access"); + assertThat(awsCredentials.secretAccessKey()).isEqualTo("secret"); + assertThat(awsCredentials.accountId()).isPresent().isEqualTo(Optional.of("accountid")); + assertThat(awsCredentials).isInstanceOf(AwsSessionCredentials.class); + }) + ); + } + + private void configureEnvironmentVariables(List> systemSettings) { + for (Pair setting : systemSettings) { + ENVIRONMENT_VARIABLE_HELPER.set(setting.left(), setting.right()); + } + } + + private void configureSystemProperties(List> systemSettings) { + for (Pair setting : systemSettings) { + System.setProperty(setting.left().property(), setting.right()); + } + } +} diff --git a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/SystemSettingsCredentialsProviderTest.java b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/SystemSettingsCredentialsProviderTest.java index 615bcb63f1d9..81905de526ac 100644 --- a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/SystemSettingsCredentialsProviderTest.java +++ b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/SystemSettingsCredentialsProviderTest.java @@ -47,7 +47,7 @@ void systemPropertyCredentialsProvider_resolveCredentials_returnsCredentialsWith AwsCredentials credentials = SystemPropertyCredentialsProvider.create().resolveCredentials(); assertThat(credentials.accessKeyId()).isEqualTo("akid1"); assertThat(credentials.secretAccessKey()).isEqualTo("skid1"); - assertThat(credentials.providerName()).isPresent().contains("SystemSettingsCredentialsProvider"); + assertThat(credentials.providerName()).isPresent().contains("SystemPropertyCredentialsProvider"); } @Test diff --git a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/AwsSessionCredentialsTest.java b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/AwsSessionCredentialsTest.java index cb3a62600494..27d72e29881b 100644 --- a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/AwsSessionCredentialsTest.java +++ b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/AwsSessionCredentialsTest.java @@ -16,7 +16,9 @@ package software.amazon.awssdk.auth.credentials.internal; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import nl.jqno.equalsverifier.EqualsVerifier; import org.junit.jupiter.api.Test; @@ -27,6 +29,7 @@ class AwsSessionCredentialsTest { private static final String ACCESS_KEY_ID = "accessKeyId"; private static final String SECRET_ACCESS_KEY = "secretAccessKey"; private static final String SESSION_TOKEN = "sessionToken"; + private static final String ACCOUNT_ID = "accountId"; private static final String PROVIDER_NAME = "StaticCredentialsProvider"; @Test @@ -65,6 +68,7 @@ void create_isSuccessful() { assertEquals(ACCESS_KEY_ID, identity.accessKeyId()); assertEquals(SECRET_ACCESS_KEY, identity.secretAccessKey()); assertEquals(SESSION_TOKEN, identity.sessionToken()); + assertFalse(identity.accountId().isPresent()); } @Test @@ -73,10 +77,13 @@ void build_isSuccessful() { .accessKeyId(ACCESS_KEY_ID) .secretAccessKey(SECRET_ACCESS_KEY) .sessionToken(SESSION_TOKEN) + .accountId(ACCOUNT_ID) .build(); assertEquals(ACCESS_KEY_ID, identity.accessKeyId()); assertEquals(SECRET_ACCESS_KEY, identity.secretAccessKey()); assertEquals(SESSION_TOKEN, identity.sessionToken()); + assertTrue(identity.accountId().isPresent()); + assertEquals(ACCOUNT_ID, identity.accountId().get()); } @Test @@ -85,11 +92,14 @@ void copy_isSuccessful() { .accessKeyId(ACCESS_KEY_ID) .secretAccessKey(SECRET_ACCESS_KEY) .sessionToken(SESSION_TOKEN) + .accountId(ACCOUNT_ID) .build(); AwsSessionCredentials copy = identity.copy(c -> c.providerName(PROVIDER_NAME)); assertEquals(ACCESS_KEY_ID, copy.accessKeyId()); assertEquals(SECRET_ACCESS_KEY, copy.secretAccessKey()); assertEquals(SESSION_TOKEN, copy.sessionToken()); + assertTrue(identity.accountId().isPresent()); + assertEquals(ACCOUNT_ID, identity.accountId().get()); assertEquals(PROVIDER_NAME, copy.providerName().get()); } } diff --git a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtilsTest.java b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtilsTest.java index ef95613e5efc..5f8aa868c2d9 100644 --- a/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtilsTest.java +++ b/core/auth/src/test/java/software/amazon/awssdk/auth/credentials/internal/ProfileCredentialsUtilsTest.java @@ -55,7 +55,8 @@ public static void teardown() { public void roleProfileCanInheritFromAnotherFile() { String sourceProperties = "aws_access_key_id=defaultAccessKey\n" + - "aws_secret_access_key=defaultSecretAccessKey"; + "aws_secret_access_key=defaultSecretAccessKey" + + "aws_account_id=defaultAccountId"; String childProperties = "source_profile=source\n" + @@ -114,13 +115,15 @@ public void profileFileWithStaticCredentialsLoadsCorrectly() { ProfileFile profileFile = allTypesProfile(); assertThat(profileFile.profile("default")).hasValueSatisfying(profile -> { assertThat(profile.name()).isEqualTo("default"); - assertThat(profile.property(ProfileProperty.AWS_ACCESS_KEY_ID)).hasValue("defaultAccessKey"); assertThat(profile.toString()).contains("default"); + assertThat(profile.property(ProfileProperty.AWS_ACCESS_KEY_ID)).hasValue("defaultAccessKey"); + assertThat(profile.property(ProfileProperty.AWS_ACCOUNT_ID)).hasValue("defaultAccountId"); assertThat(profile.property(ProfileProperty.REGION)).isNotPresent(); assertThat(new ProfileCredentialsUtils(profileFile, profile, profileFile::profile).credentialsProvider()).hasValueSatisfying(credentialsProvider -> { assertThat(credentialsProvider.resolveCredentials()).satisfies(credentials -> { assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isPresent().hasValue("defaultAccountId"); }); }); }); @@ -137,6 +140,7 @@ public void profileFileWithSessionCredentialsLoadsCorrectly() { assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); assertThat(((AwsSessionCredentials) credentials).sessionToken()).isEqualTo("awsSessionToken"); + assertThat(credentials.accountId()).isPresent().hasValue("defaultAccountId"); }); }); }); @@ -152,6 +156,55 @@ public void profileFileWithProcessCredentialsLoadsCorrectly() { assertThat(credentials).isInstanceOf(AwsBasicCredentials.class); assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isNotPresent(); + }); + }); + }); + } + + @Test + public void profileFileWithProcessCredentialsAndAccountIdInFileFindsAccountId() { + ProfileFile profileFile = allTypesProfile(); + assertThat(profileFile.profile("profile-credential-process-account-id")).hasValueSatisfying(profile -> { + assertThat(profile.property(ProfileProperty.REGION)).isNotPresent(); + assertThat(new ProfileCredentialsUtils(profileFile, profile, profileFile::profile).credentialsProvider()).hasValueSatisfying(credentialsProvider -> { + assertThat(credentialsProvider.resolveCredentials()).satisfies(credentials -> { + assertThat(credentials).isInstanceOf(AwsBasicCredentials.class); + assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); + assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isPresent().hasValue("123456789012"); + }); + }); + }); + } + + @Test + public void profileFileWithProcessCredentialsAndAccountIdInFileAndProfilePicksFromFile() { + ProfileFile profileFile = allTypesProfile(); + assertThat(profileFile.profile("profile-credential-process-account-id-override")).hasValueSatisfying(profile -> { + assertThat(profile.property(ProfileProperty.REGION)).isNotPresent(); + assertThat(new ProfileCredentialsUtils(profileFile, profile, profileFile::profile).credentialsProvider()).hasValueSatisfying(credentialsProvider -> { + assertThat(credentialsProvider.resolveCredentials()).satisfies(credentials -> { + assertThat(credentials).isInstanceOf(AwsBasicCredentials.class); + assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); + assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isPresent().hasValue("123456789012"); + }); + }); + }); + } + + @Test + public void profileFileWithProcessCredentialsAndAccountIdInProfileFindsAccountId() { + ProfileFile profileFile = allTypesProfile(); + assertThat(profileFile.profile("profile-credential-process-local-account-id")).hasValueSatisfying(profile -> { + assertThat(profile.property(ProfileProperty.REGION)).isNotPresent(); + assertThat(new ProfileCredentialsUtils(profileFile, profile, profileFile::profile).credentialsProvider()).hasValueSatisfying(credentialsProvider -> { + assertThat(credentialsProvider.resolveCredentials()).satisfies(credentials -> { + assertThat(credentials).isInstanceOf(AwsBasicCredentials.class); + assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey"); + assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey"); + assertThat(credentials.accountId()).isPresent().hasValue("defaultAccountId"); }); }); }); @@ -308,11 +361,13 @@ private ProfileFile allTypesProfile() { return configFile("[default]\n" + "aws_access_key_id = defaultAccessKey\n" + "aws_secret_access_key = defaultSecretAccessKey\n" + + "aws_account_id = defaultAccountId\n" + "\n" + "[profile profile-with-session-token]\n" + "aws_access_key_id = defaultAccessKey\n" + "aws_secret_access_key = defaultSecretAccessKey\n" + "aws_session_token = awsSessionToken\n" + + "aws_account_id = defaultAccountId\n" + "\n" + "[profile profile-with-region]\n" + "region = us-east-1\n" + @@ -324,6 +379,17 @@ private ProfileFile allTypesProfile() { "[profile profile-credential-process]\n" + "credential_process=" + scriptLocation +" defaultAccessKey defaultSecretAccessKey\n" + "\n" + + "[profile profile-credential-process-account-id]\n" + + "credential_process=" + scriptLocation +" defaultAccessKey defaultSecretAccessKey acctid=123456789012\n" + + "\n" + + "[profile profile-credential-process-account-id-override]\n" + + "aws_account_id = defaultAccountId\n" + + "credential_process=" + scriptLocation +" defaultAccessKey defaultSecretAccessKey acctid=123456789012\n" + + "\n" + + "[profile profile-credential-process-local-account-id]\n" + + "aws_account_id = defaultAccountId\n" + + "credential_process=" + scriptLocation +" defaultAccessKey defaultSecretAccessKey\n" + + "\n" + "[profile profile-with-container-credential-source]\n" + "credential_source=ecscontainer\n" + "role_arn=arn:aws:iam::123456789012:role/testRole\n" + diff --git a/core/auth/src/test/resources/resources/process/linux-credentials-script.sh b/core/auth/src/test/resources/resources/process/linux-credentials-script.sh index 03c802ec3034..de5dbeaf1397 100644 --- a/core/auth/src/test/resources/resources/process/linux-credentials-script.sh +++ b/core/auth/src/test/resources/resources/process/linux-credentials-script.sh @@ -1,18 +1,36 @@ #!/usr/bin/env bash + +parseAdditionalParams () { + local prefix=`echo $1 | cut -d= -f1`; + local param=`echo $1 | cut -d= -f2`; + + case "$prefix" in + ("token"*) + if [[ "$param" = "RANDOM_TOKEN" ]]; then + echo "\"SessionToken\": \"$RANDOM\"" + else + echo "\"SessionToken\": \"$param\"" + fi; + ;; + ("exp"*) + echo "\"Expiration\": \"$param\""; + ;; + ("acctid"*) + echo "\"AccountId\": \"$param\""; + ;; + (*) + echo "\"$prefix\": \"$param\""; + ;; + esac +} + echo '{'; echo '"Version": 1,'; echo "\"AccessKeyId\": \"$1\","; echo "\"SecretAccessKey\": \"$2\""; -if [[ $# -ge 3 ]]; then +for args in "${@:3}" +do echo ','; - if [[ "$3" = "RANDOM_TOKEN" ]]; then - echo "\"SessionToken\": \"$RANDOM\"" - else - echo "\"SessionToken\": \"$3\"" - fi; -fi; -if [[ $# -ge 4 ]]; then - echo ',' - echo "\"Expiration\": \"$4\""; -fi; + parseAdditionalParams $args; +done; echo '}'; \ No newline at end of file diff --git a/core/auth/src/test/resources/resources/process/windows-credentials-script.bat b/core/auth/src/test/resources/resources/process/windows-credentials-script.bat index bb5ed72f070c..055b74b73e50 100644 --- a/core/auth/src/test/resources/resources/process/windows-credentials-script.bat +++ b/core/auth/src/test/resources/resources/process/windows-credentials-script.bat @@ -1,19 +1,45 @@ @ECHO OFF -SET input=%1 ECHO { ECHO "Version": 1, ECHO "AccessKeyId": "%1", -ECHO "SecretAccessKey": "%2" -IF NOT "%3"=="" ( +SHIFT +ECHO "SecretAccessKey": "%1" +SHIFT + +:LOOP + IF "%1"=="" ( + GOTO :EXITLOOP + ) + IF "%2"=="" ( + echo "Expected value for param %1!" + exit /b 1 + ) ECHO , + CALL :PARSE_ARGS %1 %2 + SHIFT + SHIFT +GOTO :LOOP + +:EXITLOOP + +ECHO } + +GOTO:EOF + +:PARSE_ARGS +SET prefix=%1 +SET param=%2 +IF "%prefix%"=="token" ( IF "%3"=="RANDOM_TOKEN" ( ECHO "SessionToken": "%RANDOM%" ) ELSE ( - ECHO "SessionToken": "%3" + ECHO "SessionToken": "%param%" ) +) ELSE IF "%prefix%"=="exp" ( + ECHO "Expiration": "%param%" +) ELSE IF "%prefix%"=="acctid" ( + ECHO "AccountId": "%param%" +) ELSE ( + ECHO "%prefix%": "%param%" ) -IF NOT "%4"=="" ( - ECHO , - ECHO "Expiration": "%4" -) -echo } \ No newline at end of file +EXIT /B diff --git a/core/aws-core/pom.xml b/core/aws-core/pom.xml index 255a10b0c767..d3e7af1164cf 100644 --- a/core/aws-core/pom.xml +++ b/core/aws-core/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 aws-core diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsExecutionAttribute.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsExecutionAttribute.java index ff7fa4fc16d4..12f6542043b6 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsExecutionAttribute.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsExecutionAttribute.java @@ -18,6 +18,7 @@ import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute; import software.amazon.awssdk.awscore.client.config.AwsClientOption; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; import software.amazon.awssdk.core.interceptor.ExecutionAttribute; import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute; @@ -27,7 +28,7 @@ * AWS-specific attributes attached to the execution. This information is available to {@link ExecutionInterceptor}s. */ @SdkPublicApi -public final class AwsExecutionAttribute extends SdkExecutionAttribute { +public final class AwsExecutionAttribute extends SdkExecutionAttribute { /** * The AWS {@link Region} the client was configured with. This is not always same as the * {@link AwsSignerExecutionAttribute#SIGNING_REGION} for global services like IAM. @@ -58,6 +59,18 @@ public final class AwsExecutionAttribute extends SdkExecutionAttribute { public static final ExecutionAttribute USE_GLOBAL_ENDPOINT = new ExecutionAttribute<>("UseGlobalEndpoint"); + /** + * The AWS account ID associated with the identity resolved for this request. + */ + public static final ExecutionAttribute AWS_AUTH_ACCOUNT_ID = + new ExecutionAttribute<>("AwsAuthAccountId"); + + /** + * The mode for an AWS account ID that's resolved for this request. See {@link AccountIdEndpointMode} for values. + */ + public static final ExecutionAttribute AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE = + new ExecutionAttribute<>("AwsAuthAccountIdEndpointMode"); + private AwsExecutionAttribute() { } } diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java index 64b608d04764..3ab3798c4659 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java @@ -20,6 +20,7 @@ import software.amazon.awssdk.auth.token.credentials.SdkTokenProvider; import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; import software.amazon.awssdk.core.client.config.ClientOption; import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity; import software.amazon.awssdk.identity.spi.IdentityProvider; @@ -91,6 +92,12 @@ public final class AwsClientOption extends ClientOption { */ public static final AwsClientOption DEFAULTS_MODE = new AwsClientOption<>(DefaultsMode.class); + /** + * Option used by the rest of the SDK to read the {@link DefaultsMode}. This will never be {@link DefaultsMode#AUTO}. + */ + public static final AwsClientOption ACCOUNT_ID_ENDPOINT_MODE = + new AwsClientOption<>(AccountIdEndpointMode.class); + /** * Option to specify whether global endpoint should be used. */ diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/endpoints/AccountIdEndpointMode.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/endpoints/AccountIdEndpointMode.java new file mode 100644 index 000000000000..7e6f0050dc4e --- /dev/null +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/endpoints/AccountIdEndpointMode.java @@ -0,0 +1,62 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.awscore.endpoints; + +import software.amazon.awssdk.annotations.SdkPublicApi; + +/** + * Enum Class for AccountId Endpoint Mode. + */ +@SdkPublicApi +public enum AccountIdEndpointMode { + + /** + * Default value that indicates account ID values will be used in endpoint rules if available. + */ + PREFERRED, + + /** + * When mode is disabled, any resolved account ID will not be used in endpoint construction and rules that + * reference them will be bypassed. + */ + DISABLED, + + /** + * Required mode would be used in scenarios where endpoint resolution should return an error if no account ID is + * available. + */ + REQUIRED; + + /** + * Returns the appropriate AccountIdEndpointMode value after parsing the parameter. + * @param s AccountIdEndpointMode in String Format. + * @return AccountIdEndpointMode enumValue + * @throws IllegalArgumentException Unrecognized value for endpoint mode. + */ + public static AccountIdEndpointMode fromValue(String s) { + if (s == null) { + return null; + } + + for (AccountIdEndpointMode value : values()) { + if (value.name().equalsIgnoreCase(s)) { + return value; + } + } + + throw new IllegalArgumentException("Unrecognized value for account id endpoint mode: " + s); + } +} diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/endpoints/AccountIdEndpointModeResolver.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/endpoints/AccountIdEndpointModeResolver.java new file mode 100644 index 000000000000..529b7007621e --- /dev/null +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/endpoints/AccountIdEndpointModeResolver.java @@ -0,0 +1,82 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.awscore.endpoints; + +import java.util.Optional; +import java.util.function.Supplier; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.core.SdkSystemSetting; +import software.amazon.awssdk.profiles.ProfileFile; +import software.amazon.awssdk.profiles.ProfileProperty; +import software.amazon.awssdk.utils.OptionalUtils; + +@SdkInternalApi +public final class AccountIdEndpointModeResolver { + + private static final AccountIdEndpointMode SDK_DEFAULT_MODE = AccountIdEndpointMode.PREFERRED; + + private Supplier profileFile; + private String profileName; + private AccountIdEndpointMode defaultMode; + + private AccountIdEndpointModeResolver() { + } + + public static AccountIdEndpointModeResolver create() { + return new AccountIdEndpointModeResolver(); + } + + public AccountIdEndpointModeResolver profileFile(Supplier profileFile) { + this.profileFile = profileFile; + return this; + } + + public AccountIdEndpointModeResolver profileName(String profileName) { + this.profileName = profileName; + return this; + } + + public AccountIdEndpointModeResolver defaultMode(AccountIdEndpointMode defaultMode) { + this.defaultMode = defaultMode; + return this; + } + + public AccountIdEndpointMode resolve() { + return OptionalUtils.firstPresent(fromSystemSettings(), + () -> fromProfileFile(profileFile, profileName)) + .orElseGet(this::fromDefaultMode); + } + + private Optional fromSystemSettings() { + return SdkSystemSetting.AWS_ACCOUNT_ID_ENDPOINT_MODE.getStringValue() + .flatMap(this::stringToEnum); + } + + private Optional fromProfileFile(Supplier profileFile, String profileName) { + return profileFile.get() + .profile(profileName) + .flatMap(p -> p.property(ProfileProperty.ACCOUNT_ID_ENDPOINT_MODE)) + .flatMap(this::stringToEnum); + } + + private AccountIdEndpointMode fromDefaultMode() { + return defaultMode != null ? defaultMode : SDK_DEFAULT_MODE; + } + + private Optional stringToEnum(String value) { + return Optional.of(AccountIdEndpointMode.fromValue(value)); + } +} diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/AwsExecutionContextBuilder.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/AwsExecutionContextBuilder.java index 1c4c520fb6cd..b3510f75aca3 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/AwsExecutionContextBuilder.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/AwsExecutionContextBuilder.java @@ -114,6 +114,8 @@ private AwsExecutionContextBuilder() { .putAttribute(SdkExecutionAttribute.SIGNER_OVERRIDDEN, clientConfig.option(SdkClientOption.SIGNER_OVERRIDDEN)) .putAttribute(AwsExecutionAttribute.USE_GLOBAL_ENDPOINT, clientConfig.option(AwsClientOption.USE_GLOBAL_ENDPOINT)) + .putAttribute(AwsExecutionAttribute.AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE, + clientConfig.option(AwsClientOption.ACCOUNT_ID_ENDPOINT_MODE)) .putAttribute(RESOLVED_CHECKSUM_SPECS, HttpChecksumResolver.resolveChecksumSpecs(executionAttributes)); // Auth Scheme resolution related attributes diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/authcontext/AwsCredentialsAuthorizationStrategy.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/authcontext/AwsCredentialsAuthorizationStrategy.java index ce64b5f40e75..a14e163cae1d 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/authcontext/AwsCredentialsAuthorizationStrategy.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/authcontext/AwsCredentialsAuthorizationStrategy.java @@ -20,6 +20,7 @@ import software.amazon.awssdk.auth.credentials.AwsCredentials; import software.amazon.awssdk.auth.credentials.CredentialUtils; import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute; +import software.amazon.awssdk.awscore.AwsExecutionAttribute; import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.core.RequestOverrideConfiguration; import software.amazon.awssdk.core.SdkRequest; @@ -84,6 +85,8 @@ public void addCredentialsToExecutionAttributes(ExecutionAttributes executionAtt resolveCredentialsProvider(request, defaultCredentialsProvider); AwsCredentials credentials = CredentialUtils.toCredentials(resolveCredentials(credentialsProvider, metricCollector)); executionAttributes.putAttribute(AwsSignerExecutionAttribute.AWS_CREDENTIALS, credentials); + // TODO: A separate execution attribute is not strictly needed; this can be optimized before release + executionAttributes.putAttribute(AwsExecutionAttribute.AWS_AUTH_ACCOUNT_ID, credentials.accountId().orElse(null)); } /** diff --git a/core/aws-core/src/test/java/software/amazon/awssdk/awscore/endpoint/AccountIdEndpointModeResolverTest.java b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/endpoint/AccountIdEndpointModeResolverTest.java new file mode 100644 index 000000000000..ab23369e334b --- /dev/null +++ b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/endpoint/AccountIdEndpointModeResolverTest.java @@ -0,0 +1,140 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.awscore.endpoint; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode.DISABLED; +import static software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode.PREFERRED; +import static software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode.REQUIRED; + +import java.util.Arrays; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointModeResolver; +import software.amazon.awssdk.core.SdkSystemSetting; +import software.amazon.awssdk.profiles.ProfileFile; +import software.amazon.awssdk.profiles.ProfileProperty; +import software.amazon.awssdk.testutils.EnvironmentVariableHelper; +import software.amazon.awssdk.utils.Pair; +import software.amazon.awssdk.utils.StringInputStream; + +class AccountIdEndpointModeResolverTest { + private static final EnvironmentVariableHelper ENVIRONMENT_VARIABLE_HELPER = new EnvironmentVariableHelper(); + private static final String PROFILE = "test"; + + @BeforeEach + public void methodSetup() { + ENVIRONMENT_VARIABLE_HELPER.reset(); + System.clearProperty(SdkSystemSetting.AWS_ACCOUNT_ID_ENDPOINT_MODE.property()); + } + + @ParameterizedTest(name = "{index} - EXPECTED:{3} (sys:{0}, env:{1}, cfg:{2})") + @MethodSource("configValues") + void resolveMode_whenValidValues_resolvesCorrectly( + String systemProperty, String envVar, ProfileFile profileFile, AccountIdEndpointMode expected) { + + setUpSystemSettings(systemProperty, envVar); + + AccountIdEndpointModeResolver resolver = AccountIdEndpointModeResolver.create() + .profileFile(() -> profileFile) + .profileName(PROFILE); + assertThat(resolver.resolve()).isEqualTo(expected); + } + + private static Stream configValues() { + ProfileFile emptyProfile = configFile("profile test", Pair.of("foo", "bar")); + + Function testProfileConfig = + s -> configFile("profile test", Pair.of(ProfileProperty.ACCOUNT_ID_ENDPOINT_MODE, s)); + + return Stream.of( + Arguments.of(null, null, emptyProfile, PREFERRED), + Arguments.of("preferred", null, null, PREFERRED), + Arguments.of("required", null, null, REQUIRED), + Arguments.of("disabled", null, null, DISABLED), + Arguments.of("required", "preferred", null, REQUIRED), + Arguments.of("required", null, testProfileConfig.apply("preferred"), REQUIRED), + Arguments.of(null, "preferred", null, PREFERRED), + Arguments.of(null, "required", null, REQUIRED), + Arguments.of(null, "disabled", null, DISABLED), + Arguments.of(null, "disabled", testProfileConfig.apply("required"), DISABLED), + Arguments.of(null, null, testProfileConfig.apply("preferred"), PREFERRED), + Arguments.of(null, null, testProfileConfig.apply("required"), REQUIRED), + Arguments.of(null, null, testProfileConfig.apply("disabled"), DISABLED), + Arguments.of(null, null, configFile("profile test", Pair.of("bar", "baz")), PREFERRED), + Arguments.of(null, null, configFile("profile foo", Pair.of(ProfileProperty.ACCOUNT_ID_ENDPOINT_MODE, "required")), + PREFERRED) + ); + } + + @ParameterizedTest(name = "{index} - sys:{0}, env:{1}, cfg:{2}") + @MethodSource("invalidConfigValues") + void resolveMode_whenInvalidConfig_throws( + String systemProperty, String envVar, ProfileFile profileFile) { + + setUpSystemSettings(systemProperty, envVar); + + AccountIdEndpointModeResolver resolver = AccountIdEndpointModeResolver.create() + .profileFile(() -> profileFile) + .profileName(PROFILE); + assertThatThrownBy(resolver::resolve).isInstanceOf(IllegalArgumentException.class); + } + + private static Stream invalidConfigValues() { + Function testProfileConfig = + s -> configFile("profile test", Pair.of(ProfileProperty.ACCOUNT_ID_ENDPOINT_MODE, s)); + + return Stream.of( + Arguments.of("foo", null, null), + Arguments.of(null, "foo", null), + Arguments.of(null, null, testProfileConfig.apply("foo")) + ); + } + + private static void setUpSystemSettings(String systemProperty, String envVar) { + if (systemProperty != null) { + System.setProperty(SdkSystemSetting.AWS_ACCOUNT_ID_ENDPOINT_MODE.property(), systemProperty); + + } + if (envVar != null) { + ENVIRONMENT_VARIABLE_HELPER.set(SdkSystemSetting.AWS_ACCOUNT_ID_ENDPOINT_MODE.environmentVariable(), + envVar); + } + } + + private static ProfileFile configFile(String name, Pair... pairs) { + String values = Arrays.stream(pairs) + .map(pair -> String.format("%s=%s", pair.left(), pair.right())) + .collect(Collectors.joining(System.lineSeparator())); + String contents = String.format("[%s]\n%s", name, values); + + return configFile(contents); + } + + private static ProfileFile configFile(String credentialFile) { + return ProfileFile.builder() + .content(new StringInputStream(credentialFile)) + .type(ProfileFile.Type.CONFIGURATION) + .build(); + } +} diff --git a/core/checksums-spi/pom.xml b/core/checksums-spi/pom.xml index a80243af8f70..8249529f1232 100644 --- a/core/checksums-spi/pom.xml +++ b/core/checksums-spi/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 checksums-spi diff --git a/core/checksums/pom.xml b/core/checksums/pom.xml index 01a043f849d5..2404de74b228 100644 --- a/core/checksums/pom.xml +++ b/core/checksums/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 checksums diff --git a/core/crt-core/pom.xml b/core/crt-core/pom.xml index 3de8ea0794d0..c794d857ed61 100644 --- a/core/crt-core/pom.xml +++ b/core/crt-core/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 crt-core diff --git a/core/endpoints-spi/pom.xml b/core/endpoints-spi/pom.xml index f343781c550d..8f5f72d650a0 100644 --- a/core/endpoints-spi/pom.xml +++ b/core/endpoints-spi/pom.xml @@ -20,7 +20,7 @@ core software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/http-auth-aws-crt/pom.xml b/core/http-auth-aws-crt/pom.xml index caff051f2ab5..7246bd9cbe7d 100644 --- a/core/http-auth-aws-crt/pom.xml +++ b/core/http-auth-aws-crt/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 http-auth-aws-crt diff --git a/core/http-auth-aws-eventstream/pom.xml b/core/http-auth-aws-eventstream/pom.xml index 0b44cf5527f3..d71c6dce7d9c 100644 --- a/core/http-auth-aws-eventstream/pom.xml +++ b/core/http-auth-aws-eventstream/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 http-auth-aws-eventstream diff --git a/core/http-auth-aws/pom.xml b/core/http-auth-aws/pom.xml index a98b64d965c5..1f3dfab0e44e 100644 --- a/core/http-auth-aws/pom.xml +++ b/core/http-auth-aws/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 http-auth-aws diff --git a/core/http-auth-spi/pom.xml b/core/http-auth-spi/pom.xml index a96290583460..9dcb1447d827 100644 --- a/core/http-auth-spi/pom.xml +++ b/core/http-auth-spi/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 http-auth-spi diff --git a/core/http-auth/pom.xml b/core/http-auth/pom.xml index 9ec31e07e341..de9968b16ed1 100644 --- a/core/http-auth/pom.xml +++ b/core/http-auth/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 http-auth diff --git a/core/identity-spi/pom.xml b/core/identity-spi/pom.xml index c50203d60db5..47dfe7dba763 100644 --- a/core/identity-spi/pom.xml +++ b/core/identity-spi/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 identity-spi diff --git a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentity.java b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentity.java index f738df91fcb0..ce3c0b0cd458 100644 --- a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentity.java +++ b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentity.java @@ -15,6 +15,7 @@ package software.amazon.awssdk.identity.spi; +import java.util.Optional; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.identity.spi.internal.DefaultAwsCredentialsIdentity; @@ -32,6 +33,7 @@ @SdkPublicApi @ThreadSafe public interface AwsCredentialsIdentity extends Identity { + /** * Retrieve the AWS access key, used to identify the user interacting with services. */ @@ -42,6 +44,12 @@ public interface AwsCredentialsIdentity extends Identity { */ String secretAccessKey(); + /** + * Retrieve the AWS account id associated with this credentials identity, if found. + */ + default Optional accountId() { + return Optional.empty(); + } static Builder builder() { return DefaultAwsCredentialsIdentity.builder(); @@ -70,6 +78,11 @@ interface Builder { */ Builder secretAccessKey(String secretAccessKey); + /** + * The AWS account id associated with this credentials identity. + */ + Builder accountId(String accountId); + /** * The name of the identity provider that created this credential identity. */ diff --git a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentity.java b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentity.java index bf3ae020fbe0..5a3228ab8c77 100644 --- a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentity.java +++ b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentity.java @@ -60,6 +60,9 @@ interface Builder extends AwsCredentialsIdentity.Builder { @Override Builder secretAccessKey(String secretAccessKey); + @Override + Builder accountId(String accountId); + /** * The AWS session token, retrieved from an AWS token service, used for authenticating that this user has * received temporary permission to access some resource. diff --git a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsCredentialsIdentity.java b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsCredentialsIdentity.java index 2e38b32ded6a..42f643babc51 100644 --- a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsCredentialsIdentity.java +++ b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsCredentialsIdentity.java @@ -28,11 +28,13 @@ public final class DefaultAwsCredentialsIdentity implements AwsCredentialsIdenti private final String accessKeyId; private final String secretAccessKey; private final String providerName; + private final String accountId; private DefaultAwsCredentialsIdentity(Builder builder) { this.accessKeyId = builder.accessKeyId; this.secretAccessKey = builder.secretAccessKey; this.providerName = builder.providerName; + this.accountId = builder.accountId; Validate.paramNotNull(accessKeyId, "accessKeyId"); Validate.paramNotNull(secretAccessKey, "secretAccessKey"); @@ -57,11 +59,17 @@ public Optional providerName() { return Optional.ofNullable(providerName); } + @Override + public Optional accountId() { + return Optional.ofNullable(accountId); + } + @Override public String toString() { return ToString.builder("AwsCredentialsIdentity") .add("accessKeyId", accessKeyId) .add("providerName", providerName) + .add("accountId", accountId) .build(); } @@ -75,7 +83,8 @@ public boolean equals(Object o) { } AwsCredentialsIdentity that = (AwsCredentialsIdentity) o; return Objects.equals(accessKeyId, that.accessKeyId()) && - Objects.equals(secretAccessKey, that.secretAccessKey()); + Objects.equals(secretAccessKey, that.secretAccessKey()) && + Objects.equals(accountId, that.accountId().orElse(null)); } @Override @@ -83,6 +92,7 @@ public int hashCode() { int hashCode = 1; hashCode = 31 * hashCode + Objects.hashCode(accessKeyId); hashCode = 31 * hashCode + Objects.hashCode(secretAccessKey); + hashCode = 31 * hashCode + Objects.hashCode(accountId); return hashCode; } @@ -90,6 +100,7 @@ private static final class Builder implements AwsCredentialsIdentity.Builder { private String accessKeyId; private String secretAccessKey; private String providerName; + private String accountId; private Builder() { } @@ -112,6 +123,12 @@ public Builder providerName(String providerName) { return this; } + @Override + public Builder accountId(String accountId) { + this.accountId = accountId; + return this; + } + @Override public AwsCredentialsIdentity build() { return new DefaultAwsCredentialsIdentity(this); diff --git a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsSessionCredentialsIdentity.java b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsSessionCredentialsIdentity.java index 7b07dfb4f31c..a55a579f6b19 100644 --- a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsSessionCredentialsIdentity.java +++ b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultAwsSessionCredentialsIdentity.java @@ -29,12 +29,15 @@ public final class DefaultAwsSessionCredentialsIdentity implements AwsSessionCre private final String secretAccessKey; private final String sessionToken; private final String providerName; + private final String accountId; + private DefaultAwsSessionCredentialsIdentity(Builder builder) { this.accessKeyId = builder.accessKeyId; this.secretAccessKey = builder.secretAccessKey; this.sessionToken = builder.sessionToken; this.providerName = builder.providerName; + this.accountId = builder.accountId; Validate.paramNotNull(accessKeyId, "accessKeyId"); Validate.paramNotNull(secretAccessKey, "secretAccessKey"); @@ -55,6 +58,11 @@ public String secretAccessKey() { return secretAccessKey; } + @Override + public Optional accountId() { + return Optional.ofNullable(accountId); + } + @Override public String sessionToken() { return sessionToken; @@ -70,6 +78,7 @@ public String toString() { return ToString.builder("AwsSessionCredentialsIdentity") .add("accessKeyId", accessKeyId) .add("providerName", providerName) + .add("accountId", accountId) .build(); } @@ -84,7 +93,8 @@ public boolean equals(Object o) { AwsSessionCredentialsIdentity that = (AwsSessionCredentialsIdentity) o; return Objects.equals(accessKeyId, that.accessKeyId()) && Objects.equals(secretAccessKey, that.secretAccessKey()) && - Objects.equals(sessionToken, that.sessionToken()); + Objects.equals(sessionToken, that.sessionToken()) && + Objects.equals(accountId, that.accountId().orElse(null)); } @Override @@ -93,6 +103,7 @@ public int hashCode() { hashCode = 31 * hashCode + Objects.hashCode(accessKeyId); hashCode = 31 * hashCode + Objects.hashCode(secretAccessKey); hashCode = 31 * hashCode + Objects.hashCode(sessionToken); + hashCode = 31 * hashCode + Objects.hashCode(accountId); return hashCode; } @@ -101,6 +112,7 @@ private static final class Builder implements AwsSessionCredentialsIdentity.Buil private String secretAccessKey; private String sessionToken; private String providerName; + private String accountId; private Builder() { } @@ -129,6 +141,13 @@ public Builder providerName(String providerName) { return this; } + + @Override + public Builder accountId(String accountId) { + this.accountId = accountId; + return this; + } + @Override public AwsSessionCredentialsIdentity build() { return new DefaultAwsSessionCredentialsIdentity(this); diff --git a/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentityTest.java b/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentityTest.java index a75cfafa340f..02a141bd3bc5 100644 --- a/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentityTest.java +++ b/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsCredentialsIdentityTest.java @@ -16,7 +16,9 @@ package software.amazon.awssdk.identity.spi; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import nl.jqno.equalsverifier.EqualsVerifier; import org.junit.jupiter.api.Test; @@ -26,6 +28,7 @@ public class AwsCredentialsIdentityTest { private static final String ACCESS_KEY_ID = "accessKeyId"; private static final String SECRET_ACCESS_KEY = "secretAccessKey"; + private static final String ACCOUNT_ID = "accountId"; @Test public void equalsHashcode() { @@ -54,6 +57,7 @@ public void create_isSuccessful() { AwsCredentialsIdentity identity = AwsCredentialsIdentity.create(ACCESS_KEY_ID, SECRET_ACCESS_KEY); assertEquals(ACCESS_KEY_ID, identity.accessKeyId()); assertEquals(SECRET_ACCESS_KEY, identity.secretAccessKey()); + assertFalse(identity.accountId().isPresent()); } @Test @@ -61,8 +65,11 @@ public void build_isSuccessful() { AwsCredentialsIdentity identity = AwsCredentialsIdentity.builder() .accessKeyId(ACCESS_KEY_ID) .secretAccessKey(SECRET_ACCESS_KEY) + .accountId(ACCOUNT_ID) .build(); assertEquals(ACCESS_KEY_ID, identity.accessKeyId()); assertEquals(SECRET_ACCESS_KEY, identity.secretAccessKey()); + assertTrue(identity.accountId().isPresent()); + assertEquals(ACCOUNT_ID, identity.accountId().get()); } } diff --git a/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentityTest.java b/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentityTest.java index b687b7b89348..7e2218303505 100644 --- a/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentityTest.java +++ b/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/AwsSessionCredentialsIdentityTest.java @@ -16,7 +16,9 @@ package software.amazon.awssdk.identity.spi; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import nl.jqno.equalsverifier.EqualsVerifier; import org.junit.jupiter.api.Test; @@ -27,6 +29,7 @@ public class AwsSessionCredentialsIdentityTest { private static final String ACCESS_KEY_ID = "accessKeyId"; private static final String SECRET_ACCESS_KEY = "secretAccessKey"; private static final String SESSION_TOKEN = "sessionToken"; + private static final String ACCOUNT_ID = "accountId"; @Test public void equalsHashcode() { @@ -64,6 +67,7 @@ public void create_isSuccessful() { assertEquals(ACCESS_KEY_ID, identity.accessKeyId()); assertEquals(SECRET_ACCESS_KEY, identity.secretAccessKey()); assertEquals(SESSION_TOKEN, identity.sessionToken()); + assertFalse(identity.accountId().isPresent()); } @Test @@ -72,9 +76,12 @@ public void build_isSuccessful() { .accessKeyId(ACCESS_KEY_ID) .secretAccessKey(SECRET_ACCESS_KEY) .sessionToken(SESSION_TOKEN) + .accountId(ACCOUNT_ID) .build(); assertEquals(ACCESS_KEY_ID, identity.accessKeyId()); assertEquals(SECRET_ACCESS_KEY, identity.secretAccessKey()); assertEquals(SESSION_TOKEN, identity.sessionToken()); + assertTrue(identity.accountId().isPresent()); + assertEquals(ACCOUNT_ID, identity.accountId().get()); } } diff --git a/core/imds/pom.xml b/core/imds/pom.xml index e85cb104c77d..e8c09f6481be 100644 --- a/core/imds/pom.xml +++ b/core/imds/pom.xml @@ -20,7 +20,7 @@ core software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 imds diff --git a/core/json-utils/pom.xml b/core/json-utils/pom.xml index 0247c8a891f1..a236bfe75dc1 100644 --- a/core/json-utils/pom.xml +++ b/core/json-utils/pom.xml @@ -20,7 +20,7 @@ core software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/metrics-spi/pom.xml b/core/metrics-spi/pom.xml index 053339c3755e..cb8c9e7e6598 100644 --- a/core/metrics-spi/pom.xml +++ b/core/metrics-spi/pom.xml @@ -5,7 +5,7 @@ core software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/pom.xml b/core/pom.xml index a94dfe292ff6..242f11439a57 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -21,7 +21,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 core diff --git a/core/profiles/pom.xml b/core/profiles/pom.xml index 28cb19aea894..b9e4b2f8851e 100644 --- a/core/profiles/pom.xml +++ b/core/profiles/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 profiles diff --git a/core/profiles/src/main/java/software/amazon/awssdk/profiles/ProfileProperty.java b/core/profiles/src/main/java/software/amazon/awssdk/profiles/ProfileProperty.java index 4f880510ca5a..97d35332ada9 100644 --- a/core/profiles/src/main/java/software/amazon/awssdk/profiles/ProfileProperty.java +++ b/core/profiles/src/main/java/software/amazon/awssdk/profiles/ProfileProperty.java @@ -39,6 +39,11 @@ public final class ProfileProperty { */ public static final String AWS_SESSION_TOKEN = "aws_session_token"; + /** + * Property name for specifying the Amazon AWS Account ID associated with credentials + */ + public static final String AWS_ACCOUNT_ID = "aws_account_id"; + /** * Property name for specifying the IAM role to assume */ @@ -113,6 +118,15 @@ public final class ProfileProperty { */ public static final String DEFAULTS_MODE = "defaults_mode"; + /** + * The "account id endpoint mode" to be used for clients created using the currently-configured profile. + * This setting can only be used by services that route user requests to account specific endpoints, and determines + * how endpoints should be resolved depending on the availability of an accountId for a request. + * + * See the {@code AccountIdEndpointMode} class javadoc for more information. + */ + public static final String ACCOUNT_ID_ENDPOINT_MODE = "account_id_endpoint_mode"; + /** * Aws region where the SSO directory for the given 'sso_start_url' is hosted. This is independent of the general 'region'. */ diff --git a/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileSupplierTest.java b/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileSupplierTest.java index 6fa45ecbe4fb..0e8083f20faa 100644 --- a/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileSupplierTest.java +++ b/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileSupplierTest.java @@ -68,7 +68,7 @@ public static void tearDown() { @Test void get_profileFileFixed_doesNotReloadProfileFile() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); ProfileFileSupplier supplier = builder() .fixedProfileFile(credentialsFilePath, ProfileFile.Type.CREDENTIALS) @@ -76,7 +76,7 @@ void get_profileFileFixed_doesNotReloadProfileFile() { ProfileFile file1 = supplier.get(); - generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey"); + generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey", "modifiedAccountId"); ProfileFile file2 = supplier.get(); @@ -85,7 +85,7 @@ void get_profileFileFixed_doesNotReloadProfileFile() { @Test void get_profileModifiedWithinJitterPeriod_doesNotReloadCredentials() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); AdjustableClock clock = new AdjustableClock(); Duration durationWithinJitter = Duration.ofMillis(10); @@ -95,7 +95,7 @@ void get_profileModifiedWithinJitterPeriod_doesNotReloadCredentials() { ProfileFile file1 = supplier.get(); - generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey"); + generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey", "modifiedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plus(durationWithinJitter)); clock.tickForward(durationWithinJitter); @@ -106,7 +106,7 @@ void get_profileModifiedWithinJitterPeriod_doesNotReloadCredentials() { @Test void get_profileModifiedOutsideJitterPeriod_reloadsCredentials() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); AdjustableClock clock = new AdjustableClock(); @@ -118,7 +118,7 @@ void get_profileModifiedOutsideJitterPeriod_reloadsCredentials() { supplier.get(); - generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey"); + generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey", "modifiedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plus(durationOutsideJitter)); clock.tickForward(durationOutsideJitter); @@ -136,12 +136,17 @@ void get_profileModifiedOutsideJitterPeriod_reloadsCredentials() { assertThat(awsSecretAccessKeyOptional).isPresent(); String awsSecretAccessKey = awsSecretAccessKeyOptional.get(); assertThat(awsSecretAccessKey).isEqualTo("modifiedSecretAccessKey"); + + Optional awsAccountIdOptional = profile.property("aws_account_id"); + assertThat(awsAccountIdOptional).isPresent(); + String awsAccountId = awsAccountIdOptional.get(); + assertThat(awsAccountId).isEqualTo("modifiedAccountId"); }); } @Test void get_profileModified_reloadsProfileFile() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); AdjustableClock clock = new AdjustableClock(); ProfileFileSupplier supplier = builderWithClock(clock) @@ -151,7 +156,7 @@ void get_profileModified_reloadsProfileFile() { Duration duration = Duration.ofSeconds(10); ProfileFile file1 = supplier.get(); - generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey"); + generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey", "modifiedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plusMillis(1)); clock.tickForward(duration); @@ -162,7 +167,7 @@ void get_profileModified_reloadsProfileFile() { @Test void get_profileModifiedOnceButRefreshedMultipleTimes_reloadsProfileFileOnce() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); AdjustableClock clock = new AdjustableClock(); ProfileFileSupplier supplier = builderWithClock(clock) @@ -173,7 +178,7 @@ void get_profileModifiedOnceButRefreshedMultipleTimes_reloadsProfileFileOnce() { clock.tickForward(Duration.ofSeconds(5)); ProfileFile file2 = supplier.get(); - generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey"); + generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey", "modifiedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plusMillis(1)); clock.tickForward(Duration.ofSeconds(5)); @@ -185,7 +190,7 @@ void get_profileModifiedOnceButRefreshedMultipleTimes_reloadsProfileFileOnce() { @Test void get_profileModifiedMultipleTimes_reloadsProfileFileOncePerChange() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); AdjustableClock clock = new AdjustableClock(); ProfileFileSupplier supplier = builderWithClock(clock) @@ -198,13 +203,13 @@ void get_profileModifiedMultipleTimes_reloadsProfileFileOncePerChange() { clock.tickForward(duration); ProfileFile file2 = supplier.get(); - generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey"); + generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey", "modifiedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plusMillis(1)); clock.tickForward(duration); ProfileFile file3 = supplier.get(); - generateTestCredentialsFile("updatedAccessKey", "updatedSecretAccessKey"); + generateTestCredentialsFile("updatedAccessKey", "updatedSecretAccessKey", "updatedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plusMillis(1)); clock.tickForward(duration); @@ -221,7 +226,7 @@ void get_profileModifiedMultipleTimes_reloadsProfileFileOncePerChange() { @Test void get_supplierBuiltByReloadWhenModified_loadsProfileFile() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); ProfileFileSupplier supplier = ProfileFileSupplier.reloadWhenModified(credentialsFilePath, ProfileFile.Type.CREDENTIALS); ProfileFile file = supplier.get(); @@ -239,12 +244,17 @@ void get_supplierBuiltByReloadWhenModified_loadsProfileFile() { assertThat(awsSecretAccessKeyOptional).isPresent(); String awsSecretAccessKey = awsSecretAccessKeyOptional.get(); assertThat(awsSecretAccessKey).isEqualTo("defaultSecretAccessKey"); + + Optional awsAccountIdOptional = profile.property("aws_account_id"); + assertThat(awsAccountIdOptional).isPresent(); + String awsAccountId = awsAccountIdOptional.get(); + assertThat(awsAccountId).isEqualTo("defaultAccountId"); }); } @Test void get_supplierBuiltByFixedProfileFile_returnsProfileFile() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); ProfileFileSupplier supplier = ProfileFileSupplier.fixedProfileFile(ProfileFile.builder() .content(credentialsFilePath) @@ -265,12 +275,17 @@ void get_supplierBuiltByFixedProfileFile_returnsProfileFile() { assertThat(awsSecretAccessKeyOptional).isPresent(); String awsSecretAccessKey = awsSecretAccessKeyOptional.get(); assertThat(awsSecretAccessKey).isEqualTo("defaultSecretAccessKey"); + + Optional awsAccountIdOptional = profile.property("aws_account_id"); + assertThat(awsAccountIdOptional).isPresent(); + String awsAccountId = awsAccountIdOptional.get(); + assertThat(awsAccountId).isEqualTo("defaultAccountId"); }); } @Test void get_supplierBuiltByReloadWhenModifiedAggregate_reloadsCredentials() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); Path configFilePath = generateTestConfigFile(Pair.of("region", "us-west-2")); ProfileFileSupplier credentialsProfileFileSupplier = ProfileFileSupplier.reloadWhenModified(credentialsFilePath, @@ -302,7 +317,7 @@ void get_supplierBuiltByReloadWhenModifiedAggregate_reloadsCredentials() { @Test void get_supplierBuiltByFixedProfileFileAggregate_returnsAggregateProfileFileInstance() { - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); Path configFilePath = generateTestConfigFile(Pair.of("region", "us-west-2")); ProfileFileSupplier credentialsProfileFileSupplier @@ -332,6 +347,11 @@ void get_supplierBuiltByFixedProfileFileAggregate_returnsAggregateProfileFileIns String awsSecretAccessKey = awsSecretAccessKeyOptional.get(); assertThat(awsSecretAccessKey).isEqualTo("defaultSecretAccessKey"); + Optional awsAccountIdOptional = profile.property("aws_account_id"); + assertThat(awsAccountIdOptional).isPresent(); + String awsAccountId = awsAccountIdOptional.get(); + assertThat(awsAccountId).isEqualTo("defaultAccountId"); + Optional regionOptional = profile.property("region"); assertThat(regionOptional).isPresent(); String region = regionOptional.get(); @@ -341,11 +361,13 @@ void get_supplierBuiltByFixedProfileFileAggregate_returnsAggregateProfileFileIns @Test void aggregate_supplierReturnsSameInstanceMultipleTimesAggregatingProfileFile_aggregatesOnlyDistinctInstances() { - ProfileFile credentialFile1 = credentialFile("test1", "key1", "secret1"); - ProfileFile credentialFile2 = credentialFile("test2", "key2", "secret2"); - ProfileFile credentialFile3 = credentialFile("test3", "key3", "secret3"); - ProfileFile credentialFile4 = credentialFile("test4", "key4", "secret4"); - ProfileFile configFile = configFile("profile test", Pair.of("region", "us-west-2")); + ProfileFile credentialFile1 = credentialProfileFile("test1", "key1", "secret1"); + ProfileFile credentialFile2 = credentialProfileFile("test2", "key2", "secret2"); + ProfileFile credentialFile3 = credentialProfileFile("test3", "key3", "secret3"); + ProfileFile credentialFile4 = credentialProfileFile("test4", "key4", "secret4"); + ProfileFile configFile = configProfileFile("profile test", + Pair.of("region", "us-west-2"), + Pair.of("aws_account_id", "012354678922")); List orderedCredentialsFiles = Arrays.asList(credentialFile1, credentialFile1, credentialFile2, credentialFile3, credentialFile3, credentialFile4, @@ -370,13 +392,13 @@ void aggregate_supplierReturnsSameInstanceMultipleTimesAggregatingProfileFile_ag @Test void aggregate_supplierReturnsSameInstanceMultipleTimesAggregatingProfileFileSupplier_aggregatesOnlyDistinctInstances() { - ProfileFile credentialFile1 = credentialFile("test1", "key1", "secret1"); - ProfileFile credentialFile2 = credentialFile("test2", "key2", "secret2"); - ProfileFile credentialFile3 = credentialFile("test3", "key3", "secret3"); - ProfileFile credentialFile4 = credentialFile("test4", "key4", "secret4"); - ProfileFile configFile1 = configFile("profile test", Pair.of("region", "us-west-1")); - ProfileFile configFile2 = configFile("profile test", Pair.of("region", "us-west-2")); - ProfileFile configFile3 = configFile("profile test", Pair.of("region", "us-west-3")); + ProfileFile credentialFile1 = credentialProfileFile("test1", "key1", "secret1"); + ProfileFile credentialFile2 = credentialProfileFile("test2", "key2", "secret2"); + ProfileFile credentialFile3 = credentialProfileFile("test3", "key3", "secret3"); + ProfileFile credentialFile4 = credentialProfileFile("test4", "key4", "secret4"); + ProfileFile configFile1 = configProfileFile("profile test", Pair.of("region", "us-west-1")); + ProfileFile configFile2 = configProfileFile("profile test", Pair.of("region", "us-west-2")); + ProfileFile configFile3 = configProfileFile("profile test", Pair.of("region", "us-west-3")); List orderedCredentialsFiles = Arrays.asList(credentialFile1, credentialFile1, credentialFile2, credentialFile2, credentialFile3, @@ -412,8 +434,10 @@ void aggregate_supplierReturnsSameInstanceMultipleTimesAggregatingProfileFileSup @Test void aggregate_duplicateOptionsGivenFixedProfileFirst_preservesPrecedence() { - ProfileFile configFile1 = configFile("profile default", Pair.of("aws_access_key_id", "config-key")); - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + ProfileFile configFile1 = configProfileFile("profile default", + Pair.of("aws_access_key_id", "config-key"), + Pair.of("aws_account_id", "012354678922")); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); ProfileFileSupplier supplier = ProfileFileSupplier.aggregate( ProfileFileSupplier.fixedProfileFile(configFile1), @@ -421,15 +445,19 @@ void aggregate_duplicateOptionsGivenFixedProfileFirst_preservesPrecedence() { ProfileFile profileFile = supplier.get(); String accessKeyId = profileFile.profile("default").get().property("aws_access_key_id").get(); + String accountId = profileFile.profile("default").get().property("aws_account_id").get(); assertThat(accessKeyId).isEqualTo("config-key"); + assertThat(accountId).isEqualTo("012354678922"); - generateTestCredentialsFile("defaultAccessKey2", "defaultSecretAccessKey2"); + generateTestCredentialsFile("defaultAccessKey2", "defaultSecretAccessKey2", "defaultAccountId2"); profileFile = supplier.get(); accessKeyId = profileFile.profile("default").get().property("aws_access_key_id").get(); + accountId = profileFile.profile("default").get().property("aws_account_id").get(); assertThat(accessKeyId).isEqualTo("config-key"); + assertThat(accountId).isEqualTo("012354678922"); } @Test @@ -437,8 +465,8 @@ void aggregate_duplicateOptionsGivenReloadingProfileFirst_preservesPrecedence() Instant startTime = Instant.now(); AdjustableClock clock = new AdjustableClock(startTime); - ProfileFile configFile1 = configFile("profile default", Pair.of("aws_access_key_id", "config-key")); - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + ProfileFile configFile1 = configProfileFile("profile default", Pair.of("aws_access_key_id", "config-key")); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); ProfileFileSupplier supplier = ProfileFileSupplier.aggregate( builderWithClock(clock) @@ -451,7 +479,7 @@ void aggregate_duplicateOptionsGivenReloadingProfileFirst_preservesPrecedence() assertThat(accessKeyId).isEqualTo("defaultAccessKey"); - generateTestCredentialsFile("defaultAccessKey2", "defaultSecretAccessKey2"); + generateTestCredentialsFile("defaultAccessKey2", "defaultSecretAccessKey2", "defaultAccountId2"); Duration tick = Duration.ofMillis(1_000); @@ -481,7 +509,7 @@ void get_givenOnLoadAction_callsActionOncePerNewProfileFile() { int actualProfilesCount = 3; AtomicInteger blockCount = new AtomicInteger(); - Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey"); + Path credentialsFilePath = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey", "defaultAccountId"); AdjustableClock clock = new AdjustableClock(); ProfileFileSupplier supplier = builderWithClock(clock) @@ -495,13 +523,13 @@ void get_givenOnLoadAction_callsActionOncePerNewProfileFile() { clock.tickForward(duration); supplier.get(); - generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey"); + generateTestCredentialsFile("modifiedAccessKey", "modifiedSecretAccessKey", "modifiedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plusMillis(1)); clock.tickForward(duration); supplier.get(); - generateTestCredentialsFile("updatedAccessKey", "updatedSecretAccessKey"); + generateTestCredentialsFile("updatedAccessKey", "updatedSecretAccessKey", "updatedAccountId"); updateModificationTime(credentialsFilePath, clock.instant().plusMillis(1)); clock.tickForward(duration); @@ -522,9 +550,10 @@ private Path writeTestFile(String contents, Path path) { } } - private Path generateTestCredentialsFile(String accessKeyId, String secretAccessKey) { - String contents = String.format("[default]\naws_access_key_id = %s\naws_secret_access_key = %s\n", - accessKeyId, secretAccessKey); + private Path generateTestCredentialsFile(String accessKeyId, String secretAccessKey, String accountId) { + String contents = String.format("[default]\naws_access_key_id = %s\naws_secret_access_key = %s\n" + + "aws_account_id = %s\n", + accessKeyId, secretAccessKey, accountId); return writeTestFile(contents, getTestCredentialsFilePath()); } @@ -549,33 +578,33 @@ private void updateModificationTime(Path path, Instant instant) { } } - private ProfileFile credentialFile(String credentialFile) { + private ProfileFile credentialProfileFile(String credentialFile) { return ProfileFile.builder() .content(new StringInputStream(credentialFile)) .type(ProfileFile.Type.CREDENTIALS) .build(); } - private ProfileFile credentialFile(String name, String accessKeyId, String secretAccessKey) { + private ProfileFile credentialProfileFile(String name, String accessKeyId, String secretAccessKey) { String contents = String.format("[%s]\naws_access_key_id = %s\naws_secret_access_key = %s\n", name, accessKeyId, secretAccessKey); - return credentialFile(contents); + return credentialProfileFile(contents); } - private ProfileFile configFile(String credentialFile) { + private ProfileFile configProfileFile(String credentialFile) { return ProfileFile.builder() .content(new StringInputStream(credentialFile)) .type(ProfileFile.Type.CONFIGURATION) .build(); } - private ProfileFile configFile(String name, Pair... pairs) { + private ProfileFile configProfileFile(String name, Pair... pairs) { String values = Arrays.stream(pairs) .map(pair -> String.format("%s=%s", pair.left(), pair.right())) .collect(Collectors.joining(System.lineSeparator())); String contents = String.format("[%s]\n%s", name, values); - return configFile(contents); + return configProfileFile(contents); } private static Predicate uniqueInstances() { diff --git a/core/protocols/aws-cbor-protocol/pom.xml b/core/protocols/aws-cbor-protocol/pom.xml index 21809a83271f..2fc8a8232a59 100644 --- a/core/protocols/aws-cbor-protocol/pom.xml +++ b/core/protocols/aws-cbor-protocol/pom.xml @@ -20,7 +20,7 @@ protocols software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/protocols/aws-json-protocol/pom.xml b/core/protocols/aws-json-protocol/pom.xml index 8dffde399779..1b7f954f83dd 100644 --- a/core/protocols/aws-json-protocol/pom.xml +++ b/core/protocols/aws-json-protocol/pom.xml @@ -20,7 +20,7 @@ protocols software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/protocols/aws-query-protocol/pom.xml b/core/protocols/aws-query-protocol/pom.xml index 61c005e5bf26..ea7848e744b1 100644 --- a/core/protocols/aws-query-protocol/pom.xml +++ b/core/protocols/aws-query-protocol/pom.xml @@ -20,7 +20,7 @@ protocols software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/protocols/aws-xml-protocol/pom.xml b/core/protocols/aws-xml-protocol/pom.xml index 4e32e75eacee..b980403bbe00 100644 --- a/core/protocols/aws-xml-protocol/pom.xml +++ b/core/protocols/aws-xml-protocol/pom.xml @@ -20,7 +20,7 @@ protocols software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/protocols/pom.xml b/core/protocols/pom.xml index 3df6866a7211..5c7198f6bd7a 100644 --- a/core/protocols/pom.xml +++ b/core/protocols/pom.xml @@ -20,7 +20,7 @@ core software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/protocols/protocol-core/pom.xml b/core/protocols/protocol-core/pom.xml index 3cb5edfa1c26..bfa6fcf7e238 100644 --- a/core/protocols/protocol-core/pom.xml +++ b/core/protocols/protocol-core/pom.xml @@ -20,7 +20,7 @@ protocols software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/core/regions/pom.xml b/core/regions/pom.xml index dbf01d11945d..7b9e953f050a 100644 --- a/core/regions/pom.xml +++ b/core/regions/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 regions diff --git a/core/regions/src/main/resources/software/amazon/awssdk/regions/internal/region/endpoints.json b/core/regions/src/main/resources/software/amazon/awssdk/regions/internal/region/endpoints.json index f95a23a901c2..27e464f51716 100644 --- a/core/regions/src/main/resources/software/amazon/awssdk/regions/internal/region/endpoints.json +++ b/core/regions/src/main/resources/software/amazon/awssdk/regions/internal/region/endpoints.json @@ -21251,6 +21251,17 @@ "cn-northwest-1" : { } } }, + "entitlement.marketplace" : { + "endpoints" : { + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "entitlement-marketplace.cn-northwest-1.amazonaws.com.cn", + "protocols" : [ "HTTPS" ] + } + } + }, "es" : { "endpoints" : { "cn-north-1" : { diff --git a/core/sdk-core/pom.xml b/core/sdk-core/pom.xml index ff5356de3111..eb05243ad684 100644 --- a/core/sdk-core/pom.xml +++ b/core/sdk-core/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk core - 2.25.36 + 2.25.37 sdk-core AWS Java SDK :: SDK Core diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java index 1f08db5a9057..e59f663c06c8 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java @@ -45,6 +45,11 @@ public enum SdkSystemSetting implements SystemSetting { */ AWS_SESSION_TOKEN("aws.sessionToken", null), + /** + * Configure the AWS account id associated with credentials supplied through system properties. + */ + AWS_ACCOUNT_ID("aws.accountId", null), + /** * Configure the AWS web identity token file path. */ @@ -187,6 +192,11 @@ public enum SdkSystemSetting implements SystemSetting { */ AWS_DEFAULTS_MODE("aws.defaultsMode", null), + /** + * Which {@code AccountIdEndpointMode} to use, case insensitive + */ + AWS_ACCOUNT_ID_ENDPOINT_MODE("aws.accountIdEndpointMode", null), + /** * Defines whether dualstack endpoints should be resolved during default endpoint resolution instead of non-dualstack * endpoints. diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/useragent/IdentityProviderNameMapping.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/useragent/IdentityProviderNameMapping.java index d76b0b250a42..95e249eb529f 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/useragent/IdentityProviderNameMapping.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/useragent/IdentityProviderNameMapping.java @@ -31,9 +31,9 @@ public enum IdentityProviderNameMapping { SYS("SystemPropertyCredentialsProvider"), ENV("EnvironmentVariableCredentialsProvider"), - STSWEB("StsAssumeRoleWithWebIdentity"), + STSWEB("StsAssumeRoleWithWebIdentityCredentialsProvider"), STSROLE("StsAssumeRoleCredentialsProvider"), - STSSAML("StsAssumeRoleWithWebIdentityCredentialsProvider"), + STSSAML("StsAssumeRoleWithSamlCredentialsProvider"), STSFED("StsGetFederationTokenCredentialsProvider"), STSSESS("StsGetSessionTokenCredentialsProvider"), SSO("SsoCredentialsProvider"), diff --git a/http-client-spi/pom.xml b/http-client-spi/pom.xml index 8d699e4cb8b5..418a558a1d99 100644 --- a/http-client-spi/pom.xml +++ b/http-client-spi/pom.xml @@ -22,7 +22,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 http-client-spi AWS Java SDK :: HTTP Client Interface diff --git a/http-clients/apache-client/pom.xml b/http-clients/apache-client/pom.xml index edfcea3d5399..15a3ebba5a97 100644 --- a/http-clients/apache-client/pom.xml +++ b/http-clients/apache-client/pom.xml @@ -21,7 +21,7 @@ http-clients software.amazon.awssdk - 2.25.36 + 2.25.37 apache-client diff --git a/http-clients/aws-crt-client/pom.xml b/http-clients/aws-crt-client/pom.xml index 8d8d55aa798b..4abfb0f7c59f 100644 --- a/http-clients/aws-crt-client/pom.xml +++ b/http-clients/aws-crt-client/pom.xml @@ -21,7 +21,7 @@ http-clients software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/http-clients/netty-nio-client/pom.xml b/http-clients/netty-nio-client/pom.xml index d9fbeb86b3e2..123ddf0719f8 100644 --- a/http-clients/netty-nio-client/pom.xml +++ b/http-clients/netty-nio-client/pom.xml @@ -20,7 +20,7 @@ http-clients software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/http-clients/pom.xml b/http-clients/pom.xml index 712751c51e89..9a74fa57b425 100644 --- a/http-clients/pom.xml +++ b/http-clients/pom.xml @@ -21,7 +21,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/http-clients/url-connection-client/pom.xml b/http-clients/url-connection-client/pom.xml index f331ea4b0d1e..d66ade4f062f 100644 --- a/http-clients/url-connection-client/pom.xml +++ b/http-clients/url-connection-client/pom.xml @@ -20,7 +20,7 @@ http-clients software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/metric-publishers/cloudwatch-metric-publisher/pom.xml b/metric-publishers/cloudwatch-metric-publisher/pom.xml index a21b6fce95c8..f9446cf3c359 100644 --- a/metric-publishers/cloudwatch-metric-publisher/pom.xml +++ b/metric-publishers/cloudwatch-metric-publisher/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk metric-publishers - 2.25.36 + 2.25.37 cloudwatch-metric-publisher diff --git a/metric-publishers/pom.xml b/metric-publishers/pom.xml index 535b1199b920..d502f71bbca5 100644 --- a/metric-publishers/pom.xml +++ b/metric-publishers/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 metric-publishers diff --git a/pom.xml b/pom.xml index f58df3b8cd07..efff18a2e4a2 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 4.0.0 software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 pom AWS Java SDK :: Parent The Amazon Web Services SDK for Java provides Java APIs @@ -96,7 +96,7 @@ ${project.version} - 2.25.35 + 2.25.36 2.15.2 2.15.2 2.13.2 diff --git a/release-scripts/pom.xml b/release-scripts/pom.xml index 92dcf58d1693..01269ea5be01 100644 --- a/release-scripts/pom.xml +++ b/release-scripts/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../pom.xml release-scripts diff --git a/services-custom/dynamodb-enhanced/pom.xml b/services-custom/dynamodb-enhanced/pom.xml index 143e6d4f6d9b..a9884755cc63 100644 --- a/services-custom/dynamodb-enhanced/pom.xml +++ b/services-custom/dynamodb-enhanced/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services-custom - 2.25.36 + 2.25.37 dynamodb-enhanced AWS Java SDK :: DynamoDB :: Enhanced Client diff --git a/services-custom/iam-policy-builder/pom.xml b/services-custom/iam-policy-builder/pom.xml index 81115f143c2f..d5890de7d780 100644 --- a/services-custom/iam-policy-builder/pom.xml +++ b/services-custom/iam-policy-builder/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../../pom.xml iam-policy-builder diff --git a/services-custom/pom.xml b/services-custom/pom.xml index f4ed06578bc9..e495ab8096df 100644 --- a/services-custom/pom.xml +++ b/services-custom/pom.xml @@ -19,7 +19,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 services-custom AWS Java SDK :: Custom Services diff --git a/services-custom/s3-event-notifications/pom.xml b/services-custom/s3-event-notifications/pom.xml index 55d474f268a8..69e681e6de32 100644 --- a/services-custom/s3-event-notifications/pom.xml +++ b/services-custom/s3-event-notifications/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../../pom.xml s3-event-notifications diff --git a/services-custom/s3-transfer-manager/pom.xml b/services-custom/s3-transfer-manager/pom.xml index b00736ad0235..58416c45c1c3 100644 --- a/services-custom/s3-transfer-manager/pom.xml +++ b/services-custom/s3-transfer-manager/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../../pom.xml s3-transfer-manager diff --git a/services/accessanalyzer/pom.xml b/services/accessanalyzer/pom.xml index e538a39c7244..4f1e0933036a 100644 --- a/services/accessanalyzer/pom.xml +++ b/services/accessanalyzer/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 accessanalyzer AWS Java SDK :: Services :: AccessAnalyzer diff --git a/services/account/pom.xml b/services/account/pom.xml index 0b3215bc8da7..e1a863ccc9d9 100644 --- a/services/account/pom.xml +++ b/services/account/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 account AWS Java SDK :: Services :: Account diff --git a/services/acm/pom.xml b/services/acm/pom.xml index 99648b2ed17a..1e2aa0d8eccc 100644 --- a/services/acm/pom.xml +++ b/services/acm/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 acm AWS Java SDK :: Services :: AWS Certificate Manager diff --git a/services/acmpca/pom.xml b/services/acmpca/pom.xml index 4eb2e1381297..3dbc081ff4c7 100644 --- a/services/acmpca/pom.xml +++ b/services/acmpca/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 acmpca AWS Java SDK :: Services :: ACM PCA diff --git a/services/alexaforbusiness/pom.xml b/services/alexaforbusiness/pom.xml index 124cd861ec27..db2d9dd4f07f 100644 --- a/services/alexaforbusiness/pom.xml +++ b/services/alexaforbusiness/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 alexaforbusiness diff --git a/services/amp/pom.xml b/services/amp/pom.xml index d2fbb2d37e89..03bafa23c0b0 100644 --- a/services/amp/pom.xml +++ b/services/amp/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 amp AWS Java SDK :: Services :: Amp diff --git a/services/amplify/pom.xml b/services/amplify/pom.xml index 5e58b91b89bc..cdfb3c6e6fb9 100644 --- a/services/amplify/pom.xml +++ b/services/amplify/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 amplify AWS Java SDK :: Services :: Amplify diff --git a/services/amplifybackend/pom.xml b/services/amplifybackend/pom.xml index 47961b9627fd..ddef198652bb 100644 --- a/services/amplifybackend/pom.xml +++ b/services/amplifybackend/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 amplifybackend AWS Java SDK :: Services :: Amplify Backend diff --git a/services/amplifyuibuilder/pom.xml b/services/amplifyuibuilder/pom.xml index 78dec312d9ad..6cfe1bef9c8d 100644 --- a/services/amplifyuibuilder/pom.xml +++ b/services/amplifyuibuilder/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 amplifyuibuilder AWS Java SDK :: Services :: Amplify UI Builder diff --git a/services/apigateway/pom.xml b/services/apigateway/pom.xml index 6cf50f8ce4be..1add4de13cfe 100644 --- a/services/apigateway/pom.xml +++ b/services/apigateway/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 apigateway AWS Java SDK :: Services :: Amazon API Gateway diff --git a/services/apigatewaymanagementapi/pom.xml b/services/apigatewaymanagementapi/pom.xml index 22018a7dbf81..862e59954a11 100644 --- a/services/apigatewaymanagementapi/pom.xml +++ b/services/apigatewaymanagementapi/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 apigatewaymanagementapi AWS Java SDK :: Services :: ApiGatewayManagementApi diff --git a/services/apigatewayv2/pom.xml b/services/apigatewayv2/pom.xml index 99977701523f..c37c0edce7de 100644 --- a/services/apigatewayv2/pom.xml +++ b/services/apigatewayv2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 apigatewayv2 AWS Java SDK :: Services :: ApiGatewayV2 diff --git a/services/appconfig/pom.xml b/services/appconfig/pom.xml index 0f298546d594..2f34c5c8d408 100644 --- a/services/appconfig/pom.xml +++ b/services/appconfig/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 appconfig AWS Java SDK :: Services :: AppConfig diff --git a/services/appconfigdata/pom.xml b/services/appconfigdata/pom.xml index 098bf7c7fab6..1aa9b43db15d 100644 --- a/services/appconfigdata/pom.xml +++ b/services/appconfigdata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 appconfigdata AWS Java SDK :: Services :: App Config Data diff --git a/services/appfabric/pom.xml b/services/appfabric/pom.xml index 57e706180c0a..1760e1cf829d 100644 --- a/services/appfabric/pom.xml +++ b/services/appfabric/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 appfabric AWS Java SDK :: Services :: App Fabric diff --git a/services/appflow/pom.xml b/services/appflow/pom.xml index f6fdb2b88666..50be5c45a246 100644 --- a/services/appflow/pom.xml +++ b/services/appflow/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 appflow AWS Java SDK :: Services :: Appflow diff --git a/services/appintegrations/pom.xml b/services/appintegrations/pom.xml index 19b4e6d306f6..0cc7868d39ae 100644 --- a/services/appintegrations/pom.xml +++ b/services/appintegrations/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 appintegrations AWS Java SDK :: Services :: App Integrations diff --git a/services/applicationautoscaling/pom.xml b/services/applicationautoscaling/pom.xml index 0b0e3f03caa3..1abd76e00935 100644 --- a/services/applicationautoscaling/pom.xml +++ b/services/applicationautoscaling/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 applicationautoscaling AWS Java SDK :: Services :: AWS Application Auto Scaling diff --git a/services/applicationcostprofiler/pom.xml b/services/applicationcostprofiler/pom.xml index 1faaed936789..7e154e661144 100644 --- a/services/applicationcostprofiler/pom.xml +++ b/services/applicationcostprofiler/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 applicationcostprofiler AWS Java SDK :: Services :: Application Cost Profiler diff --git a/services/applicationdiscovery/pom.xml b/services/applicationdiscovery/pom.xml index f0a80c1f7e6e..2de5b7e52c06 100644 --- a/services/applicationdiscovery/pom.xml +++ b/services/applicationdiscovery/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 applicationdiscovery AWS Java SDK :: Services :: AWS Application Discovery Service diff --git a/services/applicationinsights/pom.xml b/services/applicationinsights/pom.xml index b98913bc69d2..2378ca8cf6cc 100644 --- a/services/applicationinsights/pom.xml +++ b/services/applicationinsights/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 applicationinsights AWS Java SDK :: Services :: Application Insights diff --git a/services/appmesh/pom.xml b/services/appmesh/pom.xml index 348ffaa09b01..65f0f5453d19 100644 --- a/services/appmesh/pom.xml +++ b/services/appmesh/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 appmesh AWS Java SDK :: Services :: App Mesh diff --git a/services/apprunner/pom.xml b/services/apprunner/pom.xml index bc1f966fa3ed..2e3371b6766b 100644 --- a/services/apprunner/pom.xml +++ b/services/apprunner/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 apprunner AWS Java SDK :: Services :: App Runner diff --git a/services/appstream/pom.xml b/services/appstream/pom.xml index cc669d3bdadd..87cb44052dcc 100644 --- a/services/appstream/pom.xml +++ b/services/appstream/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 appstream AWS Java SDK :: Services :: Amazon AppStream diff --git a/services/appsync/pom.xml b/services/appsync/pom.xml index 24ed08879fed..0234ff808d64 100644 --- a/services/appsync/pom.xml +++ b/services/appsync/pom.xml @@ -21,7 +21,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 appsync diff --git a/services/arczonalshift/pom.xml b/services/arczonalshift/pom.xml index 7bf3654e817b..eb23dca97aad 100644 --- a/services/arczonalshift/pom.xml +++ b/services/arczonalshift/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 arczonalshift AWS Java SDK :: Services :: ARC Zonal Shift diff --git a/services/artifact/pom.xml b/services/artifact/pom.xml index 00e132a2fe21..5d29ebf40366 100644 --- a/services/artifact/pom.xml +++ b/services/artifact/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 artifact AWS Java SDK :: Services :: Artifact diff --git a/services/athena/pom.xml b/services/athena/pom.xml index f0544a0dea35..4b24841a08f6 100644 --- a/services/athena/pom.xml +++ b/services/athena/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 athena AWS Java SDK :: Services :: Amazon Athena diff --git a/services/auditmanager/pom.xml b/services/auditmanager/pom.xml index 0c4329c2f1e9..bd80bfcf0263 100644 --- a/services/auditmanager/pom.xml +++ b/services/auditmanager/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 auditmanager AWS Java SDK :: Services :: Audit Manager diff --git a/services/autoscaling/pom.xml b/services/autoscaling/pom.xml index 56b7c755bcc7..c25b803adf6d 100644 --- a/services/autoscaling/pom.xml +++ b/services/autoscaling/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 autoscaling AWS Java SDK :: Services :: Auto Scaling diff --git a/services/autoscalingplans/pom.xml b/services/autoscalingplans/pom.xml index c26d0b21fc79..8bb7146c900f 100644 --- a/services/autoscalingplans/pom.xml +++ b/services/autoscalingplans/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 autoscalingplans AWS Java SDK :: Services :: Auto Scaling Plans diff --git a/services/b2bi/pom.xml b/services/b2bi/pom.xml index b4d3b5276c87..a08ed14ec2d7 100644 --- a/services/b2bi/pom.xml +++ b/services/b2bi/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 b2bi AWS Java SDK :: Services :: B2 Bi diff --git a/services/backup/pom.xml b/services/backup/pom.xml index 640d82b5f75e..84244284736c 100644 --- a/services/backup/pom.xml +++ b/services/backup/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 backup AWS Java SDK :: Services :: Backup diff --git a/services/backupgateway/pom.xml b/services/backupgateway/pom.xml index 19681a309fd9..43deaf3e93e0 100644 --- a/services/backupgateway/pom.xml +++ b/services/backupgateway/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 backupgateway AWS Java SDK :: Services :: Backup Gateway diff --git a/services/backupstorage/pom.xml b/services/backupstorage/pom.xml index 514a20fab2fe..acbf3e974415 100644 --- a/services/backupstorage/pom.xml +++ b/services/backupstorage/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 backupstorage AWS Java SDK :: Services :: Backup Storage diff --git a/services/batch/pom.xml b/services/batch/pom.xml index ee4387fb3417..2584a55bd64c 100644 --- a/services/batch/pom.xml +++ b/services/batch/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 batch AWS Java SDK :: Services :: AWS Batch diff --git a/services/bcmdataexports/pom.xml b/services/bcmdataexports/pom.xml index ef6e440b7421..01c1d7537620 100644 --- a/services/bcmdataexports/pom.xml +++ b/services/bcmdataexports/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 bcmdataexports AWS Java SDK :: Services :: BCM Data Exports diff --git a/services/bedrock/pom.xml b/services/bedrock/pom.xml index bb0f376ee17b..20946bb99033 100644 --- a/services/bedrock/pom.xml +++ b/services/bedrock/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 bedrock AWS Java SDK :: Services :: Bedrock diff --git a/services/bedrock/src/main/resources/codegen-resources/paginators-1.json b/services/bedrock/src/main/resources/codegen-resources/paginators-1.json index e8b0ae033ec2..8f920eff6d18 100644 --- a/services/bedrock/src/main/resources/codegen-resources/paginators-1.json +++ b/services/bedrock/src/main/resources/codegen-resources/paginators-1.json @@ -6,6 +6,18 @@ "limit_key": "maxResults", "result_key": "modelSummaries" }, + "ListEvaluationJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobSummaries" + }, + "ListGuardrails": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "guardrails" + }, "ListModelCustomizationJobs": { "input_token": "nextToken", "output_token": "nextToken", diff --git a/services/bedrock/src/main/resources/codegen-resources/service-2.json b/services/bedrock/src/main/resources/codegen-resources/service-2.json index 5bc66fe4d038..694f91927d24 100644 --- a/services/bedrock/src/main/resources/codegen-resources/service-2.json +++ b/services/bedrock/src/main/resources/codegen-resources/service-2.json @@ -12,6 +12,68 @@ "uid":"bedrock-2023-04-20" }, "operations":{ + "CreateEvaluationJob":{ + "name":"CreateEvaluationJob", + "http":{ + "method":"POST", + "requestUri":"/evaluation-jobs", + "responseCode":202 + }, + "input":{"shape":"CreateEvaluationJobRequest"}, + "output":{"shape":"CreateEvaluationJobResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

API operation for creating and managing Amazon Bedrock automatic model evaluation jobs and model evaluation jobs that use human workers. To learn more about the requirements for creating a model evaluation job see, Model evaluations.

", + "idempotent":true + }, + "CreateGuardrail":{ + "name":"CreateGuardrail", + "http":{ + "method":"POST", + "requestUri":"/guardrails", + "responseCode":202 + }, + "input":{"shape":"CreateGuardrailRequest"}, + "output":{"shape":"CreateGuardrailResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"TooManyTagsException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Creates a guardrail to block topics and to filter out harmful content.

  • Specify a name and optional description.

  • Specify messages for when the guardrail successfully blocks a prompt or a model response in the blockedInputMessaging and blockedOutputsMessaging fields.

  • Specify topics for the guardrail to deny in the topicPolicyConfig object. Each GuardrailTopicConfig object in the topicsConfig list pertains to one topic.

    • Give a name and description so that the guardrail can properly identify the topic.

    • Specify DENY in the type field.

    • (Optional) Provide up to five prompts that you would categorize as belonging to the topic in the examples list.

  • Specify filter strengths for the harmful categories defined in Amazon Bedrock in the contentPolicyConfig object. Each GuardrailContentFilterConfig object in the filtersConfig list pertains to a harmful category. For more information, see Content filters. For more information about the fields in a content filter, see GuardrailContentFilterConfig.

    • Specify the category in the type field.

    • Specify the strength of the filter for prompts in the inputStrength field and for model responses in the strength field of the GuardrailContentFilterConfig.

  • (Optional) For security, include the ARN of a KMS key in the kmsKeyId field.

  • (Optional) Attach any tags to the guardrail in the tags object. For more information, see Tag resources.

" + }, + "CreateGuardrailVersion":{ + "name":"CreateGuardrailVersion", + "http":{ + "method":"POST", + "requestUri":"/guardrails/{guardrailIdentifier}", + "responseCode":202 + }, + "input":{"shape":"CreateGuardrailVersionRequest"}, + "output":{"shape":"CreateGuardrailVersionResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Creates a version of the guardrail. Use this API to create a snapshot of the guardrail when you are satisfied with a configuration, or to compare the configuration with another version.

" + }, "CreateModelCustomizationJob":{ "name":"CreateModelCustomizationJob", "http":{ @@ -31,7 +93,7 @@ {"shape":"ServiceQuotaExceededException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Creates a fine-tuning job to customize a base model.

You specify the base foundation model and the location of the training data. After the model-customization job completes successfully, your custom model resource will be ready to use. Training data contains input and output text for each record in a JSONL format. Optionally, you can specify validation data in the same format as the training data. Amazon Bedrock returns validation loss metrics and output generations after the job completes.

Model-customization jobs are asynchronous and the completion time depends on the base model and the training/validation data size. To monitor a job, use the GetModelCustomizationJob operation to retrieve the job status.

For more information, see Custom models in the Bedrock User Guide.

", + "documentation":"

Creates a fine-tuning job to customize a base model.

You specify the base foundation model and the location of the training data. After the model-customization job completes successfully, your custom model resource will be ready to use. Amazon Bedrock returns validation loss metrics and output generations after the job completes.

For information on the format of training and validation data, see Prepare the datasets.

Model-customization jobs are asynchronous and the completion time depends on the base model and the training/validation data size. To monitor a job, use the GetModelCustomizationJob operation to retrieve the job status.

For more information, see Custom models in the Amazon Bedrock User Guide.

", "idempotent":true }, "CreateProvisionedModelThroughput":{ @@ -52,7 +114,7 @@ {"shape":"ServiceQuotaExceededException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Creates a provisioned throughput with dedicated capacity for a foundation model or a fine-tuned model.

For more information, see Provisioned throughput in the Bedrock User Guide.

", + "documentation":"

Creates dedicated throughput for a base or custom model with the model units and for the duration that you specify. For pricing details, see Amazon Bedrock Pricing. For more information, see Provisioned Throughput in the Amazon Bedrock User Guide.

", "idempotent":true }, "DeleteCustomModel":{ @@ -72,7 +134,27 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Deletes a custom model that you created earlier. For more information, see Custom models in the Bedrock User Guide.

", + "documentation":"

Deletes a custom model that you created earlier. For more information, see Custom models in the Amazon Bedrock User Guide.

", + "idempotent":true + }, + "DeleteGuardrail":{ + "name":"DeleteGuardrail", + "http":{ + "method":"DELETE", + "requestUri":"/guardrails/{guardrailIdentifier}", + "responseCode":202 + }, + "input":{"shape":"DeleteGuardrailRequest"}, + "output":{"shape":"DeleteGuardrailResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Deletes a guardrail.

  • To delete a guardrail, only specify the ARN of the guardrail in the guardrailIdentifier field. If you delete a guardrail, all of its versions will be deleted.

  • To delete a version of a guardrail, specify the ARN of the guardrail in the guardrailIdentifier field and the version in the guardrailVersion field.

", "idempotent":true }, "DeleteModelInvocationLoggingConfiguration":{ @@ -109,7 +191,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Deletes a provisioned throughput. For more information, see Provisioned throughput in the Bedrock User Guide.

", + "documentation":"

Deletes a Provisioned Throughput. You can't delete a Provisioned Throughput before the commitment term is over. For more information, see Provisioned Throughput in the Amazon Bedrock User Guide.

", "idempotent":true }, "GetCustomModel":{ @@ -128,7 +210,25 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Get the properties associated with a Amazon Bedrock custom model that you have created.For more information, see Custom models in the Bedrock User Guide.

" + "documentation":"

Get the properties associated with a Amazon Bedrock custom model that you have created.For more information, see Custom models in the Amazon Bedrock User Guide.

" + }, + "GetEvaluationJob":{ + "name":"GetEvaluationJob", + "http":{ + "method":"GET", + "requestUri":"/evaluation-jobs/{jobIdentifier}", + "responseCode":200 + }, + "input":{"shape":"GetEvaluationJobRequest"}, + "output":{"shape":"GetEvaluationJobResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Retrieves the properties associated with a model evaluation job, including the status of the job. For more information, see Model evaluations.

" }, "GetFoundationModel":{ "name":"GetFoundationModel", @@ -148,6 +248,24 @@ ], "documentation":"

Get details about a Amazon Bedrock foundation model.

" }, + "GetGuardrail":{ + "name":"GetGuardrail", + "http":{ + "method":"GET", + "requestUri":"/guardrails/{guardrailIdentifier}", + "responseCode":200 + }, + "input":{"shape":"GetGuardrailRequest"}, + "output":{"shape":"GetGuardrailResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Gets details about a guardrail. If you don't specify a version, the response returns details for the DRAFT version.

" + }, "GetModelCustomizationJob":{ "name":"GetModelCustomizationJob", "http":{ @@ -164,7 +282,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Retrieves the properties associated with a model-customization job, including the status of the job. For more information, see Custom models in the Bedrock User Guide.

" + "documentation":"

Retrieves the properties associated with a model-customization job, including the status of the job. For more information, see Custom models in the Amazon Bedrock User Guide.

" }, "GetModelInvocationLoggingConfiguration":{ "name":"GetModelInvocationLoggingConfiguration", @@ -198,7 +316,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Get details for a provisioned throughput. For more information, see Provisioned throughput in the Bedrock User Guide.

" + "documentation":"

Returns details for a Provisioned Throughput. For more information, see Provisioned Throughput in the Amazon Bedrock User Guide.

" }, "ListCustomModels":{ "name":"ListCustomModels", @@ -215,7 +333,24 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Returns a list of the custom models that you have created with the CreateModelCustomizationJob operation.

For more information, see Custom models in the Bedrock User Guide.

" + "documentation":"

Returns a list of the custom models that you have created with the CreateModelCustomizationJob operation.

For more information, see Custom models in the Amazon Bedrock User Guide.

" + }, + "ListEvaluationJobs":{ + "name":"ListEvaluationJobs", + "http":{ + "method":"GET", + "requestUri":"/evaluation-jobs", + "responseCode":200 + }, + "input":{"shape":"ListEvaluationJobsRequest"}, + "output":{"shape":"ListEvaluationJobsResponse"}, + "errors":[ + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Lists model evaluation jobs.

" }, "ListFoundationModels":{ "name":"ListFoundationModels", @@ -232,7 +367,25 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

List of Amazon Bedrock foundation models that you can use. For more information, see Foundation models in the Bedrock User Guide.

" + "documentation":"

Lists Amazon Bedrock foundation models that you can use. You can filter the results with the request parameters. For more information, see Foundation models in the Amazon Bedrock User Guide.

" + }, + "ListGuardrails":{ + "name":"ListGuardrails", + "http":{ + "method":"GET", + "requestUri":"/guardrails", + "responseCode":200 + }, + "input":{"shape":"ListGuardrailsRequest"}, + "output":{"shape":"ListGuardrailsResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Lists details about all the guardrails in an account. To list the DRAFT version of all your guardrails, don't specify the guardrailIdentifier field. To list all versions of a guardrail, specify the ARN of the guardrail in the guardrailIdentifier field.

You can set the maximum number of results to return in a response in the maxResults field. If there are more results than the number you set, the response returns a nextToken that you can send in another ListGuardrails request to see the next batch of results.

" }, "ListModelCustomizationJobs":{ "name":"ListModelCustomizationJobs", @@ -249,7 +402,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Returns a list of model customization jobs that you have submitted. You can filter the jobs to return based on one or more criteria.

For more information, see Custom models in the Bedrock User Guide.

" + "documentation":"

Returns a list of model customization jobs that you have submitted. You can filter the jobs to return based on one or more criteria.

For more information, see Custom models in the Amazon Bedrock User Guide.

" }, "ListProvisionedModelThroughputs":{ "name":"ListProvisionedModelThroughputs", @@ -266,7 +419,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

List the provisioned capacities. For more information, see Provisioned throughput in the Bedrock User Guide.

" + "documentation":"

Lists the Provisioned Throughputs in the account. For more information, see Provisioned Throughput in the Amazon Bedrock User Guide.

" }, "ListTagsForResource":{ "name":"ListTagsForResource", @@ -284,7 +437,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

List the tags associated with the specified resource.

For more information, see Tagging resources in the Bedrock User Guide.

" + "documentation":"

List the tags associated with the specified resource.

For more information, see Tagging resources in the Amazon Bedrock User Guide.

" }, "PutModelInvocationLoggingConfiguration":{ "name":"PutModelInvocationLoggingConfiguration", @@ -304,6 +457,25 @@ "documentation":"

Set the configuration values for model invocation logging.

", "idempotent":true }, + "StopEvaluationJob":{ + "name":"StopEvaluationJob", + "http":{ + "method":"POST", + "requestUri":"/evaluation-job/{jobIdentifier}/stop", + "responseCode":200 + }, + "input":{"shape":"StopEvaluationJobRequest"}, + "output":{"shape":"StopEvaluationJobResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Stops an in progress model evaluation job.

" + }, "StopModelCustomizationJob":{ "name":"StopModelCustomizationJob", "http":{ @@ -321,7 +493,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Stops an active model customization job. For more information, see Custom models in the Bedrock User Guide.

", + "documentation":"

Stops an active model customization job. For more information, see Custom models in the Amazon Bedrock User Guide.

", "idempotent":true }, "TagResource":{ @@ -341,7 +513,7 @@ {"shape":"TooManyTagsException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Associate tags with a resource. For more information, see Tagging resources in the Bedrock User Guide.

" + "documentation":"

Associate tags with a resource. For more information, see Tagging resources in the Amazon Bedrock User Guide.

" }, "UntagResource":{ "name":"UntagResource", @@ -359,7 +531,28 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Remove one or more tags from a resource. For more information, see Tagging resources in the Bedrock User Guide.

" + "documentation":"

Remove one or more tags from a resource. For more information, see Tagging resources in the Amazon Bedrock User Guide.

" + }, + "UpdateGuardrail":{ + "name":"UpdateGuardrail", + "http":{ + "method":"PUT", + "requestUri":"/guardrails/{guardrailIdentifier}", + "responseCode":202 + }, + "input":{"shape":"UpdateGuardrailRequest"}, + "output":{"shape":"UpdateGuardrailResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Updates a guardrail with the values you specify.

  • Specify a name and optional description.

  • Specify messages for when the guardrail successfully blocks a prompt or a model response in the blockedInputMessaging and blockedOutputsMessaging fields.

  • Specify topics for the guardrail to deny in the topicPolicyConfig object. Each GuardrailTopicConfig object in the topicsConfig list pertains to one topic.

    • Give a name and description so that the guardrail can properly identify the topic.

    • Specify DENY in the type field.

    • (Optional) Provide up to five prompts that you would categorize as belonging to the topic in the examples list.

  • Specify filter strengths for the harmful categories defined in Amazon Bedrock in the contentPolicyConfig object. Each GuardrailContentFilterConfig object in the filtersConfig list pertains to a harmful category. For more information, see Content filters. For more information about the fields in a content filter, see GuardrailContentFilterConfig.

    • Specify the category in the type field.

    • Specify the strength of the filter for prompts in the inputStrength field and for model responses in the strength field of the GuardrailContentFilterConfig.

  • (Optional) For security, include the ARN of a KMS key in the kmsKeyId field.

  • (Optional) Attach any tags to the guardrail in the tags object. For more information, see Tag resources.

", + "idempotent":true }, "UpdateProvisionedModelThroughput":{ "name":"UpdateProvisionedModelThroughput", @@ -377,7 +570,7 @@ {"shape":"InternalServerException"}, {"shape":"ThrottlingException"} ], - "documentation":"

Update a provisioned throughput. For more information, see Provisioned throughput in the Bedrock User Guide.

", + "documentation":"

Updates the name or associated model for a Provisioned Throughput. For more information, see Provisioned Throughput in the Amazon Bedrock User Guide.

", "idempotent":true } }, @@ -394,6 +587,17 @@ }, "exception":true }, + "AutomatedEvaluationConfig":{ + "type":"structure", + "required":["datasetMetricConfigs"], + "members":{ + "datasetMetricConfigs":{ + "shape":"EvaluationDatasetMetricConfigs", + "documentation":"

Specifies the required elements for an automatic model evaluation job.

" + } + }, + "documentation":"

Use to specify a automatic model evaluation job. The EvaluationDatasetMetricConfig object is used to specify the prompt datasets, task type, and metric names.

" + }, "BaseModelIdentifier":{ "type":"string", "max":2048, @@ -434,7 +638,7 @@ }, "roleArn":{ "shape":"RoleArn", - "documentation":"

The role ARN.

" + "documentation":"

The role Amazon Resource Name (ARN).

" }, "largeDataDeliveryS3Config":{ "shape":"S3Config", @@ -462,6 +666,185 @@ }, "exception":true }, + "CreateEvaluationJobRequest":{ + "type":"structure", + "required":[ + "jobName", + "roleArn", + "evaluationConfig", + "inferenceConfig", + "outputDataConfig" + ], + "members":{ + "jobName":{ + "shape":"EvaluationJobName", + "documentation":"

The name of the model evaluation job. Model evaluation job names must unique with your AWS account, and your account's AWS region.

" + }, + "jobDescription":{ + "shape":"EvaluationJobDescription", + "documentation":"

A description of the model evaluation job.

" + }, + "clientRequestToken":{ + "shape":"IdempotencyToken", + "documentation":"

A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see Ensuring idempotency.

", + "idempotencyToken":true + }, + "roleArn":{ + "shape":"RoleArn", + "documentation":"

The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on your behalf. The service role must have Amazon Bedrock as the service principal, and provide access to any Amazon S3 buckets specified in the EvaluationConfig object. To pass this role to Amazon Bedrock, the caller of this API must have the iam:PassRole permission. To learn more about the required permissions, see Required permissions.

" + }, + "customerEncryptionKeyId":{ + "shape":"KmsKeyId", + "documentation":"

Specify your customer managed key ARN that will be used to encrypt your model evaluation job.

" + }, + "jobTags":{ + "shape":"TagList", + "documentation":"

Tags to attach to the model evaluation job.

" + }, + "evaluationConfig":{ + "shape":"EvaluationConfig", + "documentation":"

Specifies whether the model evaluation job is automatic or uses human worker.

" + }, + "inferenceConfig":{ + "shape":"EvaluationInferenceConfig", + "documentation":"

Specify the models you want to use in your model evaluation job. Automatic model evaluation jobs support a single model, and model evaluation job that use human workers support two models.

" + }, + "outputDataConfig":{ + "shape":"EvaluationOutputDataConfig", + "documentation":"

An object that defines where the results of model evaluation job will be saved in Amazon S3.

" + } + } + }, + "CreateEvaluationJobResponse":{ + "type":"structure", + "required":["jobArn"], + "members":{ + "jobArn":{ + "shape":"EvaluationJobArn", + "documentation":"

The ARN of the model evaluation job.

" + } + } + }, + "CreateGuardrailRequest":{ + "type":"structure", + "required":[ + "name", + "blockedInputMessaging", + "blockedOutputsMessaging" + ], + "members":{ + "name":{ + "shape":"GuardrailName", + "documentation":"

The name to give the guardrail.

" + }, + "description":{ + "shape":"GuardrailDescription", + "documentation":"

A description of the guardrail.

" + }, + "topicPolicyConfig":{ + "shape":"GuardrailTopicPolicyConfig", + "documentation":"

The topic policies to configure for the guardrail.

" + }, + "contentPolicyConfig":{ + "shape":"GuardrailContentPolicyConfig", + "documentation":"

The content filter policies to configure for the guardrail.

" + }, + "wordPolicyConfig":{ + "shape":"GuardrailWordPolicyConfig", + "documentation":"

The word policy you configure for the guardrail.

" + }, + "sensitiveInformationPolicyConfig":{ + "shape":"GuardrailSensitiveInformationPolicyConfig", + "documentation":"

The sensitive information policy to configure for the guardrail.

" + }, + "blockedInputMessaging":{ + "shape":"GuardrailBlockedMessaging", + "documentation":"

The message to return when the guardrail blocks a prompt.

" + }, + "blockedOutputsMessaging":{ + "shape":"GuardrailBlockedMessaging", + "documentation":"

The message to return when the guardrail blocks a model response.

" + }, + "kmsKeyId":{ + "shape":"KmsKeyId", + "documentation":"

The ARN of the KMS key that you use to encrypt the guardrail.

" + }, + "tags":{ + "shape":"TagList", + "documentation":"

The tags that you want to attach to the guardrail.

" + }, + "clientRequestToken":{ + "shape":"IdempotencyToken", + "documentation":"

A unique, case-sensitive identifier to ensure that the API request completes no more than once. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see Ensuring idempotency in the Amazon S3 User Guide.

", + "idempotencyToken":true + } + } + }, + "CreateGuardrailResponse":{ + "type":"structure", + "required":[ + "guardrailId", + "guardrailArn", + "version", + "createdAt" + ], + "members":{ + "guardrailId":{ + "shape":"GuardrailId", + "documentation":"

The unique identifier of the guardrail that was created.

" + }, + "guardrailArn":{ + "shape":"GuardrailArn", + "documentation":"

The ARN of the guardrail that was created.

" + }, + "version":{ + "shape":"GuardrailDraftVersion", + "documentation":"

The version of the guardrail that was created. This value should be 1.

" + }, + "createdAt":{ + "shape":"Timestamp", + "documentation":"

The time at which the guardrail was created.

" + } + } + }, + "CreateGuardrailVersionRequest":{ + "type":"structure", + "required":["guardrailIdentifier"], + "members":{ + "guardrailIdentifier":{ + "shape":"GuardrailIdentifier", + "documentation":"

The unique identifier of the guardrail.

", + "location":"uri", + "locationName":"guardrailIdentifier" + }, + "description":{ + "shape":"GuardrailDescription", + "documentation":"

A description of the guardrail version.

" + }, + "clientRequestToken":{ + "shape":"IdempotencyToken", + "documentation":"

A unique, case-sensitive identifier to ensure that the API request completes no more than once. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see Ensuring idempotency in the Amazon S3 User Guide.

", + "idempotencyToken":true + } + } + }, + "CreateGuardrailVersionResponse":{ + "type":"structure", + "required":[ + "guardrailId", + "version" + ], + "members":{ + "guardrailId":{ + "shape":"GuardrailId", + "documentation":"

The unique identifier of the guardrail.

" + }, + "version":{ + "shape":"GuardrailNumericalVersion", + "documentation":"

The number of the version of the guardrail.

" + } + } + }, "CreateModelCustomizationJobRequest":{ "type":"structure", "required":[ @@ -476,19 +859,19 @@ "members":{ "jobName":{ "shape":"JobName", - "documentation":"

Enter a unique name for the fine-tuning job.

" + "documentation":"

A name for the fine-tuning job.

" }, "customModelName":{ "shape":"CustomModelName", - "documentation":"

Enter a name for the custom model.

" + "documentation":"

A name for the resulting custom model.

" }, "roleArn":{ "shape":"RoleArn", - "documentation":"

The Amazon Resource Name (ARN) of an IAM role that Amazon Bedrock can assume to perform tasks on your behalf. For example, during model training, Amazon Bedrock needs your permission to read input data from an S3 bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller of this API must have the iam:PassRole permission.

" + "documentation":"

The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on your behalf. For example, during model training, Amazon Bedrock needs your permission to read input data from an S3 bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller of this API must have the iam:PassRole permission.

" }, "clientRequestToken":{ "shape":"IdempotencyToken", - "documentation":"

Unique token value that you can provide. The GetModelCustomizationJob response includes the same token value.

", + "documentation":"

A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see Ensuring idempotency.

", "idempotencyToken":true }, "baseModelIdentifier":{ @@ -505,11 +888,11 @@ }, "jobTags":{ "shape":"TagList", - "documentation":"

Assign tags to the job.

" + "documentation":"

Tags to attach to the job.

" }, "customModelTags":{ "shape":"TagList", - "documentation":"

Assign tags to the custom model.

" + "documentation":"

Tags to attach to the resulting custom model.

" }, "trainingDataConfig":{ "shape":"TrainingDataConfig", @@ -525,7 +908,7 @@ }, "hyperParameters":{ "shape":"ModelCustomizationHyperParameters", - "documentation":"

Parameters related to tuning the model.

" + "documentation":"

Parameters related to tuning the model. For details on the format for different models, see Custom model hyperparameters.

" }, "vpcConfig":{ "shape":"VpcConfig", @@ -539,7 +922,7 @@ "members":{ "jobArn":{ "shape":"ModelCustomizationJobArn", - "documentation":"

ARN of the fine tuning job

" + "documentation":"

Amazon Resource Name (ARN) of the fine tuning job

" } } }, @@ -553,28 +936,28 @@ "members":{ "clientRequestToken":{ "shape":"IdempotencyToken", - "documentation":"

Unique token value that you can provide. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error.

", + "documentation":"

A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see Ensuring idempotency in the Amazon S3 User Guide.

", "idempotencyToken":true }, "modelUnits":{ "shape":"PositiveInteger", - "documentation":"

Number of model units to allocate.

" + "documentation":"

Number of model units to allocate. A model unit delivers a specific throughput level for the specified model. The throughput level of a model unit specifies the total number of input and output tokens that it can process and generate within a span of one minute. By default, your account has no model units for purchasing Provisioned Throughputs with commitment. You must first visit the Amazon Web Services support center to request MUs.

For model unit quotas, see Provisioned Throughput quotas in the Amazon Bedrock User Guide.

For more information about what an MU specifies, contact your Amazon Web Services account manager.

" }, "provisionedModelName":{ "shape":"ProvisionedModelName", - "documentation":"

Unique name for this provisioned throughput.

" + "documentation":"

The name for this Provisioned Throughput.

" }, "modelId":{ "shape":"ModelIdentifier", - "documentation":"

Name or ARN of the model to associate with this provisioned throughput.

" + "documentation":"

The Amazon Resource Name (ARN) or name of the model to associate with this Provisioned Throughput. For a list of models for which you can purchase Provisioned Throughput, see Amazon Bedrock model IDs for purchasing Provisioned Throughput in the Amazon Bedrock User Guide.

" }, "commitmentDuration":{ "shape":"CommitmentDuration", - "documentation":"

Commitment duration requested for the provisioned throughput.

" + "documentation":"

The commitment duration requested for the Provisioned Throughput. Billing occurs hourly and is discounted for longer commitment terms. To request a no-commit Provisioned Throughput, omit this field.

Custom models support all levels of commitment. To see which base models support no commitment, see Supported regions and models for Provisioned Throughput in the Amazon Bedrock User Guide

" }, "tags":{ "shape":"TagList", - "documentation":"

Tags to associate with this provisioned throughput.

" + "documentation":"

Tags to associate with this Provisioned Throughput.

" } } }, @@ -584,7 +967,7 @@ "members":{ "provisionedModelArn":{ "shape":"ProvisionedModelArn", - "documentation":"

The ARN for this provisioned throughput.

" + "documentation":"

The Amazon Resource Name (ARN) for this Provisioned Throughput.

" } } }, @@ -612,7 +995,7 @@ "members":{ "modelArn":{ "shape":"CustomModelArn", - "documentation":"

The ARN of the custom model.

" + "documentation":"

The Amazon Resource Name (ARN) of the custom model.

" }, "modelName":{ "shape":"CustomModelName", @@ -624,7 +1007,7 @@ }, "baseModelArn":{ "shape":"ModelArn", - "documentation":"

The base model ARN.

" + "documentation":"

The base model Amazon Resource Name (ARN).

" }, "baseModelName":{ "shape":"ModelName", @@ -665,6 +1048,29 @@ "members":{ } }, + "DeleteGuardrailRequest":{ + "type":"structure", + "required":["guardrailIdentifier"], + "members":{ + "guardrailIdentifier":{ + "shape":"GuardrailIdentifier", + "documentation":"

The unique identifier of the guardrail.

", + "location":"uri", + "locationName":"guardrailIdentifier" + }, + "guardrailVersion":{ + "shape":"GuardrailNumericalVersion", + "documentation":"

The version of the guardrail.

", + "location":"querystring", + "locationName":"guardrailVersion" + } + } + }, + "DeleteGuardrailResponse":{ + "type":"structure", + "members":{ + } + }, "DeleteModelInvocationLoggingConfigurationRequest":{ "type":"structure", "members":{ @@ -681,7 +1087,7 @@ "members":{ "provisionedModelId":{ "shape":"ProvisionedModelId", - "documentation":"

The ARN or name of the provisioned throughput.

", + "documentation":"

The Amazon Resource Name (ARN) or name of the Provisioned Throughput.

", "location":"uri", "locationName":"provisionedModelId" } @@ -697,32 +1103,327 @@ "max":2048, "min":0 }, - "FineTuningJobStatus":{ - "type":"string", - "enum":[ - "InProgress", - "Completed", - "Failed", - "Stopping", - "Stopped" - ] - }, - "FoundationModelArn":{ - "type":"string", - "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}" + "ErrorMessages":{ + "type":"list", + "member":{"shape":"ErrorMessage"}, + "max":20, + "min":0 }, - "FoundationModelDetails":{ + "EvaluationBedrockModel":{ "type":"structure", "required":[ - "modelArn", - "modelId" + "modelIdentifier", + "inferenceParams" ], "members":{ - "modelArn":{ - "shape":"FoundationModelArn", - "documentation":"

The model ARN.

" + "modelIdentifier":{ + "shape":"EvaluationModelIdentifier", + "documentation":"

The ARN of the Amazon Bedrock model specified.

" }, - "modelId":{ + "inferenceParams":{ + "shape":"EvaluationModelInferenceParams", + "documentation":"

Each Amazon Bedrock support different inference parameters that change how the model behaves during inference.

" + } + }, + "documentation":"

Contains the ARN of the Amazon Bedrock models specified in your model evaluation job. Each Amazon Bedrock model supports different inferenceParams. To learn more about supported inference parameters for Amazon Bedrock models, see Inference parameters for foundation models.

The inferenceParams are specified using JSON. To successfully insert JSON as string make sure that all quotations are properly escaped. For example, \"temperature\":\"0.25\" key value pair would need to be formatted as \\\"temperature\\\":\\\"0.25\\\" to successfully accepted in the request.

" + }, + "EvaluationConfig":{ + "type":"structure", + "members":{ + "automated":{ + "shape":"AutomatedEvaluationConfig", + "documentation":"

Used to specify an automated model evaluation job. See AutomatedEvaluationConfig to view the required parameters.

" + }, + "human":{ + "shape":"HumanEvaluationConfig", + "documentation":"

Used to specify a model evaluation job that uses human workers.See HumanEvaluationConfig to view the required parameters.

" + } + }, + "documentation":"

Used to specify either a AutomatedEvaluationConfig or HumanEvaluationConfig object.

", + "union":true + }, + "EvaluationDataset":{ + "type":"structure", + "required":["name"], + "members":{ + "name":{ + "shape":"EvaluationDatasetName", + "documentation":"

Used to specify supported built-in prompt datasets. Valid values are Builtin.Bold, Builtin.BoolQ, Builtin.NaturalQuestions, Builtin.Gigaword, Builtin.RealToxicityPrompts, Builtin.TriviaQa, Builtin.T-Rex, Builtin.WomensEcommerceClothingReviews and Builtin.Wikitext2.

" + }, + "datasetLocation":{ + "shape":"EvaluationDatasetLocation", + "documentation":"

For custom prompt datasets, you must specify the location in Amazon S3 where the prompt dataset is saved.

" + } + }, + "documentation":"

Used to specify the name of a built-in prompt dataset and optionally, the Amazon S3 bucket where a custom prompt dataset is saved.

" + }, + "EvaluationDatasetLocation":{ + "type":"structure", + "members":{ + "s3Uri":{ + "shape":"S3Uri", + "documentation":"

The S3 URI of the S3 bucket specified in the job.

" + } + }, + "documentation":"

The location in Amazon S3 where your prompt dataset is stored.

", + "union":true + }, + "EvaluationDatasetMetricConfig":{ + "type":"structure", + "required":[ + "taskType", + "dataset", + "metricNames" + ], + "members":{ + "taskType":{ + "shape":"EvaluationTaskType", + "documentation":"

The task type you want the model to carry out.

" + }, + "dataset":{ + "shape":"EvaluationDataset", + "documentation":"

Specifies the prompt dataset.

" + }, + "metricNames":{ + "shape":"EvaluationMetricNames", + "documentation":"

The names of the metrics used. For automated model evaluation jobs valid values are \"Builtin.Accuracy\", \"Builtin.Robustness\", and \"Builtin.Toxicity\". In human-based model evaluation jobs the array of strings must match the name parameter specified in HumanEvaluationCustomMetric.

" + } + }, + "documentation":"

Defines the built-in prompt datasets, built-in metric names and custom metric names, and the task type.

" + }, + "EvaluationDatasetMetricConfigs":{ + "type":"list", + "member":{"shape":"EvaluationDatasetMetricConfig"}, + "max":5, + "min":1 + }, + "EvaluationDatasetName":{ + "type":"string", + "max":63, + "min":1, + "pattern":"[0-9a-zA-Z-_.]+", + "sensitive":true + }, + "EvaluationInferenceConfig":{ + "type":"structure", + "members":{ + "models":{ + "shape":"EvaluationModelConfigs", + "documentation":"

Used to specify the models.

" + } + }, + "documentation":"

Used to define the models you want used in your model evaluation job. Automated model evaluation jobs support only a single model. In a human-based model evaluation job, your annotator can compare the responses for up to two different models.

", + "union":true + }, + "EvaluationJobArn":{ + "type":"string", + "max":1011, + "min":0, + "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:evaluation-job/[a-z0-9]{12}" + }, + "EvaluationJobDescription":{ + "type":"string", + "max":200, + "min":1, + "pattern":".+", + "sensitive":true + }, + "EvaluationJobIdentifier":{ + "type":"string", + "max":1011, + "min":0, + "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:evaluation-job/[a-z0-9]{12})", + "sensitive":true + }, + "EvaluationJobName":{ + "type":"string", + "max":63, + "min":1, + "pattern":"[a-z0-9](-*[a-z0-9]){0,62}" + }, + "EvaluationJobStatus":{ + "type":"string", + "enum":[ + "InProgress", + "Completed", + "Failed", + "Stopping", + "Stopped" + ] + }, + "EvaluationJobType":{ + "type":"string", + "enum":[ + "Human", + "Automated" + ] + }, + "EvaluationMetricDescription":{ + "type":"string", + "max":63, + "min":1, + "pattern":".+", + "sensitive":true + }, + "EvaluationMetricName":{ + "type":"string", + "max":63, + "min":1, + "pattern":"[0-9a-zA-Z-_.]+", + "sensitive":true + }, + "EvaluationMetricNames":{ + "type":"list", + "member":{"shape":"EvaluationMetricName"}, + "max":10, + "min":1 + }, + "EvaluationModelConfig":{ + "type":"structure", + "members":{ + "bedrockModel":{ + "shape":"EvaluationBedrockModel", + "documentation":"

Defines the Amazon Bedrock model and inference parameters you want used.

" + } + }, + "documentation":"

Defines the models used in the model evaluation job.

", + "union":true + }, + "EvaluationModelConfigs":{ + "type":"list", + "member":{"shape":"EvaluationModelConfig"}, + "max":2, + "min":1 + }, + "EvaluationModelIdentifier":{ + "type":"string", + "max":2048, + "min":1, + "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}(([:][a-z0-9-]{1,63}){0,2})?/[a-z0-9]{12})|(:foundation-model/([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})))|(([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2}))|(([0-9a-zA-Z][_-]?)+)" + }, + "EvaluationModelIdentifiers":{ + "type":"list", + "member":{"shape":"EvaluationModelIdentifier"}, + "max":2, + "min":1 + }, + "EvaluationModelInferenceParams":{ + "type":"string", + "max":1023, + "min":1, + "sensitive":true + }, + "EvaluationOutputDataConfig":{ + "type":"structure", + "required":["s3Uri"], + "members":{ + "s3Uri":{ + "shape":"S3Uri", + "documentation":"

The Amazon S3 URI where the results of model evaluation job are saved.

" + } + }, + "documentation":"

The Amazon S3 location where the results of your model evaluation job are saved.

" + }, + "EvaluationRatingMethod":{ + "type":"string", + "max":100, + "min":1, + "pattern":"[0-9a-zA-Z-_]+" + }, + "EvaluationSummaries":{ + "type":"list", + "member":{"shape":"EvaluationSummary"}, + "max":5, + "min":1 + }, + "EvaluationSummary":{ + "type":"structure", + "required":[ + "jobArn", + "jobName", + "status", + "creationTime", + "jobType", + "evaluationTaskTypes", + "modelIdentifiers" + ], + "members":{ + "jobArn":{ + "shape":"EvaluationJobArn", + "documentation":"

The Amazon Resource Name (ARN) of the model evaluation job.

" + }, + "jobName":{ + "shape":"EvaluationJobName", + "documentation":"

The name of the model evaluation job.

" + }, + "status":{ + "shape":"EvaluationJobStatus", + "documentation":"

The current status of the model evaluation job.

" + }, + "creationTime":{ + "shape":"Timestamp", + "documentation":"

When the model evaluation job was created.

" + }, + "jobType":{ + "shape":"EvaluationJobType", + "documentation":"

The type, either human or automatic, of model evaluation job.

" + }, + "evaluationTaskTypes":{ + "shape":"EvaluationTaskTypes", + "documentation":"

What task type was used in the model evaluation job.

" + }, + "modelIdentifiers":{ + "shape":"EvaluationModelIdentifiers", + "documentation":"

The Amazon Resource Names (ARNs) of the model(s) used in the model evaluation job.

" + } + }, + "documentation":"

A summary of the model evaluation job.

" + }, + "EvaluationTaskType":{ + "type":"string", + "enum":[ + "Summarization", + "Classification", + "QuestionAndAnswer", + "Generation", + "Custom" + ], + "max":63, + "min":1, + "pattern":"[A-Za-z0-9]+" + }, + "EvaluationTaskTypes":{ + "type":"list", + "member":{"shape":"EvaluationTaskType"}, + "max":5, + "min":1 + }, + "FineTuningJobStatus":{ + "type":"string", + "enum":[ + "InProgress", + "Completed", + "Failed", + "Stopping", + "Stopped" + ] + }, + "FoundationModelArn":{ + "type":"string", + "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}" + }, + "FoundationModelDetails":{ + "type":"structure", + "required":[ + "modelArn", + "modelId" + ], + "members":{ + "modelArn":{ + "shape":"FoundationModelArn", + "documentation":"

The model Amazon Resource Name (ARN).

" + }, + "modelId":{ "shape":"BedrockModelId", "documentation":"

The model identifier.

" }, @@ -732,7 +1433,7 @@ }, "providerName":{ "shape":"BrandedName", - "documentation":"

he model's provider name.

" + "documentation":"

The model's provider name.

" }, "inputModalities":{ "shape":"ModelModalityList", @@ -788,11 +1489,11 @@ "members":{ "modelArn":{ "shape":"FoundationModelArn", - "documentation":"

The ARN of the foundation model.

" + "documentation":"

The Amazon Resource Name (ARN) of the foundation model.

" }, "modelId":{ "shape":"BedrockModelId", - "documentation":"

The model Id of the foundation model.

" + "documentation":"

The model ID of the foundation model.

" }, "modelName":{ "shape":"BrandedName", @@ -839,7 +1540,7 @@ "members":{ "modelIdentifier":{ "shape":"ModelIdentifier", - "documentation":"

Name or ARN of the custom model.

", + "documentation":"

Name or Amazon Resource Name (ARN) of the custom model.

", "location":"uri", "locationName":"modelIdentifier" } @@ -859,7 +1560,7 @@ "members":{ "modelArn":{ "shape":"ModelArn", - "documentation":"

ARN associated with this model.

" + "documentation":"

Amazon Resource Name (ARN) associated with this model.

" }, "modelName":{ "shape":"CustomModelName", @@ -871,11 +1572,11 @@ }, "jobArn":{ "shape":"ModelCustomizationJobArn", - "documentation":"

Job ARN associated with this model.

" + "documentation":"

Job Amazon Resource Name (ARN) associated with this model.

" }, "baseModelArn":{ "shape":"ModelArn", - "documentation":"

ARN of the base model.

" + "documentation":"

Amazon Resource Name (ARN) of the base model.

" }, "customizationType":{ "shape":"CustomizationType", @@ -887,20 +1588,23 @@ }, "hyperParameters":{ "shape":"ModelCustomizationHyperParameters", - "documentation":"

Hyperparameter values associated with this model.

" + "documentation":"

Hyperparameter values associated with this model. For details on the format for different models, see Custom model hyperparameters.

" }, "trainingDataConfig":{ "shape":"TrainingDataConfig", - "documentation":"

Information about the training dataset.

" + "documentation":"

Contains information about the training dataset.

" + }, + "validationDataConfig":{ + "shape":"ValidationDataConfig", + "documentation":"

Contains information about the validation dataset.

" }, - "validationDataConfig":{"shape":"ValidationDataConfig"}, "outputDataConfig":{ "shape":"OutputDataConfig", "documentation":"

Output data configuration associated with this custom model.

" }, "trainingMetrics":{ "shape":"TrainingMetrics", - "documentation":"

The training metrics from the job creation.

" + "documentation":"

Contains training metrics from the job creation.

" }, "validationMetrics":{ "shape":"ValidationMetrics", @@ -912,6 +1616,86 @@ } } }, + "GetEvaluationJobRequest":{ + "type":"structure", + "required":["jobIdentifier"], + "members":{ + "jobIdentifier":{ + "shape":"EvaluationJobIdentifier", + "documentation":"

The Amazon Resource Name (ARN) of the model evaluation job.

", + "location":"uri", + "locationName":"jobIdentifier" + } + } + }, + "GetEvaluationJobResponse":{ + "type":"structure", + "required":[ + "jobName", + "status", + "jobArn", + "roleArn", + "jobType", + "evaluationConfig", + "inferenceConfig", + "outputDataConfig", + "creationTime" + ], + "members":{ + "jobName":{ + "shape":"EvaluationJobName", + "documentation":"

The name of the model evaluation job.

" + }, + "status":{ + "shape":"EvaluationJobStatus", + "documentation":"

The status of the model evaluation job.

" + }, + "jobArn":{ + "shape":"EvaluationJobArn", + "documentation":"

The Amazon Resource Name (ARN) of the model evaluation job.

" + }, + "jobDescription":{ + "shape":"EvaluationJobDescription", + "documentation":"

The description of the model evaluation job.

" + }, + "roleArn":{ + "shape":"RoleArn", + "documentation":"

The Amazon Resource Name (ARN) of the IAM service role used in the model evaluation job.

" + }, + "customerEncryptionKeyId":{ + "shape":"KmsKeyId", + "documentation":"

The Amazon Resource Name (ARN) of the customer managed key specified when the model evaluation job was created.

" + }, + "jobType":{ + "shape":"EvaluationJobType", + "documentation":"

The type of model evaluation job.

" + }, + "evaluationConfig":{ + "shape":"EvaluationConfig", + "documentation":"

Contains details about the type of model evaluation job, the metrics used, the task type selected, the datasets used, and any custom metrics you defined.

" + }, + "inferenceConfig":{ + "shape":"EvaluationInferenceConfig", + "documentation":"

Details about the models you specified in your model evaluation job.

" + }, + "outputDataConfig":{ + "shape":"EvaluationOutputDataConfig", + "documentation":"

Amazon S3 location for where output data is saved.

" + }, + "creationTime":{ + "shape":"Timestamp", + "documentation":"

When the model evaluation job was created.

" + }, + "lastModifiedTime":{ + "shape":"Timestamp", + "documentation":"

When the model evaluation job was last modified.

" + }, + "failureMessages":{ + "shape":"ErrorMessages", + "documentation":"

An array of strings the specify why the model evaluation job has failed.

" + } + } + }, "GetFoundationModelRequest":{ "type":"structure", "required":["modelIdentifier"], @@ -933,56 +1717,158 @@ } } }, - "GetModelCustomizationJobRequest":{ + "GetGuardrailRequest":{ "type":"structure", - "required":["jobIdentifier"], + "required":["guardrailIdentifier"], "members":{ - "jobIdentifier":{ - "shape":"ModelCustomizationJobIdentifier", - "documentation":"

Identifier for the customization job.

", + "guardrailIdentifier":{ + "shape":"GuardrailIdentifier", + "documentation":"

The unique identifier of the guardrail for which to get details.

", "location":"uri", - "locationName":"jobIdentifier" + "locationName":"guardrailIdentifier" + }, + "guardrailVersion":{ + "shape":"GuardrailVersion", + "documentation":"

The version of the guardrail for which to get details. If you don't specify a version, the response returns details for the DRAFT version.

", + "location":"querystring", + "locationName":"guardrailVersion" } } }, - "GetModelCustomizationJobResponse":{ + "GetGuardrailResponse":{ "type":"structure", "required":[ - "jobArn", - "jobName", - "outputModelName", - "roleArn", - "creationTime", - "baseModelArn", - "hyperParameters", - "trainingDataConfig", - "validationDataConfig", - "outputDataConfig" + "name", + "guardrailId", + "guardrailArn", + "version", + "status", + "createdAt", + "updatedAt", + "blockedInputMessaging", + "blockedOutputsMessaging" ], "members":{ - "jobArn":{ - "shape":"ModelCustomizationJobArn", - "documentation":"

The ARN of the customization job.

" + "name":{ + "shape":"GuardrailName", + "documentation":"

The name of the guardrail.

" }, - "jobName":{ - "shape":"JobName", - "documentation":"

The name of the customization job.

" + "description":{ + "shape":"GuardrailDescription", + "documentation":"

The description of the guardrail.

" }, - "outputModelName":{ - "shape":"CustomModelName", - "documentation":"

The name of the output model.

" + "guardrailId":{ + "shape":"GuardrailId", + "documentation":"

The unique identifier of the guardrail.

" }, - "outputModelArn":{ - "shape":"CustomModelArn", - "documentation":"

The ARN of the output model.

" + "guardrailArn":{ + "shape":"GuardrailArn", + "documentation":"

The ARN of the guardrail that was created.

" + }, + "version":{ + "shape":"GuardrailVersion", + "documentation":"

The version of the guardrail.

" + }, + "status":{ + "shape":"GuardrailStatus", + "documentation":"

The status of the guardrail.

" + }, + "topicPolicy":{ + "shape":"GuardrailTopicPolicy", + "documentation":"

The topic policy that was configured for the guardrail.

" + }, + "contentPolicy":{ + "shape":"GuardrailContentPolicy", + "documentation":"

The content policy that was configured for the guardrail.

" + }, + "wordPolicy":{ + "shape":"GuardrailWordPolicy", + "documentation":"

The word policy that was configured for the guardrail.

" + }, + "sensitiveInformationPolicy":{ + "shape":"GuardrailSensitiveInformationPolicy", + "documentation":"

The sensitive information policy that was configured for the guardrail.

" + }, + "createdAt":{ + "shape":"Timestamp", + "documentation":"

The date and time at which the guardrail was created.

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

The date and time at which the guardrail was updated.

" + }, + "statusReasons":{ + "shape":"GuardrailStatusReasons", + "documentation":"

Appears if the status is FAILED. A list of reasons for why the guardrail failed to be created, updated, versioned, or deleted.

" + }, + "failureRecommendations":{ + "shape":"GuardrailFailureRecommendations", + "documentation":"

Appears if the status of the guardrail is FAILED. A list of recommendations to carry out before retrying the request.

" + }, + "blockedInputMessaging":{ + "shape":"GuardrailBlockedMessaging", + "documentation":"

The message that the guardrail returns when it blocks a prompt.

" + }, + "blockedOutputsMessaging":{ + "shape":"GuardrailBlockedMessaging", + "documentation":"

The message that the guardrail returns when it blocks a model response.

" + }, + "kmsKeyArn":{ + "shape":"KmsKeyArn", + "documentation":"

The ARN of the KMS key that encrypts the guardrail.

" + } + } + }, + "GetModelCustomizationJobRequest":{ + "type":"structure", + "required":["jobIdentifier"], + "members":{ + "jobIdentifier":{ + "shape":"ModelCustomizationJobIdentifier", + "documentation":"

Identifier for the customization job.

", + "location":"uri", + "locationName":"jobIdentifier" + } + } + }, + "GetModelCustomizationJobResponse":{ + "type":"structure", + "required":[ + "jobArn", + "jobName", + "outputModelName", + "roleArn", + "creationTime", + "baseModelArn", + "hyperParameters", + "trainingDataConfig", + "validationDataConfig", + "outputDataConfig" + ], + "members":{ + "jobArn":{ + "shape":"ModelCustomizationJobArn", + "documentation":"

The Amazon Resource Name (ARN) of the customization job.

" + }, + "jobName":{ + "shape":"JobName", + "documentation":"

The name of the customization job.

" + }, + "outputModelName":{ + "shape":"CustomModelName", + "documentation":"

The name of the output model.

" + }, + "outputModelArn":{ + "shape":"CustomModelArn", + "documentation":"

The Amazon Resource Name (ARN) of the output model.

" }, "clientRequestToken":{ "shape":"IdempotencyToken", - "documentation":"

The token that you specified in the CreateCustomizationJob request.

" + "documentation":"

The token that you specified in the CreateCustomizationJob request.

" }, "roleArn":{ "shape":"RoleArn", - "documentation":"

The ARN of the IAM role.

" + "documentation":"

The Amazon Resource Name (ARN) of the IAM role.

" }, "status":{ "shape":"ModelCustomizationJobStatus", @@ -1006,14 +1892,20 @@ }, "baseModelArn":{ "shape":"FoundationModelArn", - "documentation":"

ARN of the base model.

" + "documentation":"

Amazon Resource Name (ARN) of the base model.

" }, "hyperParameters":{ "shape":"ModelCustomizationHyperParameters", - "documentation":"

The hyperparameter values for the job. For information about hyperparameters for specific models, see Guidelines for model customization.

" + "documentation":"

The hyperparameter values for the job. For details on the format for different models, see Custom model hyperparameters.

" + }, + "trainingDataConfig":{ + "shape":"TrainingDataConfig", + "documentation":"

Contains information about the training dataset.

" + }, + "validationDataConfig":{ + "shape":"ValidationDataConfig", + "documentation":"

Contains information about the validation dataset.

" }, - "trainingDataConfig":{"shape":"TrainingDataConfig"}, - "validationDataConfig":{"shape":"ValidationDataConfig"}, "outputDataConfig":{ "shape":"OutputDataConfig", "documentation":"

Output data configuration

" @@ -1026,7 +1918,10 @@ "shape":"KmsKeyArn", "documentation":"

The custom model is encrypted at rest using this key.

" }, - "trainingMetrics":{"shape":"TrainingMetrics"}, + "trainingMetrics":{ + "shape":"TrainingMetrics", + "documentation":"

Contains training metrics from the job creation.

" + }, "validationMetrics":{ "shape":"ValidationMetrics", "documentation":"

The loss metric for each validator that you provided in the createjob request.

" @@ -1035,102 +1930,842 @@ "shape":"VpcConfig", "documentation":"

VPC configuration for the custom model job.

" } - } + } + }, + "GetModelInvocationLoggingConfigurationRequest":{ + "type":"structure", + "members":{ + } + }, + "GetModelInvocationLoggingConfigurationResponse":{ + "type":"structure", + "members":{ + "loggingConfig":{ + "shape":"LoggingConfig", + "documentation":"

The current configuration values.

" + } + } + }, + "GetProvisionedModelThroughputRequest":{ + "type":"structure", + "required":["provisionedModelId"], + "members":{ + "provisionedModelId":{ + "shape":"ProvisionedModelId", + "documentation":"

The Amazon Resource Name (ARN) or name of the Provisioned Throughput.

", + "location":"uri", + "locationName":"provisionedModelId" + } + } + }, + "GetProvisionedModelThroughputResponse":{ + "type":"structure", + "required":[ + "modelUnits", + "desiredModelUnits", + "provisionedModelName", + "provisionedModelArn", + "modelArn", + "desiredModelArn", + "foundationModelArn", + "status", + "creationTime", + "lastModifiedTime" + ], + "members":{ + "modelUnits":{ + "shape":"PositiveInteger", + "documentation":"

The number of model units allocated to this Provisioned Throughput.

" + }, + "desiredModelUnits":{ + "shape":"PositiveInteger", + "documentation":"

The number of model units that was requested for this Provisioned Throughput.

" + }, + "provisionedModelName":{ + "shape":"ProvisionedModelName", + "documentation":"

The name of the Provisioned Throughput.

" + }, + "provisionedModelArn":{ + "shape":"ProvisionedModelArn", + "documentation":"

The Amazon Resource Name (ARN) of the Provisioned Throughput.

" + }, + "modelArn":{ + "shape":"ModelArn", + "documentation":"

The Amazon Resource Name (ARN) of the model associated with this Provisioned Throughput.

" + }, + "desiredModelArn":{ + "shape":"ModelArn", + "documentation":"

The Amazon Resource Name (ARN) of the model requested to be associated to this Provisioned Throughput. This value differs from the modelArn if updating hasn't completed.

" + }, + "foundationModelArn":{ + "shape":"FoundationModelArn", + "documentation":"

The Amazon Resource Name (ARN) of the base model for which the Provisioned Throughput was created, or of the base model that the custom model for which the Provisioned Throughput was created was customized.

" + }, + "status":{ + "shape":"ProvisionedModelStatus", + "documentation":"

The status of the Provisioned Throughput.

" + }, + "creationTime":{ + "shape":"Timestamp", + "documentation":"

The timestamp of the creation time for this Provisioned Throughput.

" + }, + "lastModifiedTime":{ + "shape":"Timestamp", + "documentation":"

The timestamp of the last time that this Provisioned Throughput was modified.

" + }, + "failureMessage":{ + "shape":"ErrorMessage", + "documentation":"

A failure message for any issues that occurred during creation, updating, or deletion of the Provisioned Throughput.

" + }, + "commitmentDuration":{ + "shape":"CommitmentDuration", + "documentation":"

Commitment duration of the Provisioned Throughput.

" + }, + "commitmentExpirationTime":{ + "shape":"Timestamp", + "documentation":"

The timestamp for when the commitment term for the Provisioned Throughput expires.

" + } + } + }, + "GuardrailArn":{ + "type":"string", + "max":2048, + "min":0, + "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+" + }, + "GuardrailBlockedMessaging":{ + "type":"string", + "max":500, + "min":1, + "sensitive":true + }, + "GuardrailContentFilter":{ + "type":"structure", + "required":[ + "type", + "inputStrength", + "outputStrength" + ], + "members":{ + "type":{ + "shape":"GuardrailContentFilterType", + "documentation":"

The harmful category that the content filter is applied to.

" + }, + "inputStrength":{ + "shape":"GuardrailFilterStrength", + "documentation":"

The strength of the content filter to apply to prompts. As you increase the filter strength, the likelihood of filtering harmful content increases and the probability of seeing harmful content in your application reduces.

" + }, + "outputStrength":{ + "shape":"GuardrailFilterStrength", + "documentation":"

The strength of the content filter to apply to model responses. As you increase the filter strength, the likelihood of filtering harmful content increases and the probability of seeing harmful content in your application reduces.

" + } + }, + "documentation":"

Contains filter strengths for harmful content. Guardrails support the following content filters to detect and filter harmful user inputs and FM-generated outputs.

  • Hate – Describes language or a statement that discriminates, criticizes, insults, denounces, or dehumanizes a person or group on the basis of an identity (such as race, ethnicity, gender, religion, sexual orientation, ability, and national origin).

  • Insults – Describes language or a statement that includes demeaning, humiliating, mocking, insulting, or belittling language. This type of language is also labeled as bullying.

  • Sexual – Describes language or a statement that indicates sexual interest, activity, or arousal using direct or indirect references to body parts, physical traits, or sex.

  • Violence – Describes language or a statement that includes glorification of or threats to inflict physical pain, hurt, or injury toward a person, group or thing.

Content filtering depends on the confidence classification of user inputs and FM responses across each of the four harmful categories. All input and output statements are classified into one of four confidence levels (NONE, LOW, MEDIUM, HIGH) for each harmful category. For example, if a statement is classified as Hate with HIGH confidence, the likelihood of the statement representing hateful content is high. A single statement can be classified across multiple categories with varying confidence levels. For example, a single statement can be classified as Hate with HIGH confidence, Insults with LOW confidence, Sexual with NONE confidence, and Violence with MEDIUM confidence.

For more information, see Guardrails content filters.

This data type is used in the following API operations:

" + }, + "GuardrailContentFilterConfig":{ + "type":"structure", + "required":[ + "type", + "inputStrength", + "outputStrength" + ], + "members":{ + "type":{ + "shape":"GuardrailContentFilterType", + "documentation":"

The harmful category that the content filter is applied to.

" + }, + "inputStrength":{ + "shape":"GuardrailFilterStrength", + "documentation":"

The strength of the content filter to apply to prompts. As you increase the filter strength, the likelihood of filtering harmful content increases and the probability of seeing harmful content in your application reduces.

" + }, + "outputStrength":{ + "shape":"GuardrailFilterStrength", + "documentation":"

The strength of the content filter to apply to model responses. As you increase the filter strength, the likelihood of filtering harmful content increases and the probability of seeing harmful content in your application reduces.

" + } + }, + "documentation":"

Contains filter strengths for harmful content. Guardrails support the following content filters to detect and filter harmful user inputs and FM-generated outputs.

  • Hate – Describes language or a statement that discriminates, criticizes, insults, denounces, or dehumanizes a person or group on the basis of an identity (such as race, ethnicity, gender, religion, sexual orientation, ability, and national origin).

  • Insults – Describes language or a statement that includes demeaning, humiliating, mocking, insulting, or belittling language. This type of language is also labeled as bullying.

  • Sexual – Describes language or a statement that indicates sexual interest, activity, or arousal using direct or indirect references to body parts, physical traits, or sex.

  • Violence – Describes language or a statement that includes glorification of or threats to inflict physical pain, hurt, or injury toward a person, group or thing.

Content filtering depends on the confidence classification of user inputs and FM responses across each of the four harmful categories. All input and output statements are classified into one of four confidence levels (NONE, LOW, MEDIUM, HIGH) for each harmful category. For example, if a statement is classified as Hate with HIGH confidence, the likelihood of the statement representing hateful content is high. A single statement can be classified across multiple categories with varying confidence levels. For example, a single statement can be classified as Hate with HIGH confidence, Insults with LOW confidence, Sexual with NONE confidence, and Violence with MEDIUM confidence.

For more information, see Guardrails content filters.

This data type is used in the following API operations:

" + }, + "GuardrailContentFilterType":{ + "type":"string", + "enum":[ + "SEXUAL", + "VIOLENCE", + "HATE", + "INSULTS", + "MISCONDUCT", + "PROMPT_ATTACK" + ] + }, + "GuardrailContentFilters":{ + "type":"list", + "member":{"shape":"GuardrailContentFilter"}, + "max":6, + "min":1 + }, + "GuardrailContentFiltersConfig":{ + "type":"list", + "member":{"shape":"GuardrailContentFilterConfig"}, + "max":6, + "min":1 + }, + "GuardrailContentPolicy":{ + "type":"structure", + "members":{ + "filters":{ + "shape":"GuardrailContentFilters", + "documentation":"

Contains the type of the content filter and how strongly it should apply to prompts and model responses.

" + } + }, + "documentation":"

Contains details about how to handle harmful content.

This data type is used in the following API operations:

" + }, + "GuardrailContentPolicyConfig":{ + "type":"structure", + "required":["filtersConfig"], + "members":{ + "filtersConfig":{ + "shape":"GuardrailContentFiltersConfig", + "documentation":"

Contains the type of the content filter and how strongly it should apply to prompts and model responses.

" + } + }, + "documentation":"

Contains details about how to handle harmful content.

This data type is used in the following API operations:

" + }, + "GuardrailDescription":{ + "type":"string", + "max":200, + "min":1, + "sensitive":true + }, + "GuardrailDraftVersion":{ + "type":"string", + "max":5, + "min":5, + "pattern":"DRAFT" + }, + "GuardrailFailureRecommendation":{ + "type":"string", + "max":200, + "min":1, + "sensitive":true + }, + "GuardrailFailureRecommendations":{ + "type":"list", + "member":{"shape":"GuardrailFailureRecommendation"}, + "max":100, + "min":0 + }, + "GuardrailFilterStrength":{ + "type":"string", + "enum":[ + "NONE", + "LOW", + "MEDIUM", + "HIGH" + ] + }, + "GuardrailId":{ + "type":"string", + "max":64, + "min":0, + "pattern":"[a-z0-9]+" + }, + "GuardrailIdentifier":{ + "type":"string", + "max":2048, + "min":0, + "pattern":"(([a-z0-9]+)|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+))" + }, + "GuardrailManagedWordLists":{ + "type":"list", + "member":{"shape":"GuardrailManagedWords"} + }, + "GuardrailManagedWordListsConfig":{ + "type":"list", + "member":{"shape":"GuardrailManagedWordsConfig"} + }, + "GuardrailManagedWords":{ + "type":"structure", + "required":["type"], + "members":{ + "type":{ + "shape":"GuardrailManagedWordsType", + "documentation":"

ManagedWords$type The managed word type that was configured for the guardrail. (For now, we only offer profanity word list)

" + } + }, + "documentation":"

The managed word list that was configured for the guardrail. (This is a list of words that are pre-defined and managed by Guardrails only.)

" + }, + "GuardrailManagedWordsConfig":{ + "type":"structure", + "required":["type"], + "members":{ + "type":{ + "shape":"GuardrailManagedWordsType", + "documentation":"

The managed word type to configure for the guardrail.

" + } + }, + "documentation":"

The managed word list to configure for the guardrail.

" + }, + "GuardrailManagedWordsType":{ + "type":"string", + "enum":["PROFANITY"] + }, + "GuardrailName":{ + "type":"string", + "max":50, + "min":1, + "pattern":"[0-9a-zA-Z-_]+", + "sensitive":true + }, + "GuardrailNumericalVersion":{ + "type":"string", + "pattern":"[1-9][0-9]{0,7}" + }, + "GuardrailPiiEntities":{ + "type":"list", + "member":{"shape":"GuardrailPiiEntity"}, + "min":1 + }, + "GuardrailPiiEntitiesConfig":{ + "type":"list", + "member":{"shape":"GuardrailPiiEntityConfig"}, + "min":1 + }, + "GuardrailPiiEntity":{ + "type":"structure", + "required":[ + "type", + "action" + ], + "members":{ + "type":{ + "shape":"GuardrailPiiEntityType", + "documentation":"

The type of PII entity. For example, Social Security Number.

" + }, + "action":{ + "shape":"GuardrailSensitiveInformationAction", + "documentation":"

The configured guardrail action when PII entity is detected.

" + } + }, + "documentation":"

The PII entity configured for the guardrail.

" + }, + "GuardrailPiiEntityConfig":{ + "type":"structure", + "required":[ + "type", + "action" + ], + "members":{ + "type":{ + "shape":"GuardrailPiiEntityType", + "documentation":"

Configure guardrail type when the PII entity is detected.

" + }, + "action":{ + "shape":"GuardrailSensitiveInformationAction", + "documentation":"

Configure guardrail action when the PII entity is detected.

" + } + }, + "documentation":"

The PII entity to configure for the guardrail.

" + }, + "GuardrailPiiEntityType":{ + "type":"string", + "enum":[ + "ADDRESS", + "AGE", + "AWS_ACCESS_KEY", + "AWS_SECRET_KEY", + "CA_HEALTH_NUMBER", + "CA_SOCIAL_INSURANCE_NUMBER", + "CREDIT_DEBIT_CARD_CVV", + "CREDIT_DEBIT_CARD_EXPIRY", + "CREDIT_DEBIT_CARD_NUMBER", + "DRIVER_ID", + "EMAIL", + "INTERNATIONAL_BANK_ACCOUNT_NUMBER", + "IP_ADDRESS", + "LICENSE_PLATE", + "MAC_ADDRESS", + "NAME", + "PASSWORD", + "PHONE", + "PIN", + "SWIFT_CODE", + "UK_NATIONAL_HEALTH_SERVICE_NUMBER", + "UK_NATIONAL_INSURANCE_NUMBER", + "UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER", + "URL", + "USERNAME", + "US_BANK_ACCOUNT_NUMBER", + "US_BANK_ROUTING_NUMBER", + "US_INDIVIDUAL_TAX_IDENTIFICATION_NUMBER", + "US_PASSPORT_NUMBER", + "US_SOCIAL_SECURITY_NUMBER", + "VEHICLE_IDENTIFICATION_NUMBER" + ] + }, + "GuardrailRegex":{ + "type":"structure", + "required":[ + "name", + "pattern", + "action" + ], + "members":{ + "name":{ + "shape":"GuardrailRegexNameString", + "documentation":"

The name of the regular expression for the guardrail.

" + }, + "description":{ + "shape":"GuardrailRegexDescriptionString", + "documentation":"

The description of the regular expression for the guardrail.

" + }, + "pattern":{ + "shape":"GuardrailRegexPatternString", + "documentation":"

The pattern of the regular expression configured for the guardrail.

" + }, + "action":{ + "shape":"GuardrailSensitiveInformationAction", + "documentation":"

The action taken when a match to the regular expression is detected.

" + } + }, + "documentation":"

The regular expression configured for the guardrail.

" + }, + "GuardrailRegexConfig":{ + "type":"structure", + "required":[ + "name", + "pattern", + "action" + ], + "members":{ + "name":{ + "shape":"GuardrailRegexConfigNameString", + "documentation":"

The name of the regular expression to configure for the guardrail.

" + }, + "description":{ + "shape":"GuardrailRegexConfigDescriptionString", + "documentation":"

The description of the regular expression to configure for the guardrail.

" + }, + "pattern":{ + "shape":"GuardrailRegexConfigPatternString", + "documentation":"

The regular expression pattern to configure for the guardrail.

" + }, + "action":{ + "shape":"GuardrailSensitiveInformationAction", + "documentation":"

The guardrail action to configure when matching regular expression is detected.

" + } + }, + "documentation":"

The regular expression to configure for the guardrail.

" + }, + "GuardrailRegexConfigDescriptionString":{ + "type":"string", + "max":1000, + "min":1 + }, + "GuardrailRegexConfigNameString":{ + "type":"string", + "max":100, + "min":1 + }, + "GuardrailRegexConfigPatternString":{ + "type":"string", + "max":500, + "min":1 + }, + "GuardrailRegexDescriptionString":{ + "type":"string", + "max":1000, + "min":1 + }, + "GuardrailRegexNameString":{ + "type":"string", + "max":100, + "min":1 + }, + "GuardrailRegexPatternString":{ + "type":"string", + "max":500, + "min":1 + }, + "GuardrailRegexes":{ + "type":"list", + "member":{"shape":"GuardrailRegex"} + }, + "GuardrailRegexesConfig":{ + "type":"list", + "member":{"shape":"GuardrailRegexConfig"}, + "max":10, + "min":1 + }, + "GuardrailSensitiveInformationAction":{ + "type":"string", + "enum":[ + "BLOCK", + "ANONYMIZE" + ] + }, + "GuardrailSensitiveInformationPolicy":{ + "type":"structure", + "members":{ + "piiEntities":{ + "shape":"GuardrailPiiEntities", + "documentation":"

The list of PII entities configured for the guardrail.

" + }, + "regexes":{ + "shape":"GuardrailRegexes", + "documentation":"

The list of regular expressions configured for the guardrail.

" + } + }, + "documentation":"

Contains details about PII entities and regular expressions configured for the guardrail.

" + }, + "GuardrailSensitiveInformationPolicyConfig":{ + "type":"structure", + "members":{ + "piiEntitiesConfig":{ + "shape":"GuardrailPiiEntitiesConfig", + "documentation":"

A list of PII entities to configure to the guardrail.

" + }, + "regexesConfig":{ + "shape":"GuardrailRegexesConfig", + "documentation":"

A list of regular expressions to configure to the guardrail.

" + } + }, + "documentation":"

Contains details about PII entities and regular expressions to configure for the guardrail.

" + }, + "GuardrailStatus":{ + "type":"string", + "enum":[ + "CREATING", + "UPDATING", + "VERSIONING", + "READY", + "FAILED", + "DELETING" + ] + }, + "GuardrailStatusReason":{ + "type":"string", + "max":200, + "min":1, + "sensitive":true + }, + "GuardrailStatusReasons":{ + "type":"list", + "member":{"shape":"GuardrailStatusReason"}, + "max":100, + "min":0 + }, + "GuardrailSummaries":{ + "type":"list", + "member":{"shape":"GuardrailSummary"}, + "max":1000, + "min":0 + }, + "GuardrailSummary":{ + "type":"structure", + "required":[ + "id", + "arn", + "status", + "name", + "version", + "createdAt", + "updatedAt" + ], + "members":{ + "id":{ + "shape":"GuardrailId", + "documentation":"

The unique identifier of the guardrail.

" + }, + "arn":{ + "shape":"GuardrailArn", + "documentation":"

The ARN of the guardrail.

" + }, + "status":{ + "shape":"GuardrailStatus", + "documentation":"

The status of the guardrail.

" + }, + "name":{ + "shape":"GuardrailName", + "documentation":"

The name of the guardrail.

" + }, + "description":{ + "shape":"GuardrailDescription", + "documentation":"

A description of the guardrail.

" + }, + "version":{ + "shape":"GuardrailVersion", + "documentation":"

The version of the guardrail.

" + }, + "createdAt":{ + "shape":"Timestamp", + "documentation":"

The date and time at which the guardrail was created.

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

The date and time at which the guardrail was last updated.

" + } + }, + "documentation":"

Contains details about a guardrail.

This data type is used in the following API operations:

" + }, + "GuardrailTopic":{ + "type":"structure", + "required":[ + "name", + "definition" + ], + "members":{ + "name":{ + "shape":"GuardrailTopicName", + "documentation":"

The name of the topic to deny.

" + }, + "definition":{ + "shape":"GuardrailTopicDefinition", + "documentation":"

A definition of the topic to deny.

" + }, + "examples":{ + "shape":"GuardrailTopicExamples", + "documentation":"

A list of prompts, each of which is an example of a prompt that can be categorized as belonging to the topic.

" + }, + "type":{ + "shape":"GuardrailTopicType", + "documentation":"

Specifies to deny the topic.

" + } + }, + "documentation":"

Details about topics for the guardrail to identify and deny.

This data type is used in the following API operations:

" + }, + "GuardrailTopicConfig":{ + "type":"structure", + "required":[ + "name", + "definition", + "type" + ], + "members":{ + "name":{ + "shape":"GuardrailTopicName", + "documentation":"

The name of the topic to deny.

" + }, + "definition":{ + "shape":"GuardrailTopicDefinition", + "documentation":"

A definition of the topic to deny.

" + }, + "examples":{ + "shape":"GuardrailTopicExamples", + "documentation":"

A list of prompts, each of which is an example of a prompt that can be categorized as belonging to the topic.

" + }, + "type":{ + "shape":"GuardrailTopicType", + "documentation":"

Specifies to deny the topic.

" + } + }, + "documentation":"

Details about topics for the guardrail to identify and deny.

This data type is used in the following API operations:

" + }, + "GuardrailTopicDefinition":{ + "type":"string", + "max":200, + "min":1, + "sensitive":true + }, + "GuardrailTopicExample":{ + "type":"string", + "max":100, + "min":1, + "sensitive":true + }, + "GuardrailTopicExamples":{ + "type":"list", + "member":{"shape":"GuardrailTopicExample"}, + "max":5, + "min":0 + }, + "GuardrailTopicName":{ + "type":"string", + "max":100, + "min":1, + "pattern":"[0-9a-zA-Z-_ !?.]+", + "sensitive":true + }, + "GuardrailTopicPolicy":{ + "type":"structure", + "required":["topics"], + "members":{ + "topics":{ + "shape":"GuardrailTopics", + "documentation":"

A list of policies related to topics that the guardrail should deny.

" + } + }, + "documentation":"

Contains details about topics that the guardrail should identify and deny.

This data type is used in the following API operations:

" }, - "GetModelInvocationLoggingConfigurationRequest":{ + "GuardrailTopicPolicyConfig":{ "type":"structure", + "required":["topicsConfig"], "members":{ - } + "topicsConfig":{ + "shape":"GuardrailTopicsConfig", + "documentation":"

A list of policies related to topics that the guardrail should deny.

" + } + }, + "documentation":"

Contains details about topics that the guardrail should identify and deny.

This data type is used in the following API operations:

" }, - "GetModelInvocationLoggingConfigurationResponse":{ + "GuardrailTopicType":{ + "type":"string", + "enum":["DENY"] + }, + "GuardrailTopics":{ + "type":"list", + "member":{"shape":"GuardrailTopic"}, + "max":30, + "min":1 + }, + "GuardrailTopicsConfig":{ + "type":"list", + "member":{"shape":"GuardrailTopicConfig"}, + "max":30, + "min":1 + }, + "GuardrailVersion":{ + "type":"string", + "pattern":"(([1-9][0-9]{0,7})|(DRAFT))" + }, + "GuardrailWord":{ "type":"structure", + "required":["text"], "members":{ - "loggingConfig":{ - "shape":"LoggingConfig", - "documentation":"

The current configuration values.

" + "text":{ + "shape":"GuardrailWordTextString", + "documentation":"

Text of the word configured for the guardrail to block.

" } - } + }, + "documentation":"

A word configured for the guardrail.

" }, - "GetProvisionedModelThroughputRequest":{ + "GuardrailWordConfig":{ "type":"structure", - "required":["provisionedModelId"], + "required":["text"], "members":{ - "provisionedModelId":{ - "shape":"ProvisionedModelId", - "documentation":"

The ARN or name of the provisioned throughput.

", - "location":"uri", - "locationName":"provisionedModelId" + "text":{ + "shape":"GuardrailWordConfigTextString", + "documentation":"

Text of the word configured for the guardrail to block.

" } - } + }, + "documentation":"

A word to configure for the guardrail.

" }, - "GetProvisionedModelThroughputResponse":{ + "GuardrailWordConfigTextString":{ + "type":"string", + "max":100, + "min":1 + }, + "GuardrailWordPolicy":{ "type":"structure", - "required":[ - "modelUnits", - "desiredModelUnits", - "provisionedModelName", - "provisionedModelArn", - "modelArn", - "desiredModelArn", - "foundationModelArn", - "status", - "creationTime", - "lastModifiedTime" - ], "members":{ - "modelUnits":{ - "shape":"PositiveInteger", - "documentation":"

The current number of model units requested to be available for this provisioned throughput.

" + "words":{ + "shape":"GuardrailWords", + "documentation":"

A list of words configured for the guardrail.

" }, - "desiredModelUnits":{ - "shape":"PositiveInteger", - "documentation":"

The desired number of model units that was requested to be available for this provisioned throughput.

" - }, - "provisionedModelName":{ - "shape":"ProvisionedModelName", - "documentation":"

The name of the provisioned throughput.

" - }, - "provisionedModelArn":{ - "shape":"ProvisionedModelArn", - "documentation":"

The ARN of the provisioned throughput.

" - }, - "modelArn":{ - "shape":"ModelArn", - "documentation":"

The ARN or name of the model associated with this provisioned throughput.

" - }, - "desiredModelArn":{ - "shape":"ModelArn", - "documentation":"

The ARN of the new model to asssociate with this provisioned throughput.

" - }, - "foundationModelArn":{ - "shape":"FoundationModelArn", - "documentation":"

ARN of the foundation model.

" + "managedWordLists":{ + "shape":"GuardrailManagedWordLists", + "documentation":"

A list of managed words configured for the guardrail.

" + } + }, + "documentation":"

Contains details about the word policy configured for the guardrail.

" + }, + "GuardrailWordPolicyConfig":{ + "type":"structure", + "members":{ + "wordsConfig":{ + "shape":"GuardrailWordsConfig", + "documentation":"

A list of words to configure for the guardrail.

" }, - "status":{ - "shape":"ProvisionedModelStatus", - "documentation":"

Status of the provisioned throughput.

" + "managedWordListsConfig":{ + "shape":"GuardrailManagedWordListsConfig", + "documentation":"

A list of managed words to configure for the guardrail.

" + } + }, + "documentation":"

Contains details about the word policy to configured for the guardrail.

" + }, + "GuardrailWordTextString":{ + "type":"string", + "max":100, + "min":1 + }, + "GuardrailWords":{ + "type":"list", + "member":{"shape":"GuardrailWord"}, + "max":10000, + "min":1 + }, + "GuardrailWordsConfig":{ + "type":"list", + "member":{"shape":"GuardrailWordConfig"}, + "max":10000, + "min":1 + }, + "HumanEvaluationConfig":{ + "type":"structure", + "required":["datasetMetricConfigs"], + "members":{ + "humanWorkflowConfig":{ + "shape":"HumanWorkflowConfig", + "documentation":"

The parameters of the human workflow.

" }, - "creationTime":{ - "shape":"Timestamp", - "documentation":"

The timestamp of the creation time for this provisioned throughput.

" + "customMetrics":{ + "shape":"HumanEvaluationCustomMetrics", + "documentation":"

A HumanEvaluationCustomMetric object. It contains the names the metrics, how the metrics are to be evaluated, an optional description.

" }, - "lastModifiedTime":{ - "shape":"Timestamp", - "documentation":"

The timestamp of the last modified time of this provisioned throughput.

" + "datasetMetricConfigs":{ + "shape":"EvaluationDatasetMetricConfigs", + "documentation":"

Use to specify the metrics, task, and prompt dataset to be used in your model evaluation job.

" + } + }, + "documentation":"

Specifies the custom metrics, how tasks will be rated, the flow definition ARN, and your custom prompt datasets. Model evaluation jobs use human workers only support the use of custom prompt datasets. To learn more about custom prompt datasets and the required format, see Custom prompt datasets.

When you create custom metrics in HumanEvaluationCustomMetric you must specify the metric's name. The list of names specified in the HumanEvaluationCustomMetric array, must match the metricNames array of strings specified in EvaluationDatasetMetricConfig. For example, if in the HumanEvaluationCustomMetric array your specified the names \"accuracy\", \"toxicity\", \"readability\" as custom metrics then the metricNames array would need to look like the following [\"accuracy\", \"toxicity\", \"readability\"] in EvaluationDatasetMetricConfig.

" + }, + "HumanEvaluationCustomMetric":{ + "type":"structure", + "required":[ + "name", + "ratingMethod" + ], + "members":{ + "name":{ + "shape":"EvaluationMetricName", + "documentation":"

The name of the metric. Your human evaluators will see this name in the evaluation UI.

" }, - "failureMessage":{ - "shape":"ErrorMessage", - "documentation":"

Failure message for any issues that the create operation encounters.

" + "description":{ + "shape":"EvaluationMetricDescription", + "documentation":"

An optional description of the metric. Use this parameter to provide more details about the metric.

" }, - "commitmentDuration":{ - "shape":"CommitmentDuration", - "documentation":"

Commitment duration of the provisioned throughput.

" + "ratingMethod":{ + "shape":"EvaluationRatingMethod", + "documentation":"

Choose how you want your human workers to evaluation your model. Valid values for rating methods are ThumbsUpDown, IndividualLikertScale,ComparisonLikertScale, ComparisonChoice, and ComparisonRank

" + } + }, + "documentation":"

In a model evaluation job that uses human workers you must define the name of the metric, and how you want that metric rated ratingMethod, and an optional description of the metric.

" + }, + "HumanEvaluationCustomMetrics":{ + "type":"list", + "member":{"shape":"HumanEvaluationCustomMetric"}, + "max":10, + "min":1 + }, + "HumanTaskInstructions":{ + "type":"string", + "max":5000, + "min":1, + "pattern":"[\\S\\s]+", + "sensitive":true + }, + "HumanWorkflowConfig":{ + "type":"structure", + "required":["flowDefinitionArn"], + "members":{ + "flowDefinitionArn":{ + "shape":"SageMakerFlowDefinitionArn", + "documentation":"

The Amazon Resource Number (ARN) for the flow definition

" }, - "commitmentExpirationTime":{ - "shape":"Timestamp", - "documentation":"

Commitment expiration time for the provisioned throughput.

" + "instructions":{ + "shape":"HumanTaskInstructions", + "documentation":"

Instructions for the flow definition

" } - } + }, + "documentation":"

Contains SageMakerFlowDefinition object. The object is used to specify the prompt dataset, task type, rating method and metric names.

" }, "IdempotencyToken":{ "type":"string", @@ -1205,13 +2840,13 @@ }, "baseModelArnEquals":{ "shape":"ModelArn", - "documentation":"

Return custom models only if the base model ARN matches this parameter.

", + "documentation":"

Return custom models only if the base model Amazon Resource Name (ARN) matches this parameter.

", "location":"querystring", "locationName":"baseModelArnEquals" }, "foundationModelArnEquals":{ "shape":"FoundationModelArn", - "documentation":"

Return custom models only if the foundation model ARN matches this parameter.

", + "documentation":"

Return custom models only if the foundation model Amazon Resource Name (ARN) matches this parameter.

", "location":"querystring", "locationName":"foundationModelArnEquals" }, @@ -1254,30 +2889,96 @@ } } }, + "ListEvaluationJobsRequest":{ + "type":"structure", + "members":{ + "creationTimeAfter":{ + "shape":"Timestamp", + "documentation":"

A filter that includes model evaluation jobs created after the time specified.

", + "location":"querystring", + "locationName":"creationTimeAfter" + }, + "creationTimeBefore":{ + "shape":"Timestamp", + "documentation":"

A filter that includes model evaluation jobs created prior to the time specified.

", + "location":"querystring", + "locationName":"creationTimeBefore" + }, + "statusEquals":{ + "shape":"EvaluationJobStatus", + "documentation":"

Only return jobs where the status condition is met.

", + "location":"querystring", + "locationName":"statusEquals" + }, + "nameContains":{ + "shape":"EvaluationJobName", + "documentation":"

Query parameter string for model evaluation job names.

", + "location":"querystring", + "locationName":"nameContains" + }, + "maxResults":{ + "shape":"MaxResults", + "documentation":"

The maximum number of results to return.

", + "location":"querystring", + "locationName":"maxResults" + }, + "nextToken":{ + "shape":"PaginationToken", + "documentation":"

Continuation token from the previous response, for Amazon Bedrock to list the next set of results.

", + "location":"querystring", + "locationName":"nextToken" + }, + "sortBy":{ + "shape":"SortJobsBy", + "documentation":"

Allows you to sort model evaluation jobs by when they were created.

", + "location":"querystring", + "locationName":"sortBy" + }, + "sortOrder":{ + "shape":"SortOrder", + "documentation":"

How you want the order of jobs sorted.

", + "location":"querystring", + "locationName":"sortOrder" + } + } + }, + "ListEvaluationJobsResponse":{ + "type":"structure", + "members":{ + "nextToken":{ + "shape":"PaginationToken", + "documentation":"

Continuation token from the previous response, for Amazon Bedrock to list the next set of results.

" + }, + "jobSummaries":{ + "shape":"EvaluationSummaries", + "documentation":"

A summary of the model evaluation jobs.

" + } + } + }, "ListFoundationModelsRequest":{ "type":"structure", "members":{ "byProvider":{ "shape":"Provider", - "documentation":"

A Amazon Bedrock model provider.

", + "documentation":"

Return models belonging to the model provider that you specify.

", "location":"querystring", "locationName":"byProvider" }, "byCustomizationType":{ "shape":"ModelCustomization", - "documentation":"

List by customization type.

", + "documentation":"

Return models that support the customization type that you specify. For more information, see Custom models in the Amazon Bedrock User Guide.

", "location":"querystring", "locationName":"byCustomizationType" }, "byOutputModality":{ "shape":"ModelModality", - "documentation":"

List by output modality type.

", + "documentation":"

Return models that support the output modality that you specify.

", "location":"querystring", "locationName":"byOutputModality" }, "byInferenceType":{ "shape":"InferenceType", - "documentation":"

List by inference type.

", + "documentation":"

Return models that support the inference type that you specify. For more information, see Provisioned Throughput in the Amazon Bedrock User Guide.

", "location":"querystring", "locationName":"byInferenceType" } @@ -1292,6 +2993,43 @@ } } }, + "ListGuardrailsRequest":{ + "type":"structure", + "members":{ + "guardrailIdentifier":{ + "shape":"GuardrailIdentifier", + "documentation":"

The unique identifier of the guardrail.

", + "location":"querystring", + "locationName":"guardrailIdentifier" + }, + "maxResults":{ + "shape":"MaxResults", + "documentation":"

The maximum number of results to return in the response.

", + "location":"querystring", + "locationName":"maxResults" + }, + "nextToken":{ + "shape":"PaginationToken", + "documentation":"

If there are more results than were returned in the response, the response returns a nextToken that you can send in another ListGuardrails request to see the next batch of results.

", + "location":"querystring", + "locationName":"nextToken" + } + } + }, + "ListGuardrailsResponse":{ + "type":"structure", + "required":["guardrails"], + "members":{ + "guardrails":{ + "shape":"GuardrailSummaries", + "documentation":"

A list of objects, each of which contains details about a guardrail.

" + }, + "nextToken":{ + "shape":"PaginationToken", + "documentation":"

If there are more results than were returned in the response, the response returns a nextToken that you can send in another ListGuardrails request to see the next batch of results.

" + } + } + }, "ListModelCustomizationJobsRequest":{ "type":"structure", "members":{ @@ -1363,49 +3101,49 @@ "members":{ "creationTimeAfter":{ "shape":"Timestamp", - "documentation":"

Return provisioned capacities created after the specified time.

", + "documentation":"

A filter that returns Provisioned Throughputs created after the specified time.

", "location":"querystring", "locationName":"creationTimeAfter" }, "creationTimeBefore":{ "shape":"Timestamp", - "documentation":"

Return provisioned capacities created before the specified time.

", + "documentation":"

A filter that returns Provisioned Throughputs created before the specified time.

", "location":"querystring", "locationName":"creationTimeBefore" }, "statusEquals":{ "shape":"ProvisionedModelStatus", - "documentation":"

Return the list of provisioned capacities that match the specified status.

", + "documentation":"

A filter that returns Provisioned Throughputs if their statuses matches the value that you specify.

", "location":"querystring", "locationName":"statusEquals" }, "modelArnEquals":{ "shape":"ModelArn", - "documentation":"

Return the list of provisioned capacities where their model ARN is equal to this parameter.

", + "documentation":"

A filter that returns Provisioned Throughputs whose model Amazon Resource Name (ARN) is equal to the value that you specify.

", "location":"querystring", "locationName":"modelArnEquals" }, "nameContains":{ "shape":"ProvisionedModelName", - "documentation":"

Return the list of provisioned capacities if their name contains these characters.

", + "documentation":"

A filter that returns Provisioned Throughputs if their name contains the expression that you specify.

", "location":"querystring", "locationName":"nameContains" }, "maxResults":{ "shape":"MaxResults", - "documentation":"

THe maximum number of results to return in the response.

", + "documentation":"

THe maximum number of results to return in the response. If there are more results than the number you specified, the response returns a nextToken value. To see the next batch of results, send the nextToken value in another list request.

", "location":"querystring", "locationName":"maxResults" }, "nextToken":{ "shape":"PaginationToken", - "documentation":"

Continuation token from the previous response, for Amazon Bedrock to list the next set of results.

", + "documentation":"

If there are more results than the number you specified in the maxResults field, the response returns a nextToken value. To see the next batch of results, specify the nextToken value in this field.

", "location":"querystring", "locationName":"nextToken" }, "sortBy":{ "shape":"SortByProvisionedModels", - "documentation":"

The field to sort by in the returned list of provisioned capacities.

", + "documentation":"

The field by which to sort the returned list of Provisioned Throughputs.

", "location":"querystring", "locationName":"sortBy" }, @@ -1422,11 +3160,11 @@ "members":{ "nextToken":{ "shape":"PaginationToken", - "documentation":"

Continuation token for the next request to list the next set of results.

" + "documentation":"

If there are more results than the number you specified in the maxResults field, this value is returned. To see the next batch of results, include this value in the nextToken field in another list request.

" }, "provisionedModelSummaries":{ "shape":"ProvisionedModelSummaries", - "documentation":"

List of summaries, one for each provisioned throughput in the response.

" + "documentation":"

A list of summaries, one for each Provisioned Throughput in the response.

" } } }, @@ -1436,7 +3174,7 @@ "members":{ "resourceARN":{ "shape":"TaggableResourcesArn", - "documentation":"

The ARN of the resource.

" + "documentation":"

The Amazon Resource Name (ARN) of the resource.

" } } }, @@ -1478,7 +3216,7 @@ "documentation":"

Set to include embeddings data in the log delivery.

" } }, - "documentation":"

Configuration fields for invokation logging.

" + "documentation":"

Configuration fields for invocation logging.

" }, "MaxResults":{ "type":"integer", @@ -1546,11 +3284,11 @@ "members":{ "jobArn":{ "shape":"ModelCustomizationJobArn", - "documentation":"

ARN of the customization job.

" + "documentation":"

Amazon Resource Name (ARN) of the customization job.

" }, "baseModelArn":{ "shape":"ModelArn", - "documentation":"

ARN of the base model.

" + "documentation":"

Amazon Resource Name (ARN) of the base model.

" }, "jobName":{ "shape":"JobName", @@ -1574,7 +3312,7 @@ }, "customModelArn":{ "shape":"CustomModelArn", - "documentation":"

ARN of the custom model.

" + "documentation":"

Amazon Resource Name (ARN) of the custom model.

" }, "customModelName":{ "shape":"CustomModelName", @@ -1689,54 +3427,54 @@ "members":{ "provisionedModelName":{ "shape":"ProvisionedModelName", - "documentation":"

The name of the provisioned throughput.

" + "documentation":"

The name of the Provisioned Throughput.

" }, "provisionedModelArn":{ "shape":"ProvisionedModelArn", - "documentation":"

The ARN of the provisioned throughput.

" + "documentation":"

The Amazon Resource Name (ARN) of the Provisioned Throughput.

" }, "modelArn":{ "shape":"ModelArn", - "documentation":"

The ARN of the model associated with this provisioned throughput.

" + "documentation":"

The Amazon Resource Name (ARN) of the model associated with the Provisioned Throughput.

" }, "desiredModelArn":{ "shape":"ModelArn", - "documentation":"

Desired model ARN.

" + "documentation":"

The Amazon Resource Name (ARN) of the model requested to be associated to this Provisioned Throughput. This value differs from the modelArn if updating hasn't completed.

" }, "foundationModelArn":{ "shape":"FoundationModelArn", - "documentation":"

Foundation model ARN.

" + "documentation":"

The Amazon Resource Name (ARN) of the base model for which the Provisioned Throughput was created, or of the base model that the custom model for which the Provisioned Throughput was created was customized.

" }, "modelUnits":{ "shape":"PositiveInteger", - "documentation":"

The number of model units allocated.

" + "documentation":"

The number of model units allocated to the Provisioned Throughput.

" }, "desiredModelUnits":{ "shape":"PositiveInteger", - "documentation":"

Desired model units.

" + "documentation":"

The number of model units that was requested to be allocated to the Provisioned Throughput.

" }, "status":{ "shape":"ProvisionedModelStatus", - "documentation":"

Status of the provisioned throughput.

" + "documentation":"

The status of the Provisioned Throughput.

" }, "commitmentDuration":{ "shape":"CommitmentDuration", - "documentation":"

Commitment duration for the provisioned throughput.

" + "documentation":"

The duration for which the Provisioned Throughput was committed.

" }, "commitmentExpirationTime":{ "shape":"Timestamp", - "documentation":"

Commitment expiration time for the provisioned throughput.

" + "documentation":"

The timestamp for when the commitment term of the Provisioned Throughput expires.

" }, "creationTime":{ "shape":"Timestamp", - "documentation":"

The time that this provisioned throughput was created.

" + "documentation":"

The time that the Provisioned Throughput was created.

" }, "lastModifiedTime":{ "shape":"Timestamp", - "documentation":"

The time that this provisioned throughput was last modified.

" + "documentation":"

The time that the Provisioned Throughput was last modified.

" } }, - "documentation":"

Set of fields associated with a provisioned throughput.

" + "documentation":"

A summary of information about a Provisioned Throughput.

This data type is used in the following API operations:

" }, "PutModelInvocationLoggingConfigurationRequest":{ "type":"structure", @@ -1758,7 +3496,7 @@ "members":{ "message":{"shape":"NonBlankString"} }, - "documentation":"

The specified resource ARN was not found. Check the ARN and try your request again.

", + "documentation":"

The specified resource Amazon Resource Name (ARN) was not found. Check the Amazon Resource Name (ARN) and try your request again.

", "error":{ "httpStatusCode":404, "senderFault":true @@ -1792,6 +3530,12 @@ "min":1, "pattern":"s3://[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9](/.*)?" }, + "SageMakerFlowDefinitionArn":{ + "type":"string", + "max":1024, + "min":0, + "pattern":"arn:aws(-[^:]+)?:sagemaker:[a-z0-9-]{1,20}:[0-9]{12}:flow-definition/.*" + }, "SecurityGroupId":{ "type":"string", "max":32, @@ -1835,6 +3579,23 @@ "Descending" ] }, + "StopEvaluationJobRequest":{ + "type":"structure", + "required":["jobIdentifier"], + "members":{ + "jobIdentifier":{ + "shape":"EvaluationJobIdentifier", + "documentation":"

The ARN of the model evaluation job you want to stop.

", + "location":"uri", + "locationName":"jobIdentifier" + } + } + }, + "StopEvaluationJobResponse":{ + "type":"structure", + "members":{ + } + }, "StopModelCustomizationJobRequest":{ "type":"structure", "required":["jobIdentifier"], @@ -1910,7 +3671,7 @@ "members":{ "resourceARN":{ "shape":"TaggableResourcesArn", - "documentation":"

The ARN of the resource to tag.

" + "documentation":"

The Amazon Resource Name (ARN) of the resource to tag.

" }, "tags":{ "shape":"TagList", @@ -1933,7 +3694,7 @@ "type":"string", "max":1011, "min":20, - "pattern":".*(^[a-zA-Z0-9][a-zA-Z0-9\\-]*$)|(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:([0-9]{12}|)((:(fine-tuning-job|model-customization-job|custom-model)/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}(/[a-z0-9]{12})$)|(:provisioned-model/[a-z0-9]{12}$))).*" + "pattern":".*(^[a-zA-Z0-9][a-zA-Z0-9\\-]*$)|(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:([0-9]{12}|)((:(fine-tuning-job|model-customization-job|custom-model)/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}(/[a-z0-9]{12})$)|(:provisioned-model/[a-z0-9]{12}$)|(:guardrail/[a-z0-9]+$)|(:evaluation-job/[a-z0-9]{12}$))).*" }, "ThrottlingException":{ "type":"structure", @@ -1997,7 +3758,7 @@ "members":{ "resourceARN":{ "shape":"TaggableResourcesArn", - "documentation":"

The ARN of the resource to untag.

" + "documentation":"

The Amazon Resource Name (ARN) of the resource to untag.

" }, "tagKeys":{ "shape":"TagKeyList", @@ -2010,23 +3771,103 @@ "members":{ } }, + "UpdateGuardrailRequest":{ + "type":"structure", + "required":[ + "guardrailIdentifier", + "name", + "blockedInputMessaging", + "blockedOutputsMessaging" + ], + "members":{ + "guardrailIdentifier":{ + "shape":"GuardrailIdentifier", + "documentation":"

The unique identifier of the guardrail

", + "location":"uri", + "locationName":"guardrailIdentifier" + }, + "name":{ + "shape":"GuardrailName", + "documentation":"

A name for the guardrail.

" + }, + "description":{ + "shape":"GuardrailDescription", + "documentation":"

A description of the guardrail.

" + }, + "topicPolicyConfig":{ + "shape":"GuardrailTopicPolicyConfig", + "documentation":"

The topic policy to configure for the guardrail.

" + }, + "contentPolicyConfig":{ + "shape":"GuardrailContentPolicyConfig", + "documentation":"

The content policy to configure for the guardrail.

" + }, + "wordPolicyConfig":{ + "shape":"GuardrailWordPolicyConfig", + "documentation":"

The word policy to configure for the guardrail.

" + }, + "sensitiveInformationPolicyConfig":{ + "shape":"GuardrailSensitiveInformationPolicyConfig", + "documentation":"

The sensitive information policy to configure for the guardrail.

" + }, + "blockedInputMessaging":{ + "shape":"GuardrailBlockedMessaging", + "documentation":"

The message to return when the guardrail blocks a prompt.

" + }, + "blockedOutputsMessaging":{ + "shape":"GuardrailBlockedMessaging", + "documentation":"

The message to return when the guardrail blocks a model response.

" + }, + "kmsKeyId":{ + "shape":"KmsKeyId", + "documentation":"

The ARN of the KMS key with which to encrypt the guardrail.

" + } + } + }, + "UpdateGuardrailResponse":{ + "type":"structure", + "required":[ + "guardrailId", + "guardrailArn", + "version", + "updatedAt" + ], + "members":{ + "guardrailId":{ + "shape":"GuardrailId", + "documentation":"

The unique identifier of the guardrail

" + }, + "guardrailArn":{ + "shape":"GuardrailArn", + "documentation":"

The ARN of the guardrail that was created.

" + }, + "version":{ + "shape":"GuardrailDraftVersion", + "documentation":"

The version of the guardrail.

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

The date and time at which the guardrail was updated.

" + } + } + }, "UpdateProvisionedModelThroughputRequest":{ "type":"structure", "required":["provisionedModelId"], "members":{ "provisionedModelId":{ "shape":"ProvisionedModelId", - "documentation":"

The ARN or name of the provisioned throughput to update.

", + "documentation":"

The Amazon Resource Name (ARN) or name of the Provisioned Throughput to update.

", "location":"uri", "locationName":"provisionedModelId" }, "desiredProvisionedModelName":{ "shape":"ProvisionedModelName", - "documentation":"

The new name for this provisioned throughput.

" + "documentation":"

The new name for this Provisioned Throughput.

" }, "desiredModelId":{ "shape":"ModelIdentifier", - "documentation":"

The ARN of the new model to associate with this provisioned throughput.

" + "documentation":"

The Amazon Resource Name (ARN) of the new model to associate with this Provisioned Throughput. You can't specify this field if this Provisioned Throughput is associated with a base model.

If this Provisioned Throughput is associated with a custom model, you can specify one of the following options:

  • The base model from which the custom model was customized.

  • Another custom model that was customized from the same base model as the custom model.

" } } }, @@ -2108,5 +3949,5 @@ "documentation":"

VPC configuration.

" } }, - "documentation":"

Describes the API operations for creating and managing Amazon Bedrock models.

" + "documentation":"

Describes the API operations for creating, managing, fine-turning, and evaluating Amazon Bedrock models.

" } diff --git a/services/bedrockagent/pom.xml b/services/bedrockagent/pom.xml index 7bc58f0f1189..09ff557bec0e 100644 --- a/services/bedrockagent/pom.xml +++ b/services/bedrockagent/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 bedrockagent AWS Java SDK :: Services :: Bedrock Agent diff --git a/services/bedrockagent/src/main/resources/codegen-resources/service-2.json b/services/bedrockagent/src/main/resources/codegen-resources/service-2.json index 3f1edd88b2cd..767d0eb30789 100644 --- a/services/bedrockagent/src/main/resources/codegen-resources/service-2.json +++ b/services/bedrockagent/src/main/resources/codegen-resources/service-2.json @@ -1527,6 +1527,12 @@ "type":"boolean", "box":true }, + "BucketOwnerAccountId":{ + "type":"string", + "max":12, + "min":12, + "pattern":"^[0-9]{12}$" + }, "ChunkingConfiguration":{ "type":"structure", "required":["chunkingStrategy"], @@ -1754,6 +1760,10 @@ "documentation":"

A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see Ensuring idempotency.

", "idempotencyToken":true }, + "dataDeletionPolicy":{ + "shape":"DataDeletionPolicy", + "documentation":"

The deletion policy for the requested data source

" + }, "dataSourceConfiguration":{ "shape":"DataSourceConfiguration", "documentation":"

Contains metadata about where the data source is stored.

" @@ -1853,6 +1863,13 @@ "type":"string", "enum":["RETURN_CONTROL"] }, + "DataDeletionPolicy":{ + "type":"string", + "enum":[ + "RETAIN", + "DELETE" + ] + }, "DataSource":{ "type":"structure", "required":[ @@ -1869,6 +1886,10 @@ "shape":"DateTimestamp", "documentation":"

The time at which the data source was created.

" }, + "dataDeletionPolicy":{ + "shape":"DataDeletionPolicy", + "documentation":"

The deletion policy for the data source.

" + }, "dataSourceConfiguration":{ "shape":"DataSourceConfiguration", "documentation":"

Contains details about how the data source is stored.

" @@ -1881,6 +1902,10 @@ "shape":"Description", "documentation":"

The description of the data source.

" }, + "failureReasons":{ + "shape":"FailureReasons", + "documentation":"

The details of the failure reasons related to the data source.

" + }, "knowledgeBaseId":{ "shape":"Id", "documentation":"

The unique identifier of the knowledge base to which the data source belongs.

" @@ -1927,7 +1952,8 @@ "type":"string", "enum":[ "AVAILABLE", - "DELETING" + "DELETING", + "DELETE_UNSUCCESSFUL" ] }, "DataSourceSummaries":{ @@ -2968,7 +2994,8 @@ "ACTIVE", "DELETING", "UPDATING", - "FAILED" + "FAILED", + "DELETE_UNSUCCESSFUL" ] }, "KnowledgeBaseStorageType":{ @@ -3815,6 +3842,10 @@ "shape":"S3BucketArn", "documentation":"

The Amazon Resource Name (ARN) of the bucket that contains the data source.

" }, + "bucketOwnerAccountId":{ + "shape":"BucketOwnerAccountId", + "documentation":"

The account ID for the owner of the S3 bucket.

" + }, "inclusionPrefixes":{ "shape":"S3Prefixes", "documentation":"

A list of S3 prefixes that define the object containing the data sources. For more information, see Organizing objects using prefixes.

" @@ -4310,6 +4341,10 @@ "name" ], "members":{ + "dataDeletionPolicy":{ + "shape":"DataDeletionPolicy", + "documentation":"

The data deletion policy of the updated data source.

" + }, "dataSourceConfiguration":{ "shape":"DataSourceConfiguration", "documentation":"

Contains details about the storage configuration of the data source.

" diff --git a/services/bedrockagentruntime/pom.xml b/services/bedrockagentruntime/pom.xml index aae5b117bac2..ddbd84ac09c5 100644 --- a/services/bedrockagentruntime/pom.xml +++ b/services/bedrockagentruntime/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 bedrockagentruntime AWS Java SDK :: Services :: Bedrock Agent Runtime diff --git a/services/bedrockagentruntime/src/main/resources/codegen-resources/service-2.json b/services/bedrockagentruntime/src/main/resources/codegen-resources/service-2.json index 88806cdc81a8..41e066a5674c 100644 --- a/services/bedrockagentruntime/src/main/resources/codegen-resources/service-2.json +++ b/services/bedrockagentruntime/src/main/resources/codegen-resources/service-2.json @@ -291,6 +291,35 @@ "type":"boolean", "box":true }, + "ByteContentBlob":{ + "type":"blob", + "max":10485760, + "min":1, + "sensitive":true + }, + "ByteContentDoc":{ + "type":"structure", + "required":[ + "contentType", + "data", + "identifier" + ], + "members":{ + "contentType":{ + "shape":"ContentType", + "documentation":"

The MIME type of the document contained in the wrapper object.

" + }, + "data":{ + "shape":"ByteContentBlob", + "documentation":"

The byte value of the file to upload, encoded as a Base-64 string.

" + }, + "identifier":{ + "shape":"Identifier", + "documentation":"

The file name of the document contained in the wrapper object.

" + } + }, + "documentation":"

This property contains the document to chat with, along with its attributes.

" + }, "Citation":{ "type":"structure", "members":{ @@ -336,6 +365,10 @@ "key":{"shape":"String"}, "value":{"shape":"Parameters"} }, + "ContentType":{ + "type":"string", + "pattern":"[a-z]{1,20}/.{1,20}" + }, "CreationMode":{ "type":"string", "enum":[ @@ -363,6 +396,70 @@ "type":"double", "box":true }, + "ExternalSource":{ + "type":"structure", + "required":["sourceType"], + "members":{ + "byteContent":{ + "shape":"ByteContentDoc", + "documentation":"

The identifier, contentType, and data of the external source wrapper object.

" + }, + "s3Location":{ + "shape":"S3ObjectDoc", + "documentation":"

The S3 location of the external source wrapper object.

" + }, + "sourceType":{ + "shape":"ExternalSourceType", + "documentation":"

The source type of the external source wrapper object.

" + } + }, + "documentation":"

The unique external source of the content contained in the wrapper object.

" + }, + "ExternalSourceType":{ + "type":"string", + "enum":[ + "S3", + "BYTE_CONTENT" + ] + }, + "ExternalSources":{ + "type":"list", + "member":{"shape":"ExternalSource"}, + "max":1, + "min":1 + }, + "ExternalSourcesGenerationConfiguration":{ + "type":"structure", + "members":{ + "promptTemplate":{ + "shape":"PromptTemplate", + "documentation":"

Contain the textPromptTemplate string for the external source wrapper object.

" + } + }, + "documentation":"

Contains the generation configuration of the external source wrapper object.

" + }, + "ExternalSourcesRetrieveAndGenerateConfiguration":{ + "type":"structure", + "required":[ + "modelArn", + "sources" + ], + "members":{ + "generationConfiguration":{ + "shape":"ExternalSourcesGenerationConfiguration", + "documentation":"

The prompt used with the external source wrapper object with the retrieveAndGenerate function.

" + }, + "modelArn":{ + "shape":"BedrockModelArn", + "documentation":"

The modelArn used with the external source wrapper object in the retrieveAndGenerate function.

" + }, + "sources":{ + "shape":"ExternalSources", + "documentation":"

The document used with the external source wrapper object in the retrieveAndGenerate function.

" + } + }, + "documentation":"

The configurations of the external source wrapper object in the retrieveAndGenerate function.

" + }, "FailureReasonString":{ "type":"string", "sensitive":true @@ -513,6 +610,12 @@ }, "documentation":"

Contains configurations for response generation based on the knowledge base query results.

This data type is used in the following API operations:

" }, + "Identifier":{ + "type":"string", + "max":1024, + "min":1, + "sensitive":true + }, "InferenceConfiguration":{ "type":"structure", "members":{ @@ -1375,6 +1478,10 @@ "type":"structure", "required":["type"], "members":{ + "externalSourcesConfiguration":{ + "shape":"ExternalSourcesRetrieveAndGenerateConfiguration", + "documentation":"

The configuration used with the external source wrapper object in the retrieveAndGenerate function.

" + }, "knowledgeBaseConfiguration":{ "shape":"KnowledgeBaseRetrieveAndGenerateConfiguration", "documentation":"

Contains details about the resource being queried.

" @@ -1471,7 +1578,10 @@ }, "RetrieveAndGenerateType":{ "type":"string", - "enum":["KNOWLEDGE_BASE"] + "enum":[ + "KNOWLEDGE_BASE", + "EXTERNAL_SOURCES" + ] }, "RetrieveRequest":{ "type":"structure", @@ -1558,6 +1668,23 @@ "event":true, "sensitive":true }, + "S3ObjectDoc":{ + "type":"structure", + "required":["uri"], + "members":{ + "uri":{ + "shape":"S3Uri", + "documentation":"

The file location of the S3 wrapper object.

" + } + }, + "documentation":"

The unique wrapper object of the document from the S3 location.

" + }, + "S3Uri":{ + "type":"string", + "max":1024, + "min":1, + "pattern":"^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/.{1,1024}$" + }, "SearchType":{ "type":"string", "enum":[ diff --git a/services/bedrockruntime/pom.xml b/services/bedrockruntime/pom.xml index a093cbed4dfe..6d74f3738bfd 100644 --- a/services/bedrockruntime/pom.xml +++ b/services/bedrockruntime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 bedrockruntime AWS Java SDK :: Services :: Bedrock Runtime diff --git a/services/bedrockruntime/src/main/resources/codegen-resources/service-2.json b/services/bedrockruntime/src/main/resources/codegen-resources/service-2.json index e782a198751c..5d545913e0e2 100644 --- a/services/bedrockruntime/src/main/resources/codegen-resources/service-2.json +++ b/services/bedrockruntime/src/main/resources/codegen-resources/service-2.json @@ -32,7 +32,7 @@ {"shape":"ServiceQuotaExceededException"}, {"shape":"ModelErrorException"} ], - "documentation":"

Invokes the specified Bedrock model to run inference using the input provided in the request body. You use InvokeModel to run inference for text models, image models, and embedding models.

For more information, see Run inference in the Bedrock User Guide.

For example requests, see Examples (after the Errors section).

" + "documentation":"

Invokes the specified Amazon Bedrock model to run inference using the prompt and inference parameters provided in the request body. You use model inference to generate text, images, and embeddings.

For example code, see Invoke model code examples in the Amazon Bedrock User Guide.

This operation requires permission for the bedrock:InvokeModel action.

" }, "InvokeModelWithResponseStream":{ "name":"InvokeModelWithResponseStream", @@ -55,7 +55,7 @@ {"shape":"ServiceQuotaExceededException"}, {"shape":"ModelErrorException"} ], - "documentation":"

Invoke the specified Bedrock model to run inference using the input provided. Return the response in a stream.

For more information, see Run inference in the Bedrock User Guide.

For an example request and response, see Examples (after the Errors section).

" + "documentation":"

Invoke the specified Amazon Bedrock model to run inference using the prompt and inference parameters provided in the request body. The response is returned in a stream.

To see if a model supports streaming, call GetFoundationModel and check the responseStreamingSupported field in the response.

The CLI doesn't support InvokeModelWithResponseStream.

For example code, see Invoke model with streaming code example in the Amazon Bedrock User Guide.

This operation requires permissions to perform the bedrock:InvokeModelWithResponseStream action.

" } }, "shapes":{ @@ -77,6 +77,16 @@ "min":0, "sensitive":true }, + "GuardrailIdentifier":{ + "type":"string", + "max":2048, + "min":0, + "pattern":"(([a-z0-9]+)|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+))" + }, + "GuardrailVersion":{ + "type":"string", + "pattern":"(([1-9][0-9]{0,7})|(DRAFT))" + }, "InternalServerException":{ "type":"structure", "members":{ @@ -102,7 +112,7 @@ "members":{ "body":{ "shape":"Body", - "documentation":"

Input data in the format specified in the content-type request header. To see the format and content of this field for different models, refer to Inference parameters.

" + "documentation":"

The prompt and inference parameters in the format specified in the contentType in the header. To see the format and content of the request and response bodies for different models, refer to Inference parameters. For more information, see Run inference in the Bedrock User Guide.

" }, "contentType":{ "shape":"MimeType", @@ -118,9 +128,27 @@ }, "modelId":{ "shape":"InvokeModelIdentifier", - "documentation":"

Identifier of the model.

", + "documentation":"

The unique identifier of the model to invoke to run inference.

The modelId to provide depends on the type of model that you use:

", "location":"uri", "locationName":"modelId" + }, + "trace":{ + "shape":"Trace", + "documentation":"

Specifies whether to enable or disable the Bedrock trace. If enabled, you can see the full Bedrock trace.

", + "location":"header", + "locationName":"X-Amzn-Bedrock-Trace" + }, + "guardrailIdentifier":{ + "shape":"GuardrailIdentifier", + "documentation":"

The unique identifier of the guardrail that you want to use. If you don't provide a value, no guardrail is applied to the invocation.

An error will be thrown in the following situations.

  • You don't provide a guardrail identifier but you specify the amazon-bedrock-guardrailConfig field in the request body.

  • You enable the guardrail but the contentType isn't application/json.

  • You provide a guardrail identifier, but guardrailVersion isn't specified.

", + "location":"header", + "locationName":"X-Amzn-Bedrock-GuardrailIdentifier" + }, + "guardrailVersion":{ + "shape":"GuardrailVersion", + "documentation":"

The version number for the guardrail. The value can also be DRAFT.

", + "location":"header", + "locationName":"X-Amzn-Bedrock-GuardrailVersion" } }, "payload":"body" @@ -134,7 +162,7 @@ "members":{ "body":{ "shape":"Body", - "documentation":"

Inference response from the model in the format specified in the content-type header field. To see the format and content of this field for different models, refer to Inference parameters.

" + "documentation":"

Inference response from the model in the format specified in the contentType header. To see the format and content of the request and response bodies for different models, refer to Inference parameters.

" }, "contentType":{ "shape":"MimeType", @@ -154,7 +182,7 @@ "members":{ "body":{ "shape":"Body", - "documentation":"

Inference input in the format specified by the content-type. To see the format and content of this field for different models, refer to Inference parameters.

" + "documentation":"

The prompt and inference parameters in the format specified in the contentType in the header. To see the format and content of the request and response bodies for different models, refer to Inference parameters. For more information, see Run inference in the Bedrock User Guide.

" }, "contentType":{ "shape":"MimeType", @@ -170,9 +198,27 @@ }, "modelId":{ "shape":"InvokeModelIdentifier", - "documentation":"

Id of the model to invoke using the streaming request.

", + "documentation":"

The unique identifier of the model to invoke to run inference.

The modelId to provide depends on the type of model that you use:

", "location":"uri", "locationName":"modelId" + }, + "trace":{ + "shape":"Trace", + "documentation":"

Specifies whether to enable or disable the Bedrock trace. If enabled, you can see the full Bedrock trace.

", + "location":"header", + "locationName":"X-Amzn-Bedrock-Trace" + }, + "guardrailIdentifier":{ + "shape":"GuardrailIdentifier", + "documentation":"

The unique identifier of the guardrail that you want to use. If you don't provide a value, no guardrail is applied to the invocation.

An error is thrown in the following situations.

  • You don't provide a guardrail identifier but you specify the amazon-bedrock-guardrailConfig field in the request body.

  • You enable the guardrail but the contentType isn't application/json.

  • You provide a guardrail identifier, but guardrailVersion isn't specified.

", + "location":"header", + "locationName":"X-Amzn-Bedrock-GuardrailIdentifier" + }, + "guardrailVersion":{ + "shape":"GuardrailVersion", + "documentation":"

The version number for the guardrail. The value can also be DRAFT.

", + "location":"header", + "locationName":"X-Amzn-Bedrock-GuardrailVersion" } }, "payload":"body" @@ -186,7 +232,7 @@ "members":{ "body":{ "shape":"ResponseStream", - "documentation":"

Inference response from the model in the format specified by Content-Type. To see the format and content of this field for different models, refer to Inference parameters.

" + "documentation":"

Inference response from the model in the format specified by the contentType header. To see the format and content of this field for different models, refer to Inference parameters.

" }, "contentType":{ "shape":"MimeType", @@ -243,7 +289,7 @@ "documentation":"

The original message.

" } }, - "documentation":"

An error occurred while streaming the response.

", + "documentation":"

An error occurred while streaming the response. Retry your request.

", "error":{ "httpStatusCode":424, "senderFault":true @@ -303,11 +349,26 @@ "shape":"PayloadPart", "documentation":"

Content included in the response.

" }, - "internalServerException":{"shape":"InternalServerException"}, - "modelStreamErrorException":{"shape":"ModelStreamErrorException"}, - "validationException":{"shape":"ValidationException"}, - "throttlingException":{"shape":"ThrottlingException"}, - "modelTimeoutException":{"shape":"ModelTimeoutException"} + "internalServerException":{ + "shape":"InternalServerException", + "documentation":"

An internal server error occurred. Retry your request.

" + }, + "modelStreamErrorException":{ + "shape":"ModelStreamErrorException", + "documentation":"

An error occurred while streaming the response. Retry your request.

" + }, + "validationException":{ + "shape":"ValidationException", + "documentation":"

Input validation failed. Check your request parameters and retry the request.

" + }, + "throttlingException":{ + "shape":"ThrottlingException", + "documentation":"

The number or frequency of requests exceeds the limit. Resubmit your request later.

" + }, + "modelTimeoutException":{ + "shape":"ModelTimeoutException", + "documentation":"

The request took too long to process. Processing time exceeded the model timeout length.

" + } }, "documentation":"

Definition of content in the response stream.

", "eventstream":true @@ -342,6 +403,13 @@ }, "exception":true }, + "Trace":{ + "type":"string", + "enum":[ + "ENABLED", + "DISABLED" + ] + }, "ValidationException":{ "type":"structure", "members":{ @@ -355,5 +423,5 @@ "exception":true } }, - "documentation":"

Describes the API operations for running inference using Bedrock models.

" + "documentation":"

Describes the API operations for running inference using Amazon Bedrock models.

" } diff --git a/services/billingconductor/pom.xml b/services/billingconductor/pom.xml index e754d843a414..1f756d0dc447 100644 --- a/services/billingconductor/pom.xml +++ b/services/billingconductor/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 billingconductor AWS Java SDK :: Services :: Billingconductor diff --git a/services/braket/pom.xml b/services/braket/pom.xml index 88550c06ac1e..2ddd963e8223 100644 --- a/services/braket/pom.xml +++ b/services/braket/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 braket AWS Java SDK :: Services :: Braket diff --git a/services/budgets/pom.xml b/services/budgets/pom.xml index 32d1cd9d61ca..86519911b1b0 100644 --- a/services/budgets/pom.xml +++ b/services/budgets/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 budgets AWS Java SDK :: Services :: AWS Budgets diff --git a/services/chatbot/pom.xml b/services/chatbot/pom.xml index a8566ec9cccc..4d4b52274592 100644 --- a/services/chatbot/pom.xml +++ b/services/chatbot/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 chatbot AWS Java SDK :: Services :: Chatbot diff --git a/services/chime/pom.xml b/services/chime/pom.xml index b7137f896e94..2ff51f4a560e 100644 --- a/services/chime/pom.xml +++ b/services/chime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 chime AWS Java SDK :: Services :: Chime diff --git a/services/chimesdkidentity/pom.xml b/services/chimesdkidentity/pom.xml index 859aba3f2317..aee3999d4ee1 100644 --- a/services/chimesdkidentity/pom.xml +++ b/services/chimesdkidentity/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 chimesdkidentity AWS Java SDK :: Services :: Chime SDK Identity diff --git a/services/chimesdkmediapipelines/pom.xml b/services/chimesdkmediapipelines/pom.xml index e44972afa3dc..287344e8f10d 100644 --- a/services/chimesdkmediapipelines/pom.xml +++ b/services/chimesdkmediapipelines/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 chimesdkmediapipelines AWS Java SDK :: Services :: Chime SDK Media Pipelines diff --git a/services/chimesdkmeetings/pom.xml b/services/chimesdkmeetings/pom.xml index e71563e55232..18f77f3e7bcc 100644 --- a/services/chimesdkmeetings/pom.xml +++ b/services/chimesdkmeetings/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 chimesdkmeetings AWS Java SDK :: Services :: Chime SDK Meetings diff --git a/services/chimesdkmessaging/pom.xml b/services/chimesdkmessaging/pom.xml index 69fefff69848..94773e6ae980 100644 --- a/services/chimesdkmessaging/pom.xml +++ b/services/chimesdkmessaging/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 chimesdkmessaging AWS Java SDK :: Services :: Chime SDK Messaging diff --git a/services/chimesdkvoice/pom.xml b/services/chimesdkvoice/pom.xml index e8cbf85434c3..31f889916bd8 100644 --- a/services/chimesdkvoice/pom.xml +++ b/services/chimesdkvoice/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 chimesdkvoice AWS Java SDK :: Services :: Chime SDK Voice diff --git a/services/cleanrooms/pom.xml b/services/cleanrooms/pom.xml index a4537cc44b92..55931e72d393 100644 --- a/services/cleanrooms/pom.xml +++ b/services/cleanrooms/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cleanrooms AWS Java SDK :: Services :: Clean Rooms diff --git a/services/cleanroomsml/pom.xml b/services/cleanroomsml/pom.xml index c6c97a66a99f..844f0da0eb85 100644 --- a/services/cleanroomsml/pom.xml +++ b/services/cleanroomsml/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cleanroomsml AWS Java SDK :: Services :: Clean Rooms ML diff --git a/services/cloud9/pom.xml b/services/cloud9/pom.xml index 5f04a6833ae2..e2a66b489d50 100644 --- a/services/cloud9/pom.xml +++ b/services/cloud9/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 cloud9 diff --git a/services/cloudcontrol/pom.xml b/services/cloudcontrol/pom.xml index ea2a22c3742c..924e3938703e 100644 --- a/services/cloudcontrol/pom.xml +++ b/services/cloudcontrol/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudcontrol AWS Java SDK :: Services :: Cloud Control diff --git a/services/clouddirectory/pom.xml b/services/clouddirectory/pom.xml index 5e8dcde4d31c..638ed3831419 100644 --- a/services/clouddirectory/pom.xml +++ b/services/clouddirectory/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 clouddirectory AWS Java SDK :: Services :: Amazon CloudDirectory diff --git a/services/cloudformation/pom.xml b/services/cloudformation/pom.xml index bbd14119563a..c5c9f55ba5c6 100644 --- a/services/cloudformation/pom.xml +++ b/services/cloudformation/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudformation AWS Java SDK :: Services :: AWS CloudFormation diff --git a/services/cloudfront/pom.xml b/services/cloudfront/pom.xml index 13ad46ed4a1c..4f3b9612ceea 100644 --- a/services/cloudfront/pom.xml +++ b/services/cloudfront/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudfront AWS Java SDK :: Services :: Amazon CloudFront diff --git a/services/cloudfrontkeyvaluestore/pom.xml b/services/cloudfrontkeyvaluestore/pom.xml index 1dd53e35dc89..1f7ec39a22fb 100644 --- a/services/cloudfrontkeyvaluestore/pom.xml +++ b/services/cloudfrontkeyvaluestore/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudfrontkeyvaluestore AWS Java SDK :: Services :: Cloud Front Key Value Store diff --git a/services/cloudhsm/pom.xml b/services/cloudhsm/pom.xml index 603bcf40ea38..72b5bdfd2d8f 100644 --- a/services/cloudhsm/pom.xml +++ b/services/cloudhsm/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudhsm AWS Java SDK :: Services :: AWS CloudHSM diff --git a/services/cloudhsmv2/pom.xml b/services/cloudhsmv2/pom.xml index 680c861a8037..c012570a8a71 100644 --- a/services/cloudhsmv2/pom.xml +++ b/services/cloudhsmv2/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 cloudhsmv2 diff --git a/services/cloudsearch/pom.xml b/services/cloudsearch/pom.xml index ce30c4b8423b..584255c86798 100644 --- a/services/cloudsearch/pom.xml +++ b/services/cloudsearch/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudsearch AWS Java SDK :: Services :: Amazon CloudSearch diff --git a/services/cloudsearchdomain/pom.xml b/services/cloudsearchdomain/pom.xml index 29af0bdf242f..20ca35953f2f 100644 --- a/services/cloudsearchdomain/pom.xml +++ b/services/cloudsearchdomain/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudsearchdomain AWS Java SDK :: Services :: Amazon CloudSearch Domain diff --git a/services/cloudtrail/pom.xml b/services/cloudtrail/pom.xml index f5b2cb1dadec..8294f7fc50b1 100644 --- a/services/cloudtrail/pom.xml +++ b/services/cloudtrail/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudtrail AWS Java SDK :: Services :: AWS CloudTrail diff --git a/services/cloudtraildata/pom.xml b/services/cloudtraildata/pom.xml index 7d8bad4d8269..7f53c109ebba 100644 --- a/services/cloudtraildata/pom.xml +++ b/services/cloudtraildata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudtraildata AWS Java SDK :: Services :: Cloud Trail Data diff --git a/services/cloudwatch/pom.xml b/services/cloudwatch/pom.xml index fe70b8e050a9..96815303c79f 100644 --- a/services/cloudwatch/pom.xml +++ b/services/cloudwatch/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudwatch AWS Java SDK :: Services :: Amazon CloudWatch diff --git a/services/cloudwatchevents/pom.xml b/services/cloudwatchevents/pom.xml index 73ce73c04605..5ad4337c6189 100644 --- a/services/cloudwatchevents/pom.xml +++ b/services/cloudwatchevents/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudwatchevents AWS Java SDK :: Services :: Amazon CloudWatch Events diff --git a/services/cloudwatchlogs/pom.xml b/services/cloudwatchlogs/pom.xml index 4444eac59ff8..a37d1f6517b1 100644 --- a/services/cloudwatchlogs/pom.xml +++ b/services/cloudwatchlogs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cloudwatchlogs AWS Java SDK :: Services :: Amazon CloudWatch Logs diff --git a/services/codeartifact/pom.xml b/services/codeartifact/pom.xml index 5b21be790be6..373e45045c77 100644 --- a/services/codeartifact/pom.xml +++ b/services/codeartifact/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codeartifact AWS Java SDK :: Services :: Codeartifact diff --git a/services/codebuild/pom.xml b/services/codebuild/pom.xml index 6dfe30ea483d..cc6958c30d5f 100644 --- a/services/codebuild/pom.xml +++ b/services/codebuild/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codebuild AWS Java SDK :: Services :: AWS Code Build diff --git a/services/codecatalyst/pom.xml b/services/codecatalyst/pom.xml index 0c46f0113b29..3db33888f0f7 100644 --- a/services/codecatalyst/pom.xml +++ b/services/codecatalyst/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codecatalyst AWS Java SDK :: Services :: Code Catalyst diff --git a/services/codecommit/pom.xml b/services/codecommit/pom.xml index a8cddfe567e6..e20ca70d5750 100644 --- a/services/codecommit/pom.xml +++ b/services/codecommit/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codecommit AWS Java SDK :: Services :: AWS CodeCommit diff --git a/services/codeconnections/pom.xml b/services/codeconnections/pom.xml index 1941ee7e74d1..5c86f9951b91 100644 --- a/services/codeconnections/pom.xml +++ b/services/codeconnections/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codeconnections AWS Java SDK :: Services :: Code Connections diff --git a/services/codedeploy/pom.xml b/services/codedeploy/pom.xml index 876bcdce47ca..fca099918fad 100644 --- a/services/codedeploy/pom.xml +++ b/services/codedeploy/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codedeploy AWS Java SDK :: Services :: AWS CodeDeploy diff --git a/services/codeguruprofiler/pom.xml b/services/codeguruprofiler/pom.xml index f36aca38d48a..61a2bbd2241a 100644 --- a/services/codeguruprofiler/pom.xml +++ b/services/codeguruprofiler/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codeguruprofiler AWS Java SDK :: Services :: CodeGuruProfiler diff --git a/services/codegurureviewer/pom.xml b/services/codegurureviewer/pom.xml index 5cf226e38ff8..a54aad7cc045 100644 --- a/services/codegurureviewer/pom.xml +++ b/services/codegurureviewer/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codegurureviewer AWS Java SDK :: Services :: CodeGuru Reviewer diff --git a/services/codegurusecurity/pom.xml b/services/codegurusecurity/pom.xml index 79c297d53ba6..58e998223643 100644 --- a/services/codegurusecurity/pom.xml +++ b/services/codegurusecurity/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codegurusecurity AWS Java SDK :: Services :: Code Guru Security diff --git a/services/codepipeline/pom.xml b/services/codepipeline/pom.xml index c07a716bd1f5..881ca5a3fcad 100644 --- a/services/codepipeline/pom.xml +++ b/services/codepipeline/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codepipeline AWS Java SDK :: Services :: AWS CodePipeline diff --git a/services/codestar/pom.xml b/services/codestar/pom.xml index 1757a1b48153..db4c3c51efd4 100644 --- a/services/codestar/pom.xml +++ b/services/codestar/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codestar AWS Java SDK :: Services :: AWS CodeStar diff --git a/services/codestarconnections/pom.xml b/services/codestarconnections/pom.xml index 6ee348c74f63..84ae58cacdfe 100644 --- a/services/codestarconnections/pom.xml +++ b/services/codestarconnections/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codestarconnections AWS Java SDK :: Services :: CodeStar connections diff --git a/services/codestarnotifications/pom.xml b/services/codestarnotifications/pom.xml index d81ed9f4d827..8065d8679270 100644 --- a/services/codestarnotifications/pom.xml +++ b/services/codestarnotifications/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 codestarnotifications AWS Java SDK :: Services :: Codestar Notifications diff --git a/services/cognitoidentity/pom.xml b/services/cognitoidentity/pom.xml index 93d56368e6e6..9ff4d93f1b3a 100644 --- a/services/cognitoidentity/pom.xml +++ b/services/cognitoidentity/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cognitoidentity AWS Java SDK :: Services :: Amazon Cognito Identity diff --git a/services/cognitoidentityprovider/pom.xml b/services/cognitoidentityprovider/pom.xml index f70cc79dceba..bc000427d7d0 100644 --- a/services/cognitoidentityprovider/pom.xml +++ b/services/cognitoidentityprovider/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cognitoidentityprovider AWS Java SDK :: Services :: Amazon Cognito Identity Provider Service diff --git a/services/cognitosync/pom.xml b/services/cognitosync/pom.xml index 94462909df32..c3c558f0bbe5 100644 --- a/services/cognitosync/pom.xml +++ b/services/cognitosync/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 cognitosync AWS Java SDK :: Services :: Amazon Cognito Sync diff --git a/services/comprehend/pom.xml b/services/comprehend/pom.xml index ebde6b2c547f..0867d444d3d2 100644 --- a/services/comprehend/pom.xml +++ b/services/comprehend/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 comprehend diff --git a/services/comprehendmedical/pom.xml b/services/comprehendmedical/pom.xml index 82f02790da2f..ccda3e7392b1 100644 --- a/services/comprehendmedical/pom.xml +++ b/services/comprehendmedical/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 comprehendmedical AWS Java SDK :: Services :: ComprehendMedical diff --git a/services/computeoptimizer/pom.xml b/services/computeoptimizer/pom.xml index f501a120ea81..9e330b00fead 100644 --- a/services/computeoptimizer/pom.xml +++ b/services/computeoptimizer/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 computeoptimizer AWS Java SDK :: Services :: Compute Optimizer diff --git a/services/config/pom.xml b/services/config/pom.xml index dd50804ae5b1..01c6934a8394 100644 --- a/services/config/pom.xml +++ b/services/config/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 config AWS Java SDK :: Services :: AWS Config diff --git a/services/connect/pom.xml b/services/connect/pom.xml index 7f56eec20e14..d1b4e2a5fae7 100644 --- a/services/connect/pom.xml +++ b/services/connect/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 connect AWS Java SDK :: Services :: Connect diff --git a/services/connectcampaigns/pom.xml b/services/connectcampaigns/pom.xml index 3459eca16eba..b0d93a86b287 100644 --- a/services/connectcampaigns/pom.xml +++ b/services/connectcampaigns/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 connectcampaigns AWS Java SDK :: Services :: Connect Campaigns diff --git a/services/connectcases/pom.xml b/services/connectcases/pom.xml index 5e8ab8f6821b..243f4963b721 100644 --- a/services/connectcases/pom.xml +++ b/services/connectcases/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 connectcases AWS Java SDK :: Services :: Connect Cases diff --git a/services/connectcontactlens/pom.xml b/services/connectcontactlens/pom.xml index 0689d112071f..0f9e434bbd5d 100644 --- a/services/connectcontactlens/pom.xml +++ b/services/connectcontactlens/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 connectcontactlens AWS Java SDK :: Services :: Connect Contact Lens diff --git a/services/connectparticipant/pom.xml b/services/connectparticipant/pom.xml index a168e1068163..21b768e5a6f7 100644 --- a/services/connectparticipant/pom.xml +++ b/services/connectparticipant/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 connectparticipant AWS Java SDK :: Services :: ConnectParticipant diff --git a/services/controlcatalog/pom.xml b/services/controlcatalog/pom.xml index adce7af930a4..33df78f99500 100644 --- a/services/controlcatalog/pom.xml +++ b/services/controlcatalog/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 controlcatalog AWS Java SDK :: Services :: Control Catalog diff --git a/services/controltower/pom.xml b/services/controltower/pom.xml index 53b2daee5087..7167ec8af00f 100644 --- a/services/controltower/pom.xml +++ b/services/controltower/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 controltower AWS Java SDK :: Services :: Control Tower diff --git a/services/costandusagereport/pom.xml b/services/costandusagereport/pom.xml index 2e7247e3a677..d1b216cce1b3 100644 --- a/services/costandusagereport/pom.xml +++ b/services/costandusagereport/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 costandusagereport AWS Java SDK :: Services :: AWS Cost and Usage Report diff --git a/services/costexplorer/pom.xml b/services/costexplorer/pom.xml index 5a62bb7381da..1d74883eea81 100644 --- a/services/costexplorer/pom.xml +++ b/services/costexplorer/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 costexplorer diff --git a/services/costexplorer/src/main/resources/codegen-resources/service-2.json b/services/costexplorer/src/main/resources/codegen-resources/service-2.json index db0850939f38..16f78dc1216c 100644 --- a/services/costexplorer/src/main/resources/codegen-resources/service-2.json +++ b/services/costexplorer/src/main/resources/codegen-resources/service-2.json @@ -201,7 +201,7 @@ {"shape":"InvalidNextTokenException"}, {"shape":"RequestChangedException"} ], - "documentation":"

Retrieves cost and usage metrics with resources for your account. You can specify which cost and usage-related metric, such as BlendedCosts or UsageQuantity, that you want the request to return. You can also filter and group your data by various dimensions, such as SERVICE or AZ, in a specific time range. For a complete list of valid dimensions, see the GetDimensionValues operation. Management account in an organization in Organizations have access to all member accounts. This API is currently available for the Amazon Elastic Compute Cloud – Compute service only.

This is an opt-in only feature. You can enable this feature from the Cost Explorer Settings page. For information about how to access the Settings page, see Controlling Access for Cost Explorer in the Billing and Cost Management User Guide.

" + "documentation":"

Retrieves cost and usage metrics with resources for your account. You can specify which cost and usage-related metric, such as BlendedCosts or UsageQuantity, that you want the request to return. You can also filter and group your data by various dimensions, such as SERVICE or AZ, in a specific time range. For a complete list of valid dimensions, see the GetDimensionValues operation. Management account in an organization in Organizations have access to all member accounts.

Hourly granularity is only available for EC2-Instances (Elastic Compute Cloud) resource-level data. All other resource-level data is available at daily granularity.

This is an opt-in only feature. You can enable this feature from the Cost Explorer Settings page. For information about how to access the Settings page, see Controlling Access for Cost Explorer in the Billing and Cost Management User Guide.

" }, "GetCostCategories":{ "name":"GetCostCategories", @@ -4013,14 +4013,18 @@ "members":{ "RecommendationId":{ "shape":"GenericString", - "documentation":"

The ID for this specific recommendation.

" + "documentation":"

The ID for the recommendation.

" }, "GenerationTimestamp":{ "shape":"GenericString", - "documentation":"

The timestamp for when Amazon Web Services made this recommendation.

" + "documentation":"

The timestamp for when Amazon Web Services made the recommendation.

" + }, + "AdditionalMetadata":{ + "shape":"GenericString", + "documentation":"

Additional metadata that might be applicable to the recommendation.

" } }, - "documentation":"

Information about this specific recommendation, such as the timestamp for when Amazon Web Services made a specific recommendation.

" + "documentation":"

Information about a recommendation, such as the timestamp for when Amazon Web Services made a specific recommendation.

" }, "ReservationPurchaseRecommendationSummary":{ "type":"structure", @@ -4226,22 +4230,22 @@ "members":{ "RecommendationId":{ "shape":"GenericString", - "documentation":"

The ID for this specific recommendation.

" + "documentation":"

The ID for the recommendation.

" }, "GenerationTimestamp":{ "shape":"GenericString", - "documentation":"

The timestamp for when Amazon Web Services made this recommendation.

" + "documentation":"

The timestamp for when Amazon Web Services made the recommendation.

" }, "LookbackPeriodInDays":{ "shape":"LookbackPeriodInDays", - "documentation":"

The number of days of previous usage that Amazon Web Services considers when making this recommendation.

" + "documentation":"

The number of days of previous usage that Amazon Web Services considers when making the recommendation.

" }, "AdditionalMetadata":{ "shape":"GenericString", "documentation":"

Additional metadata that might be applicable to the recommendation.

" } }, - "documentation":"

Metadata for this recommendation set.

" + "documentation":"

Metadata for a recommendation set.

" }, "RightsizingRecommendationSummary":{ "type":"structure", diff --git a/services/costoptimizationhub/pom.xml b/services/costoptimizationhub/pom.xml index 943b4d6d000a..681320492c60 100644 --- a/services/costoptimizationhub/pom.xml +++ b/services/costoptimizationhub/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 costoptimizationhub AWS Java SDK :: Services :: Cost Optimization Hub diff --git a/services/customerprofiles/pom.xml b/services/customerprofiles/pom.xml index 2086fc968eb3..4978d3ec9a3b 100644 --- a/services/customerprofiles/pom.xml +++ b/services/customerprofiles/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 customerprofiles AWS Java SDK :: Services :: Customer Profiles diff --git a/services/databasemigration/pom.xml b/services/databasemigration/pom.xml index 3efce6e1c4fd..c7b6c04a5398 100644 --- a/services/databasemigration/pom.xml +++ b/services/databasemigration/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 databasemigration AWS Java SDK :: Services :: AWS Database Migration Service diff --git a/services/databrew/pom.xml b/services/databrew/pom.xml index 1ae22d17374e..2bc932cd8995 100644 --- a/services/databrew/pom.xml +++ b/services/databrew/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 databrew AWS Java SDK :: Services :: Data Brew diff --git a/services/dataexchange/pom.xml b/services/dataexchange/pom.xml index 030ee5d5b072..312dde457c07 100644 --- a/services/dataexchange/pom.xml +++ b/services/dataexchange/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 dataexchange AWS Java SDK :: Services :: DataExchange diff --git a/services/datapipeline/pom.xml b/services/datapipeline/pom.xml index b0bc650f0322..cf1f881285c4 100644 --- a/services/datapipeline/pom.xml +++ b/services/datapipeline/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 datapipeline AWS Java SDK :: Services :: AWS Data Pipeline diff --git a/services/datasync/pom.xml b/services/datasync/pom.xml index 8f525589410e..759ac6b5bb12 100644 --- a/services/datasync/pom.xml +++ b/services/datasync/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 datasync AWS Java SDK :: Services :: DataSync diff --git a/services/datazone/pom.xml b/services/datazone/pom.xml index fcdccec4ee9d..4f758ad0df27 100644 --- a/services/datazone/pom.xml +++ b/services/datazone/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 datazone AWS Java SDK :: Services :: Data Zone diff --git a/services/dax/pom.xml b/services/dax/pom.xml index 0fbd05e407db..f9659ccbbe26 100644 --- a/services/dax/pom.xml +++ b/services/dax/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 dax AWS Java SDK :: Services :: Amazon DynamoDB Accelerator (DAX) diff --git a/services/deadline/pom.xml b/services/deadline/pom.xml index 6a8cc37d7c23..19fbdf453a4e 100644 --- a/services/deadline/pom.xml +++ b/services/deadline/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 deadline AWS Java SDK :: Services :: Deadline diff --git a/services/detective/pom.xml b/services/detective/pom.xml index 520a0a3e6f07..e8e958e57dd4 100644 --- a/services/detective/pom.xml +++ b/services/detective/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 detective AWS Java SDK :: Services :: Detective diff --git a/services/devicefarm/pom.xml b/services/devicefarm/pom.xml index cf96f6f13719..eea9917c9e42 100644 --- a/services/devicefarm/pom.xml +++ b/services/devicefarm/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 devicefarm AWS Java SDK :: Services :: AWS Device Farm diff --git a/services/devopsguru/pom.xml b/services/devopsguru/pom.xml index 3fe7d33f3612..1eac6bb07a60 100644 --- a/services/devopsguru/pom.xml +++ b/services/devopsguru/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 devopsguru AWS Java SDK :: Services :: Dev Ops Guru diff --git a/services/directconnect/pom.xml b/services/directconnect/pom.xml index 57c34ccccc1a..02e104fc9b84 100644 --- a/services/directconnect/pom.xml +++ b/services/directconnect/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 directconnect AWS Java SDK :: Services :: AWS Direct Connect diff --git a/services/directory/pom.xml b/services/directory/pom.xml index e94a08950768..832c94bb1339 100644 --- a/services/directory/pom.xml +++ b/services/directory/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 directory AWS Java SDK :: Services :: AWS Directory Service diff --git a/services/dlm/pom.xml b/services/dlm/pom.xml index 31011521c7ca..3416cf23b787 100644 --- a/services/dlm/pom.xml +++ b/services/dlm/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 dlm AWS Java SDK :: Services :: DLM diff --git a/services/docdb/pom.xml b/services/docdb/pom.xml index 88d32ad80dcf..7e65f4dc7e0b 100644 --- a/services/docdb/pom.xml +++ b/services/docdb/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 docdb AWS Java SDK :: Services :: DocDB diff --git a/services/docdbelastic/pom.xml b/services/docdbelastic/pom.xml index de1b3f2b8e1c..9d3143bcb7f4 100644 --- a/services/docdbelastic/pom.xml +++ b/services/docdbelastic/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 docdbelastic AWS Java SDK :: Services :: Doc DB Elastic diff --git a/services/drs/pom.xml b/services/drs/pom.xml index a512f8dd2f01..fe736ab284d1 100644 --- a/services/drs/pom.xml +++ b/services/drs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 drs AWS Java SDK :: Services :: Drs diff --git a/services/dynamodb/pom.xml b/services/dynamodb/pom.xml index 0cdba259f3dd..a5a719d5c6f1 100644 --- a/services/dynamodb/pom.xml +++ b/services/dynamodb/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 dynamodb AWS Java SDK :: Services :: Amazon DynamoDB diff --git a/services/dynamodb/src/main/resources/codegen-resources/dynamodb/customization.config b/services/dynamodb/src/main/resources/codegen-resources/dynamodb/customization.config index 43c388445c29..548062504a24 100644 --- a/services/dynamodb/src/main/resources/codegen-resources/dynamodb/customization.config +++ b/services/dynamodb/src/main/resources/codegen-resources/dynamodb/customization.config @@ -34,5 +34,6 @@ "listXssMatchSets" ], "customRetryPolicy" : "software.amazon.awssdk.services.dynamodb.DynamoDbRetryPolicy", - "enableEndpointDiscoveryMethodRequired": true + "enableEndpointDiscoveryMethodRequired": true, + "useSraAuth": true } diff --git a/services/dynamodb/src/main/resources/codegen-resources/endpoint-rule-set.json b/services/dynamodb/src/main/resources/codegen-resources/endpoint-rule-set.json deleted file mode 100644 index a8016a5a4b64..000000000000 --- a/services/dynamodb/src/main/resources/codegen-resources/endpoint-rule-set.json +++ /dev/null @@ -1,336 +0,0 @@ -{ - "version": "1.1", - "parameters": { - "Region": { - "builtIn": "AWS::Region", - "required": true, - "documentation": "The AWS region used to dispatch the request.", - "type": "String" - }, - "UseDualStack": { - "builtIn": "AWS::UseDualStack", - "required": true, - "default": false, - "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.", - "type": "Boolean" - }, - "UseFIPS": { - "builtIn": "AWS::UseFIPS", - "required": true, - "default": false, - "documentation": "When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.", - "type": "Boolean" - } - }, - "rules": [ - { - "conditions": [ - { - "fn": "aws.partition", - "argv": [ - { - "ref": "Region" - } - ], - "assign": "PartitionResult" - } - ], - "type": "tree", - "rules": [ - { - "conditions": [ - { - "fn": "booleanEquals", - "argv": [ - { - "ref": "UseFIPS" - }, - true - ] - }, - { - "fn": "booleanEquals", - "argv": [ - { - "ref": "UseDualStack" - }, - true - ] - } - ], - "type": "tree", - "rules": [ - { - "conditions": [ - { - "fn": "booleanEquals", - "argv": [ - true, - { - "fn": "getAttr", - "argv": [ - { - "ref": "PartitionResult" - }, - "supportsFIPS" - ] - } - ] - }, - { - "fn": "booleanEquals", - "argv": [ - true, - { - "fn": "getAttr", - "argv": [ - { - "ref": "PartitionResult" - }, - "supportsDualStack" - ] - } - ] - } - ], - "type": "tree", - "rules": [ - { - "conditions": [], - "endpoint": { - "url": "https://dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}", - "properties": { - "authSchemes": [ - { - "name": "sigv4", - "signingRegion": "{Region}", - "signingName": "dynamodb" - } - ] - }, - "headers": {} - }, - "type": "endpoint" - } - ] - }, - { - "conditions": [], - "error": "FIPS and DualStack are enabled, but this partition does not support one or both", - "type": "error" - } - ] - }, - { - "conditions": [ - { - "fn": "booleanEquals", - "argv": [ - { - "ref": "UseFIPS" - }, - true - ] - } - ], - "type": "tree", - "rules": [ - { - "conditions": [ - { - "fn": "booleanEquals", - "argv": [ - true, - { - "fn": "getAttr", - "argv": [ - { - "ref": "PartitionResult" - }, - "supportsFIPS" - ] - } - ] - } - ], - "type": "tree", - "rules": [ - { - "conditions": [], - "type": "tree", - "rules": [ - { - "conditions": [ - { - "fn": "stringEquals", - "argv": [ - "aws-us-gov", - { - "fn": "getAttr", - "argv": [ - { - "ref": "PartitionResult" - }, - "name" - ] - } - ] - } - ], - "endpoint": { - "url": "https://dynamodb.{Region}.{PartitionResult#dnsSuffix}", - "properties": { - "authSchemes": [ - { - "name": "sigv4", - "signingRegion": "{Region}", - "signingName": "dynamodb" - } - ] - }, - "headers": {} - }, - "type": "endpoint" - }, - { - "conditions": [], - "endpoint": { - "url": "https://dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}", - "properties": { - "authSchemes": [ - { - "name": "sigv4", - "signingRegion": "{Region}", - "signingName": "dynamodb" - } - ] - }, - "headers": {} - }, - "type": "endpoint" - } - ] - } - ] - }, - { - "conditions": [], - "error": "FIPS is enabled but this partition does not support FIPS", - "type": "error" - } - ] - }, - { - "conditions": [ - { - "fn": "booleanEquals", - "argv": [ - { - "ref": "UseDualStack" - }, - true - ] - } - ], - "type": "tree", - "rules": [ - { - "conditions": [ - { - "fn": "booleanEquals", - "argv": [ - true, - { - "fn": "getAttr", - "argv": [ - { - "ref": "PartitionResult" - }, - "supportsDualStack" - ] - } - ] - } - ], - "type": "tree", - "rules": [ - { - "conditions": [], - "endpoint": { - "url": "https://dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}", - "properties": { - "authSchemes": [ - { - "name": "sigv4", - "signingRegion": "{Region}", - "signingName": "dynamodb" - } - ] - }, - "headers": {} - }, - "type": "endpoint" - } - ] - }, - { - "conditions": [], - "error": "DualStack is enabled but this partition does not support DualStack", - "type": "error" - } - ] - }, - { - "conditions": [], - "type": "tree", - "rules": [ - { - "conditions": [ - { - "fn": "stringEquals", - "argv": [ - { - "ref": "Region" - }, - "local" - ] - } - ], - "endpoint": { - "url": "https://localhost:8000", - "properties": { - "authSchemes": [ - { - "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "dynamodb" - } - ] - }, - "headers": {} - }, - "type": "endpoint" - }, - { - "conditions": [], - "endpoint": { - "url": "https://dynamodb.{Region}.{PartitionResult#dnsSuffix}", - "properties": { - "authSchemes": [ - { - "name": "sigv4", - "signingRegion": "{Region}", - "signingName": "dynamodb" - } - ] - }, - "headers": {} - }, - "type": "endpoint" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/services/ebs/pom.xml b/services/ebs/pom.xml index 418bedff3484..bb7eb0b5723e 100644 --- a/services/ebs/pom.xml +++ b/services/ebs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ebs AWS Java SDK :: Services :: EBS diff --git a/services/ec2/pom.xml b/services/ec2/pom.xml index 9c7fe28732bd..4c3a5467b5de 100644 --- a/services/ec2/pom.xml +++ b/services/ec2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ec2 AWS Java SDK :: Services :: Amazon EC2 diff --git a/services/ec2/src/main/resources/codegen-resources/service-2.json b/services/ec2/src/main/resources/codegen-resources/service-2.json index 0f258463db8a..6519a9a1f3c8 100644 --- a/services/ec2/src/main/resources/codegen-resources/service-2.json +++ b/services/ec2/src/main/resources/codegen-resources/service-2.json @@ -666,7 +666,7 @@ }, "input":{"shape":"CreateDhcpOptionsRequest"}, "output":{"shape":"CreateDhcpOptionsResult"}, - "documentation":"

Creates a custom set of DHCP options. After you create a DHCP option set, you associate it with a VPC. After you associate a DHCP option set with a VPC, all existing and newly launched instances in the VPC use this set of DHCP options.

The following are the individual DHCP options you can specify. For more information, see DHCP options sets in the Amazon VPC User Guide.

  • domain-name - If you're using AmazonProvidedDNS in us-east-1, specify ec2.internal. If you're using AmazonProvidedDNS in any other Region, specify region.compute.internal. Otherwise, specify a custom domain name. This value is used to complete unqualified DNS hostnames.

    Some Linux operating systems accept multiple domain names separated by spaces. However, Windows and other Linux operating systems treat the value as a single domain, which results in unexpected behavior. If your DHCP option set is associated with a VPC that has instances running operating systems that treat the value as a single domain, specify only one domain name.

  • domain-name-servers - The IP addresses of up to four DNS servers, or AmazonProvidedDNS. To specify multiple domain name servers in a single parameter, separate the IP addresses using commas. To have your instances receive custom DNS hostnames as specified in domain-name, you must specify a custom DNS server.

  • ntp-servers - The IP addresses of up to eight Network Time Protocol (NTP) servers (four IPv4 addresses and four IPv6 addresses).

  • netbios-name-servers - The IP addresses of up to four NetBIOS name servers.

  • netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2. Broadcast and multicast are not supported. For more information about NetBIOS node types, see RFC 2132.

  • ipv6-preferred-lease-time - A value (in seconds, minutes, hours, or years) for how frequently a running instance with an IPv6 assigned to it goes through DHCPv6 lease renewal. Acceptable values are between 140 and 2147483647 seconds (approximately 68 years). If no value is entered, the default lease time is 140 seconds. If you use long-term addressing for EC2 instances, you can increase the lease time and avoid frequent lease renewal requests. Lease renewal typically occurs when half of the lease time has elapsed.

" + "documentation":"

Creates a custom set of DHCP options. After you create a DHCP option set, you associate it with a VPC. After you associate a DHCP option set with a VPC, all existing and newly launched instances in the VPC use this set of DHCP options.

The following are the individual DHCP options you can specify. For more information, see DHCP options sets in the Amazon VPC User Guide.

  • domain-name - If you're using AmazonProvidedDNS in us-east-1, specify ec2.internal. If you're using AmazonProvidedDNS in any other Region, specify region.compute.internal. Otherwise, specify a custom domain name. This value is used to complete unqualified DNS hostnames.

    Some Linux operating systems accept multiple domain names separated by spaces. However, Windows and other Linux operating systems treat the value as a single domain, which results in unexpected behavior. If your DHCP option set is associated with a VPC that has instances running operating systems that treat the value as a single domain, specify only one domain name.

  • domain-name-servers - The IP addresses of up to four DNS servers, or AmazonProvidedDNS. To specify multiple domain name servers in a single parameter, separate the IP addresses using commas. To have your instances receive custom DNS hostnames as specified in domain-name, you must specify a custom DNS server.

  • ntp-servers - The IP addresses of up to eight Network Time Protocol (NTP) servers (four IPv4 addresses and four IPv6 addresses).

  • netbios-name-servers - The IP addresses of up to four NetBIOS name servers.

  • netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2. Broadcast and multicast are not supported. For more information about NetBIOS node types, see RFC 2132.

  • ipv6-address-preferred-lease-time - A value (in seconds, minutes, hours, or years) for how frequently a running instance with an IPv6 assigned to it goes through DHCPv6 lease renewal. Acceptable values are between 140 and 2147483647 seconds (approximately 68 years). If no value is entered, the default lease time is 140 seconds. If you use long-term addressing for EC2 instances, you can increase the lease time and avoid frequent lease renewal requests. Lease renewal typically occurs when half of the lease time has elapsed.

" }, "CreateEgressOnlyInternetGateway":{ "name":"CreateEgressOnlyInternetGateway", @@ -816,7 +816,7 @@ }, "input":{"shape":"CreateLaunchTemplateRequest"}, "output":{"shape":"CreateLaunchTemplateResult"}, - "documentation":"

Creates a launch template.

A launch template contains the parameters to launch an instance. When you launch an instance using RunInstances, you can specify a launch template instead of providing the launch parameters in the request. For more information, see Launch an instance from a launch template in the Amazon Elastic Compute Cloud User Guide.

If you want to clone an existing launch template as the basis for creating a new launch template, you can use the Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template. For more information, see Create a launch template from an existing launch template in the Amazon Elastic Compute Cloud User Guide.

" + "documentation":"

Creates a launch template.

A launch template contains the parameters to launch an instance. When you launch an instance using RunInstances, you can specify a launch template instead of providing the launch parameters in the request. For more information, see Launch an instance from a launch template in the Amazon Elastic Compute Cloud User Guide.

To clone an existing launch template as the basis for a new launch template, use the Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template. For more information, see Create a launch template from an existing launch template in the Amazon Elastic Compute Cloud User Guide.

" }, "CreateLaunchTemplateVersion":{ "name":"CreateLaunchTemplateVersion", @@ -826,7 +826,7 @@ }, "input":{"shape":"CreateLaunchTemplateVersionRequest"}, "output":{"shape":"CreateLaunchTemplateVersionResult"}, - "documentation":"

Creates a new version of a launch template. You can specify an existing version of launch template from which to base the new version.

Launch template versions are numbered in the order in which they are created. You cannot specify, change, or replace the numbering of launch template versions.

Launch templates are immutable; after you create a launch template, you can't modify it. Instead, you can create a new version of the launch template that includes any changes you require.

For more information, see Modify a launch template (manage launch template versions) in the Amazon Elastic Compute Cloud User Guide.

" + "documentation":"

Creates a new version of a launch template. You must specify an existing launch template, either by name or ID. You can determine whether the new version inherits parameters from a source version, and add or overwrite parameters as needed.

Launch template versions are numbered in the order in which they are created. You can't specify, change, or replace the numbering of launch template versions.

Launch templates are immutable; after you create a launch template, you can't modify it. Instead, you can create a new version of the launch template that includes the changes that you require.

For more information, see Modify a launch template (manage launch template versions) in the Amazon Elastic Compute Cloud User Guide.

" }, "CreateLocalGatewayRoute":{ "name":"CreateLocalGatewayRoute", @@ -2603,7 +2603,7 @@ }, "input":{"shape":"DescribeImagesRequest"}, "output":{"shape":"DescribeImagesResult"}, - "documentation":"

Describes the specified images (AMIs, AKIs, and ARIs) available to you or all of the images available to you.

The images available to you include public images, private images that you own, and private images owned by other Amazon Web Services accounts for which you have explicit launch permissions.

Recently deregistered images appear in the returned results for a short interval and then return empty results. After all instances that reference a deregistered AMI are terminated, specifying the ID of the image will eventually return an error indicating that the AMI ID cannot be found.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" + "documentation":"

Describes the specified images (AMIs, AKIs, and ARIs) available to you or all of the images available to you.

The images available to you include public images, private images that you own, and private images owned by other Amazon Web Services accounts for which you have explicit launch permissions.

Recently deregistered images appear in the returned results for a short interval and then return empty results. After all instances that reference a deregistered AMI are terminated, specifying the ID of the image will eventually return an error indicating that the AMI ID cannot be found.

We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" }, "DescribeImportImageTasks":{ "name":"DescribeImportImageTasks", @@ -2723,7 +2723,7 @@ }, "input":{"shape":"DescribeInstancesRequest"}, "output":{"shape":"DescribeInstancesResult"}, - "documentation":"

Describes the specified instances or all instances.

If you specify instance IDs, the output includes information for only the specified instances. If you specify filters, the output includes information for only those instances that meet the filter criteria. If you do not specify instance IDs or filters, the output includes information for all instances, which can affect performance. We recommend that you use pagination to ensure that the operation returns quickly and successfully.

If you specify an instance ID that is not valid, an error is returned. If you specify an instance that you do not own, it is not included in the output.

Recently terminated instances might appear in the returned results. This interval is usually less than one hour.

If you describe instances in the rare case where an Availability Zone is experiencing a service disruption and you specify instance IDs that are in the affected zone, or do not specify any instance IDs at all, the call fails. If you describe instances and specify only instance IDs that are in an unaffected zone, the call works normally.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" + "documentation":"

Describes the specified instances or all instances.

If you specify instance IDs, the output includes information for only the specified instances. If you specify filters, the output includes information for only those instances that meet the filter criteria. If you do not specify instance IDs or filters, the output includes information for all instances, which can affect performance. We recommend that you use pagination to ensure that the operation returns quickly and successfully.

If you specify an instance ID that is not valid, an error is returned. If you specify an instance that you do not own, it is not included in the output.

Recently terminated instances might appear in the returned results. This interval is usually less than one hour.

If you describe instances in the rare case where an Availability Zone is experiencing a service disruption and you specify instance IDs that are in the affected zone, or do not specify any instance IDs at all, the call fails. If you describe instances and specify only instance IDs that are in an unaffected zone, the call works normally.

We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" }, "DescribeInternetGateways":{ "name":"DescribeInternetGateways", @@ -3023,7 +3023,7 @@ }, "input":{"shape":"DescribeNetworkInterfacesRequest"}, "output":{"shape":"DescribeNetworkInterfacesResult"}, - "documentation":"

Describes one or more of your network interfaces.

If you have a large number of network interfaces, the operation fails unless you use pagination or one of the following filters: group-id, mac-address, private-dns-name, private-ip-address, private-dns-name, subnet-id, or vpc-id.

" + "documentation":"

Describes one or more of your network interfaces.

If you have a large number of network interfaces, the operation fails unless you use pagination or one of the following filters: group-id, mac-address, private-dns-name, private-ip-address, private-dns-name, subnet-id, or vpc-id.

We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.

" }, "DescribePlacementGroups":{ "name":"DescribePlacementGroups", @@ -3213,7 +3213,7 @@ }, "input":{"shape":"DescribeSnapshotsRequest"}, "output":{"shape":"DescribeSnapshotsResult"}, - "documentation":"

Describes the specified EBS snapshots available to you or all of the EBS snapshots available to you.

The snapshots available to you include public snapshots, private snapshots that you own, and private snapshots owned by other Amazon Web Services accounts for which you have explicit create volume permissions.

The create volume permissions fall into the following categories:

  • public: The owner of the snapshot granted create volume permissions for the snapshot to the all group. All Amazon Web Services accounts have create volume permissions for these snapshots.

  • explicit: The owner of the snapshot granted create volume permissions to a specific Amazon Web Services account.

  • implicit: An Amazon Web Services account has implicit create volume permissions for all snapshots it owns.

The list of snapshots returned can be filtered by specifying snapshot IDs, snapshot owners, or Amazon Web Services accounts with create volume permissions. If no options are specified, Amazon EC2 returns all snapshots for which you have create volume permissions.

If you specify one or more snapshot IDs, only snapshots that have the specified IDs are returned. If you specify an invalid snapshot ID, an error is returned. If you specify a snapshot ID for which you do not have access, it is not included in the returned results.

If you specify one or more snapshot owners using the OwnerIds option, only snapshots from the specified owners and for which you have access are returned. The results can include the Amazon Web Services account IDs of the specified owners, amazon for snapshots owned by Amazon, or self for snapshots that you own.

If you specify a list of restorable users, only snapshots with create snapshot permissions for those users are returned. You can specify Amazon Web Services account IDs (if you own the snapshots), self for snapshots for which you own or have explicit permissions, or all for public snapshots.

If you are describing a long list of snapshots, we recommend that you paginate the output to make the list more manageable. For more information, see Pagination.

To get the state of fast snapshot restores for a snapshot, use DescribeFastSnapshotRestores.

For more information about EBS snapshots, see Amazon EBS snapshots in the Amazon EBS User Guide.

" + "documentation":"

Describes the specified EBS snapshots available to you or all of the EBS snapshots available to you.

The snapshots available to you include public snapshots, private snapshots that you own, and private snapshots owned by other Amazon Web Services accounts for which you have explicit create volume permissions.

The create volume permissions fall into the following categories:

  • public: The owner of the snapshot granted create volume permissions for the snapshot to the all group. All Amazon Web Services accounts have create volume permissions for these snapshots.

  • explicit: The owner of the snapshot granted create volume permissions to a specific Amazon Web Services account.

  • implicit: An Amazon Web Services account has implicit create volume permissions for all snapshots it owns.

The list of snapshots returned can be filtered by specifying snapshot IDs, snapshot owners, or Amazon Web Services accounts with create volume permissions. If no options are specified, Amazon EC2 returns all snapshots for which you have create volume permissions.

If you specify one or more snapshot IDs, only snapshots that have the specified IDs are returned. If you specify an invalid snapshot ID, an error is returned. If you specify a snapshot ID for which you do not have access, it is not included in the returned results.

If you specify one or more snapshot owners using the OwnerIds option, only snapshots from the specified owners and for which you have access are returned. The results can include the Amazon Web Services account IDs of the specified owners, amazon for snapshots owned by Amazon, or self for snapshots that you own.

If you specify a list of restorable users, only snapshots with create snapshot permissions for those users are returned. You can specify Amazon Web Services account IDs (if you own the snapshots), self for snapshots for which you own or have explicit permissions, or all for public snapshots.

If you are describing a long list of snapshots, we recommend that you paginate the output to make the list more manageable. For more information, see Pagination.

To get the state of fast snapshot restores for a snapshot, use DescribeFastSnapshotRestores.

For more information about EBS snapshots, see Amazon EBS snapshots in the Amazon EBS User Guide.

We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.

" }, "DescribeSpotDatafeedSubscription":{ "name":"DescribeSpotDatafeedSubscription", @@ -3313,7 +3313,7 @@ }, "input":{"shape":"DescribeTagsRequest"}, "output":{"shape":"DescribeTagsResult"}, - "documentation":"

Describes the specified tags for your EC2 resources.

For more information about tags, see Tag your Amazon EC2 resources in the Amazon Elastic Compute Cloud User Guide.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" + "documentation":"

Describes the specified tags for your EC2 resources.

For more information about tags, see Tag your Amazon EC2 resources in the Amazon Elastic Compute Cloud User Guide.

We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" }, "DescribeTrafficMirrorFilters":{ "name":"DescribeTrafficMirrorFilters", @@ -3533,7 +3533,7 @@ }, "input":{"shape":"DescribeVolumesRequest"}, "output":{"shape":"DescribeVolumesResult"}, - "documentation":"

Describes the specified EBS volumes or all of your EBS volumes.

If you are describing a long list of volumes, we recommend that you paginate the output to make the list more manageable. For more information, see Pagination.

For more information about EBS volumes, see Amazon EBS volumes in the Amazon EBS User Guide.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" + "documentation":"

Describes the specified EBS volumes or all of your EBS volumes.

If you are describing a long list of volumes, we recommend that you paginate the output to make the list more manageable. For more information, see Pagination.

For more information about EBS volumes, see Amazon EBS volumes in the Amazon EBS User Guide.

We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.

The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.

" }, "DescribeVolumesModifications":{ "name":"DescribeVolumesModifications", @@ -3812,6 +3812,16 @@ "output":{"shape":"DisableImageDeprecationResult"}, "documentation":"

Cancels the deprecation of the specified AMI.

For more information, see Deprecate an AMI in the Amazon EC2 User Guide.

" }, + "DisableImageDeregistrationProtection":{ + "name":"DisableImageDeregistrationProtection", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"DisableImageDeregistrationProtectionRequest"}, + "output":{"shape":"DisableImageDeregistrationProtectionResult"}, + "documentation":"

Disables deregistration protection for an AMI. When deregistration protection is disabled, the AMI can be deregistered.

If you chose to include a 24-hour cooldown period when you enabled deregistration protection for the AMI, then, when you disable deregistration protection, you won’t immediately be able to deregister the AMI.

For more information, see Protect an AMI from deregistration in the Amazon EC2 User Guide.

" + }, "DisableIpamOrganizationAdminAccount":{ "name":"DisableIpamOrganizationAdminAccount", "http":{ @@ -4109,6 +4119,16 @@ "output":{"shape":"EnableImageDeprecationResult"}, "documentation":"

Enables deprecation of the specified AMI at the specified date and time.

For more information, see Deprecate an AMI in the Amazon EC2 User Guide.

" }, + "EnableImageDeregistrationProtection":{ + "name":"EnableImageDeregistrationProtection", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"EnableImageDeregistrationProtectionRequest"}, + "output":{"shape":"EnableImageDeregistrationProtectionResult"}, + "documentation":"

Enables deregistration protection for an AMI. When deregistration protection is enabled, the AMI can't be deregistered.

To allow the AMI to be deregistered, you must first disable deregistration protection using DisableImageDeregistrationProtection.

For more information, see Protect an AMI from deregistration in the Amazon EC2 User Guide.

" + }, "EnableIpamOrganizationAdminAccount":{ "name":"EnableIpamOrganizationAdminAccount", "http":{ @@ -8535,12 +8555,12 @@ }, "CertificateS3ObjectKey":{ "shape":"String", - "documentation":"

The key of the Amazon S3 object ey where the certificate, certificate chain, and encrypted private key bundle is stored. The object key is formated as follows: role_arn/certificate_arn.

", + "documentation":"

The key of the Amazon S3 object where the certificate, certificate chain, and encrypted private key bundle are stored. The object key is formatted as follows: role_arn/certificate_arn.

", "locationName":"certificateS3ObjectKey" }, "EncryptionKmsKeyId":{ "shape":"String", - "documentation":"

The ID of the KMS customer master key (CMK) used to encrypt the private key.

", + "documentation":"

The ID of the KMS key used to encrypt the private key.

", "locationName":"encryptionKmsKeyId" } }, @@ -13432,7 +13452,7 @@ }, "TagSpecifications":{ "shape":"TagSpecificationList", - "documentation":"

The tags to apply to the launch template on creation. To tag the launch template, the resource type must be launch-template.

To specify the tags for the resources that are created when an instance is launched, you must use the TagSpecifications parameter in the launch template data structure.

", + "documentation":"

The tags to apply to the launch template on creation. To tag the launch template, the resource type must be launch-template.

To specify the tags for the resources that are created when an instance is launched, you must use the TagSpecifications parameter in the launch template data structure.

", "locationName":"TagSpecification" } } @@ -13466,15 +13486,15 @@ }, "LaunchTemplateId":{ "shape":"LaunchTemplateId", - "documentation":"

The ID of the launch template.

You must specify either the LaunchTemplateId or the LaunchTemplateName, but not both.

" + "documentation":"

The ID of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "LaunchTemplateName":{ "shape":"LaunchTemplateName", - "documentation":"

The name of the launch template.

You must specify the LaunchTemplateName or the LaunchTemplateId, but not both.

" + "documentation":"

The name of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "SourceVersion":{ "shape":"String", - "documentation":"

The version number of the launch template version on which to base the new version. The new version inherits the same launch parameters as the source version, except for parameters that you specify in LaunchTemplateData. Snapshots applied to the block device mapping are ignored when creating a new version unless they are explicitly included.

" + "documentation":"

The version of the launch template on which to base the new version. Snapshots applied to the block device mapping are ignored when creating a new version unless they are explicitly included.

If you specify this parameter, the new version inherits the launch parameters from the source version. If you specify additional launch parameters for the new version, they overwrite any corresponding launch parameters inherited from the source version.

If you omit this parameter, the new version contains only the launch parameters that you specify for the new version.

" }, "VersionDescription":{ "shape":"VersionDescription", @@ -17132,11 +17152,11 @@ }, "LaunchTemplateId":{ "shape":"LaunchTemplateId", - "documentation":"

The ID of the launch template.

You must specify either the LaunchTemplateId or the LaunchTemplateName, but not both.

" + "documentation":"

The ID of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "LaunchTemplateName":{ "shape":"LaunchTemplateName", - "documentation":"

The name of the launch template.

You must specify either the LaunchTemplateName or the LaunchTemplateId, but not both.

" + "documentation":"

The name of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" } } }, @@ -17160,11 +17180,11 @@ }, "LaunchTemplateId":{ "shape":"LaunchTemplateId", - "documentation":"

The ID of the launch template.

You must specify either the LaunchTemplateId or the LaunchTemplateName, but not both.

" + "documentation":"

The ID of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "LaunchTemplateName":{ "shape":"LaunchTemplateName", - "documentation":"

The name of the launch template.

You must specify either the LaunchTemplateName or the LaunchTemplateId, but not both.

" + "documentation":"

The name of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "Versions":{ "shape":"VersionStringList", @@ -21617,11 +21637,11 @@ }, "LaunchTemplateId":{ "shape":"LaunchTemplateId", - "documentation":"

The ID of the launch template.

To describe one or more versions of a specified launch template, you must specify either the LaunchTemplateId or the LaunchTemplateName, but not both.

To describe all the latest or default launch template versions in your account, you must omit this parameter.

" + "documentation":"

The ID of the launch template.

To describe one or more versions of a specified launch template, you must specify either the launch template ID or the launch template name, but not both.

To describe all the latest or default launch template versions in your account, you must omit this parameter.

" }, "LaunchTemplateName":{ "shape":"LaunchTemplateName", - "documentation":"

The name of the launch template.

To describe one or more versions of a specified launch template, you must specify either the LaunchTemplateName or the LaunchTemplateId, but not both.

To describe all the latest or default launch template versions in your account, you must omit this parameter.

" + "documentation":"

The name of the launch template.

To describe one or more versions of a specified launch template, you must specify either the launch template name or the launch template ID, but not both.

To describe all the latest or default launch template versions in your account, you must omit this parameter.

" }, "Versions":{ "shape":"VersionStringList", @@ -22579,7 +22599,7 @@ "members":{ "NetworkInterfaces":{ "shape":"NetworkInterfaceList", - "documentation":"

Information about one or more network interfaces.

", + "documentation":"

Information about the network interfaces.

", "locationName":"networkInterfaceSet" }, "NextToken":{ @@ -23901,7 +23921,7 @@ }, "Filters":{ "shape":"FilterList", - "documentation":"

The filters.

  • key - The tag key.

  • resource-id - The ID of the resource.

  • resource-type - The resource type (customer-gateway | dedicated-host | dhcp-options | elastic-ip | fleet | fpga-image | host-reservation | image | instance | internet-gateway | key-pair | launch-template | natgateway | network-acl | network-interface | placement-group | reserved-instances | route-table | security-group | snapshot | spot-instances-request | subnet | volume | vpc | vpc-endpoint | vpc-endpoint-service | vpc-peering-connection | vpn-connection | vpn-gateway).

  • tag:<key> - The key/value combination of the tag. For example, specify \"tag:Owner\" for the filter name and \"TeamA\" for the filter value to find resources with the tag \"Owner=TeamA\".

  • value - The tag value.

", + "documentation":"

The filters.

  • key - The tag key.

  • resource-id - The ID of the resource.

  • resource-type - The resource type. For a list of possible values, see TagSpecification.

  • tag:<key> - The key/value combination of the tag. For example, specify \"tag:Owner\" for the filter name and \"TeamA\" for the filter value to find resources with the tag \"Owner=TeamA\".

  • value - The tag value.

", "locationName":"Filter" }, "MaxResults":{ @@ -26162,6 +26182,30 @@ } } }, + "DisableImageDeregistrationProtectionRequest":{ + "type":"structure", + "required":["ImageId"], + "members":{ + "ImageId":{ + "shape":"ImageId", + "documentation":"

The ID of the AMI.

" + }, + "DryRun":{ + "shape":"Boolean", + "documentation":"

Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.

" + } + } + }, + "DisableImageDeregistrationProtectionResult":{ + "type":"structure", + "members":{ + "Return":{ + "shape":"String", + "documentation":"

Returns true if the request succeeds; otherwise, it returns an error.

", + "locationName":"return" + } + } + }, "DisableImageRequest":{ "type":"structure", "required":["ImageId"], @@ -28030,6 +28074,34 @@ } } }, + "EnableImageDeregistrationProtectionRequest":{ + "type":"structure", + "required":["ImageId"], + "members":{ + "ImageId":{ + "shape":"ImageId", + "documentation":"

The ID of the AMI.

" + }, + "WithCooldown":{ + "shape":"Boolean", + "documentation":"

If true, enforces deregistration protection for 24 hours after deregistration protection is disabled.

" + }, + "DryRun":{ + "shape":"Boolean", + "documentation":"

Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.

" + } + } + }, + "EnableImageDeregistrationProtectionResult":{ + "type":"structure", + "members":{ + "Return":{ + "shape":"String", + "documentation":"

Returns true if the request succeeds; otherwise, it returns an error.

", + "locationName":"return" + } + } + }, "EnableImageRequest":{ "type":"structure", "required":["ImageId"], @@ -33034,6 +33106,16 @@ "shape":"String", "documentation":"

The ID of the instance that the AMI was created from if the AMI was created using CreateImage. This field only appears if the AMI was created using CreateImage.

", "locationName":"sourceInstanceId" + }, + "DeregistrationProtection":{ + "shape":"String", + "documentation":"

Indicates whether deregistration protection is enabled for the AMI.

", + "locationName":"deregistrationProtection" + }, + "LastLaunchedTime":{ + "shape":"String", + "documentation":"

The date and time, in ISO 8601 date-time format, when the AMI was last used to launch an EC2 instance. When the AMI is used to launch an instance, there is a 24-hour delay before that usage is reported.

lastLaunchedTime data is available starting April 2017.

", + "locationName":"lastLaunchedTime" } }, "documentation":"

Describes an image.

" @@ -33105,6 +33187,11 @@ "shape":"AttributeValue", "documentation":"

If v2.0, it indicates that IMDSv2 is specified in the AMI. Instances launched from this AMI will have HttpTokens automatically set to required so that, by default, the instance requires that IMDSv2 is used when requesting instance metadata. In addition, HttpPutResponseHopLimit is set to 2. For more information, see Configure the AMI in the Amazon EC2 User Guide.

", "locationName":"imdsSupport" + }, + "DeregistrationProtection":{ + "shape":"AttributeValue", + "documentation":"

Indicates whether deregistration protection is enabled for the AMI.

", + "locationName":"deregistrationProtection" } }, "documentation":"

Describes an image attribute.

" @@ -33123,7 +33210,8 @@ "tpmSupport", "uefiData", "lastLaunchedTime", - "imdsSupport" + "imdsSupport", + "deregistrationProtection" ] }, "ImageBlockPublicAccessDisabledState":{ @@ -40321,18 +40409,18 @@ "members":{ "LaunchTemplateId":{ "shape":"LaunchTemplateId", - "documentation":"

The ID of the launch template.

You must specify the LaunchTemplateId or the LaunchTemplateName, but not both.

" + "documentation":"

The ID of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "LaunchTemplateName":{ "shape":"String", - "documentation":"

The name of the launch template.

You must specify the LaunchTemplateName or the LaunchTemplateId, but not both.

" + "documentation":"

The name of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "Version":{ "shape":"String", - "documentation":"

The launch template version number, $Latest, or $Default.

If the value is $Latest, Amazon EC2 uses the latest version of the launch template.

If the value is $Default, Amazon EC2 uses the default version of the launch template.

Default: The default version of the launch template.

" + "documentation":"

The launch template version number, $Latest, or $Default.

A value of $Latest uses the latest version of the launch template.

A value of $Default uses the default version of the launch template.

Default: The default version of the launch template.

" } }, - "documentation":"

The launch template to use. You must specify either the launch template ID or launch template name in the request, but not both.

" + "documentation":"

Describes the launch template to use.

" }, "LaunchTemplateSpotMarketOptions":{ "type":"structure", @@ -42835,11 +42923,11 @@ }, "LaunchTemplateId":{ "shape":"LaunchTemplateId", - "documentation":"

The ID of the launch template.

You must specify either the LaunchTemplateId or the LaunchTemplateName, but not both.

" + "documentation":"

The ID of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "LaunchTemplateName":{ "shape":"LaunchTemplateName", - "documentation":"

The name of the launch template.

You must specify either the LaunchTemplateName or the LaunchTemplateId, but not both.

" + "documentation":"

The name of the launch template.

You must specify either the launch template ID or the launch template name, but not both.

" }, "DefaultVersion":{ "shape":"String", @@ -51730,7 +51818,7 @@ }, "LaunchTemplate":{ "shape":"LaunchTemplateSpecification", - "documentation":"

The launch template to use to launch the instances. Any parameters that you specify in RunInstances override the same parameters in the launch template. You can specify either the name or ID of a launch template, but not both.

" + "documentation":"

The launch template. Any additional parameters that you specify for the new instance overwrite the corresponding parameters included in the launch template.

" }, "InstanceMarketOptions":{ "shape":"InstanceMarketOptionsRequest", diff --git a/services/ec2instanceconnect/pom.xml b/services/ec2instanceconnect/pom.xml index b5450330ae3b..74906d451043 100644 --- a/services/ec2instanceconnect/pom.xml +++ b/services/ec2instanceconnect/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ec2instanceconnect AWS Java SDK :: Services :: EC2 Instance Connect diff --git a/services/ecr/pom.xml b/services/ecr/pom.xml index 51625cec22c0..9d916dc9ad62 100644 --- a/services/ecr/pom.xml +++ b/services/ecr/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ecr AWS Java SDK :: Services :: Amazon EC2 Container Registry diff --git a/services/ecrpublic/pom.xml b/services/ecrpublic/pom.xml index 6997cddf8306..9eaa72b5f8c6 100644 --- a/services/ecrpublic/pom.xml +++ b/services/ecrpublic/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ecrpublic AWS Java SDK :: Services :: ECR PUBLIC diff --git a/services/ecs/pom.xml b/services/ecs/pom.xml index 71751aaa29ba..589f88d1980c 100644 --- a/services/ecs/pom.xml +++ b/services/ecs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ecs AWS Java SDK :: Services :: Amazon EC2 Container Service diff --git a/services/efs/pom.xml b/services/efs/pom.xml index fe2bb4566302..0bfc1a321ba8 100644 --- a/services/efs/pom.xml +++ b/services/efs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 efs AWS Java SDK :: Services :: Amazon Elastic File System diff --git a/services/eks/pom.xml b/services/eks/pom.xml index 7e1a75b7261e..dc072ab08a56 100644 --- a/services/eks/pom.xml +++ b/services/eks/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 eks AWS Java SDK :: Services :: EKS diff --git a/services/eksauth/pom.xml b/services/eksauth/pom.xml index ee82609c837d..a052e894b57a 100644 --- a/services/eksauth/pom.xml +++ b/services/eksauth/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 eksauth AWS Java SDK :: Services :: EKS Auth diff --git a/services/elasticache/pom.xml b/services/elasticache/pom.xml index b6ab8acd3131..e94a1976033f 100644 --- a/services/elasticache/pom.xml +++ b/services/elasticache/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 elasticache AWS Java SDK :: Services :: Amazon ElastiCache diff --git a/services/elasticbeanstalk/pom.xml b/services/elasticbeanstalk/pom.xml index 415f2e6ef271..543e8d302367 100644 --- a/services/elasticbeanstalk/pom.xml +++ b/services/elasticbeanstalk/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 elasticbeanstalk AWS Java SDK :: Services :: AWS Elastic Beanstalk diff --git a/services/elasticinference/pom.xml b/services/elasticinference/pom.xml index 16cdf8adf210..0ac185e352ac 100644 --- a/services/elasticinference/pom.xml +++ b/services/elasticinference/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 elasticinference AWS Java SDK :: Services :: Elastic Inference diff --git a/services/elasticloadbalancing/pom.xml b/services/elasticloadbalancing/pom.xml index 24ffa0a8249f..521e31c168ab 100644 --- a/services/elasticloadbalancing/pom.xml +++ b/services/elasticloadbalancing/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 elasticloadbalancing AWS Java SDK :: Services :: Elastic Load Balancing diff --git a/services/elasticloadbalancingv2/pom.xml b/services/elasticloadbalancingv2/pom.xml index ef5bd2a13755..8f45b1a2bcd8 100644 --- a/services/elasticloadbalancingv2/pom.xml +++ b/services/elasticloadbalancingv2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 elasticloadbalancingv2 AWS Java SDK :: Services :: Elastic Load Balancing V2 diff --git a/services/elasticsearch/pom.xml b/services/elasticsearch/pom.xml index 62df50bc8643..8e6e7ee85f73 100644 --- a/services/elasticsearch/pom.xml +++ b/services/elasticsearch/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 elasticsearch AWS Java SDK :: Services :: Amazon Elasticsearch Service diff --git a/services/elastictranscoder/pom.xml b/services/elastictranscoder/pom.xml index bd6f0b2f73d8..5a1cfb5cdedf 100644 --- a/services/elastictranscoder/pom.xml +++ b/services/elastictranscoder/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 elastictranscoder AWS Java SDK :: Services :: Amazon Elastic Transcoder diff --git a/services/emr/pom.xml b/services/emr/pom.xml index cb306f68929d..a6b82b42df15 100644 --- a/services/emr/pom.xml +++ b/services/emr/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 emr AWS Java SDK :: Services :: Amazon EMR diff --git a/services/emrcontainers/pom.xml b/services/emrcontainers/pom.xml index addb116d2618..7d441a83e2b0 100644 --- a/services/emrcontainers/pom.xml +++ b/services/emrcontainers/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 emrcontainers AWS Java SDK :: Services :: EMR Containers diff --git a/services/emrserverless/pom.xml b/services/emrserverless/pom.xml index 39ee6630a613..ad143e557689 100644 --- a/services/emrserverless/pom.xml +++ b/services/emrserverless/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 emrserverless AWS Java SDK :: Services :: EMR Serverless diff --git a/services/entityresolution/pom.xml b/services/entityresolution/pom.xml index 8eb7d74ef6f3..7c44f78760e0 100644 --- a/services/entityresolution/pom.xml +++ b/services/entityresolution/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 entityresolution AWS Java SDK :: Services :: Entity Resolution diff --git a/services/eventbridge/pom.xml b/services/eventbridge/pom.xml index 3d7578244937..dee3336c2328 100644 --- a/services/eventbridge/pom.xml +++ b/services/eventbridge/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 eventbridge AWS Java SDK :: Services :: EventBridge diff --git a/services/evidently/pom.xml b/services/evidently/pom.xml index 63bbab04c744..5be0bfce2d19 100644 --- a/services/evidently/pom.xml +++ b/services/evidently/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 evidently AWS Java SDK :: Services :: Evidently diff --git a/services/finspace/pom.xml b/services/finspace/pom.xml index a1e98bc295fb..b68846e48274 100644 --- a/services/finspace/pom.xml +++ b/services/finspace/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 finspace AWS Java SDK :: Services :: Finspace diff --git a/services/finspacedata/pom.xml b/services/finspacedata/pom.xml index 5f0555be46df..e5072579f76c 100644 --- a/services/finspacedata/pom.xml +++ b/services/finspacedata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 finspacedata AWS Java SDK :: Services :: Finspace Data diff --git a/services/firehose/pom.xml b/services/firehose/pom.xml index 41f20f69360e..43f1235eef9b 100644 --- a/services/firehose/pom.xml +++ b/services/firehose/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 firehose AWS Java SDK :: Services :: Amazon Kinesis Firehose diff --git a/services/fis/pom.xml b/services/fis/pom.xml index 250e2ce1c99f..227bbd5fda3b 100644 --- a/services/fis/pom.xml +++ b/services/fis/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 fis AWS Java SDK :: Services :: Fis diff --git a/services/fms/pom.xml b/services/fms/pom.xml index 4e280d145d59..5b09390f30e0 100644 --- a/services/fms/pom.xml +++ b/services/fms/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 fms AWS Java SDK :: Services :: FMS diff --git a/services/forecast/pom.xml b/services/forecast/pom.xml index 586b733ffe9f..d3439e513388 100644 --- a/services/forecast/pom.xml +++ b/services/forecast/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 forecast AWS Java SDK :: Services :: Forecast diff --git a/services/forecastquery/pom.xml b/services/forecastquery/pom.xml index 3d14d4eea511..9afc941ad9d0 100644 --- a/services/forecastquery/pom.xml +++ b/services/forecastquery/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 forecastquery AWS Java SDK :: Services :: Forecastquery diff --git a/services/frauddetector/pom.xml b/services/frauddetector/pom.xml index d5780813430a..faefee8547c4 100644 --- a/services/frauddetector/pom.xml +++ b/services/frauddetector/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 frauddetector AWS Java SDK :: Services :: FraudDetector diff --git a/services/freetier/pom.xml b/services/freetier/pom.xml index 4e01dc9fcc17..fc053ec623ca 100644 --- a/services/freetier/pom.xml +++ b/services/freetier/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 freetier AWS Java SDK :: Services :: Free Tier diff --git a/services/fsx/pom.xml b/services/fsx/pom.xml index 517bfa60bcca..22fe58142236 100644 --- a/services/fsx/pom.xml +++ b/services/fsx/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 fsx AWS Java SDK :: Services :: FSx diff --git a/services/gamelift/pom.xml b/services/gamelift/pom.xml index d4b1a3ca56f5..0d17249b8a43 100644 --- a/services/gamelift/pom.xml +++ b/services/gamelift/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 gamelift AWS Java SDK :: Services :: AWS GameLift diff --git a/services/glacier/pom.xml b/services/glacier/pom.xml index ef6d2ba60260..f7250d4a6d17 100644 --- a/services/glacier/pom.xml +++ b/services/glacier/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 glacier AWS Java SDK :: Services :: Amazon Glacier diff --git a/services/globalaccelerator/pom.xml b/services/globalaccelerator/pom.xml index b081e6a6f065..a7d2626701d2 100644 --- a/services/globalaccelerator/pom.xml +++ b/services/globalaccelerator/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 globalaccelerator AWS Java SDK :: Services :: Global Accelerator diff --git a/services/glue/pom.xml b/services/glue/pom.xml index d425606f1a6d..28197f7352e1 100644 --- a/services/glue/pom.xml +++ b/services/glue/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 glue diff --git a/services/grafana/pom.xml b/services/grafana/pom.xml index 84409a078172..66fd6b39bbdd 100644 --- a/services/grafana/pom.xml +++ b/services/grafana/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 grafana AWS Java SDK :: Services :: Grafana diff --git a/services/greengrass/pom.xml b/services/greengrass/pom.xml index ec202155f3e0..157adc079ca5 100644 --- a/services/greengrass/pom.xml +++ b/services/greengrass/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 greengrass AWS Java SDK :: Services :: AWS Greengrass diff --git a/services/greengrassv2/pom.xml b/services/greengrassv2/pom.xml index 0b4de0dc5031..317bb58f2348 100644 --- a/services/greengrassv2/pom.xml +++ b/services/greengrassv2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 greengrassv2 AWS Java SDK :: Services :: Greengrass V2 diff --git a/services/groundstation/pom.xml b/services/groundstation/pom.xml index 3b71bad5588e..975971a885df 100644 --- a/services/groundstation/pom.xml +++ b/services/groundstation/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 groundstation AWS Java SDK :: Services :: GroundStation diff --git a/services/guardduty/pom.xml b/services/guardduty/pom.xml index 8ec89579f114..1116b7a5f6ca 100644 --- a/services/guardduty/pom.xml +++ b/services/guardduty/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 guardduty diff --git a/services/health/pom.xml b/services/health/pom.xml index fb7274ff6c58..dfbe96f4500b 100644 --- a/services/health/pom.xml +++ b/services/health/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 health AWS Java SDK :: Services :: AWS Health APIs and Notifications diff --git a/services/healthlake/pom.xml b/services/healthlake/pom.xml index 1678139bdfed..d5c626301d63 100644 --- a/services/healthlake/pom.xml +++ b/services/healthlake/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 healthlake AWS Java SDK :: Services :: Health Lake diff --git a/services/honeycode/pom.xml b/services/honeycode/pom.xml index 7c2339ce2cb8..250169a04ae7 100644 --- a/services/honeycode/pom.xml +++ b/services/honeycode/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 honeycode AWS Java SDK :: Services :: Honeycode diff --git a/services/iam/pom.xml b/services/iam/pom.xml index 2fddbf035b8e..d79e0a100df7 100644 --- a/services/iam/pom.xml +++ b/services/iam/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iam AWS Java SDK :: Services :: AWS IAM diff --git a/services/identitystore/pom.xml b/services/identitystore/pom.xml index 7d0effd5e475..23383324316b 100644 --- a/services/identitystore/pom.xml +++ b/services/identitystore/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 identitystore AWS Java SDK :: Services :: Identitystore diff --git a/services/imagebuilder/pom.xml b/services/imagebuilder/pom.xml index 8847912112c6..5931fd39f235 100644 --- a/services/imagebuilder/pom.xml +++ b/services/imagebuilder/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 imagebuilder AWS Java SDK :: Services :: Imagebuilder diff --git a/services/inspector/pom.xml b/services/inspector/pom.xml index b7768a415a98..203a28178037 100644 --- a/services/inspector/pom.xml +++ b/services/inspector/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 inspector AWS Java SDK :: Services :: Amazon Inspector Service diff --git a/services/inspector2/pom.xml b/services/inspector2/pom.xml index 7b0f36acc15d..626cb27cfc9c 100644 --- a/services/inspector2/pom.xml +++ b/services/inspector2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 inspector2 AWS Java SDK :: Services :: Inspector2 diff --git a/services/inspectorscan/pom.xml b/services/inspectorscan/pom.xml index 5a97d167032d..9ef82226427b 100644 --- a/services/inspectorscan/pom.xml +++ b/services/inspectorscan/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 inspectorscan AWS Java SDK :: Services :: Inspector Scan diff --git a/services/internetmonitor/pom.xml b/services/internetmonitor/pom.xml index 246eb57241a5..aaf02ff83dac 100644 --- a/services/internetmonitor/pom.xml +++ b/services/internetmonitor/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 internetmonitor AWS Java SDK :: Services :: Internet Monitor diff --git a/services/iot/pom.xml b/services/iot/pom.xml index 9eac0db6ddc3..5fb4425084fe 100644 --- a/services/iot/pom.xml +++ b/services/iot/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iot AWS Java SDK :: Services :: AWS IoT diff --git a/services/iot1clickdevices/pom.xml b/services/iot1clickdevices/pom.xml index 62d07de56ea9..a36208d6af0f 100644 --- a/services/iot1clickdevices/pom.xml +++ b/services/iot1clickdevices/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iot1clickdevices AWS Java SDK :: Services :: IoT 1Click Devices Service diff --git a/services/iot1clickprojects/pom.xml b/services/iot1clickprojects/pom.xml index 8b03b0001b08..3d7a871ea2c6 100644 --- a/services/iot1clickprojects/pom.xml +++ b/services/iot1clickprojects/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iot1clickprojects AWS Java SDK :: Services :: IoT 1Click Projects diff --git a/services/iotanalytics/pom.xml b/services/iotanalytics/pom.xml index 34acf7687523..49510ad59537 100644 --- a/services/iotanalytics/pom.xml +++ b/services/iotanalytics/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotanalytics AWS Java SDK :: Services :: IoTAnalytics diff --git a/services/iotdataplane/pom.xml b/services/iotdataplane/pom.xml index d5d1cdeca7f7..add0aa9402ca 100644 --- a/services/iotdataplane/pom.xml +++ b/services/iotdataplane/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotdataplane AWS Java SDK :: Services :: AWS IoT Data Plane diff --git a/services/iotdeviceadvisor/pom.xml b/services/iotdeviceadvisor/pom.xml index 17dc54012bb3..db24892c7627 100644 --- a/services/iotdeviceadvisor/pom.xml +++ b/services/iotdeviceadvisor/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotdeviceadvisor AWS Java SDK :: Services :: Iot Device Advisor diff --git a/services/iotevents/pom.xml b/services/iotevents/pom.xml index eae938d066ac..791fbe2cd7df 100644 --- a/services/iotevents/pom.xml +++ b/services/iotevents/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotevents AWS Java SDK :: Services :: IoT Events diff --git a/services/ioteventsdata/pom.xml b/services/ioteventsdata/pom.xml index 359233449360..e618e31c0682 100644 --- a/services/ioteventsdata/pom.xml +++ b/services/ioteventsdata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ioteventsdata AWS Java SDK :: Services :: IoT Events Data diff --git a/services/iotfleethub/pom.xml b/services/iotfleethub/pom.xml index f807036dcf05..c8850c40d2cd 100644 --- a/services/iotfleethub/pom.xml +++ b/services/iotfleethub/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotfleethub AWS Java SDK :: Services :: Io T Fleet Hub diff --git a/services/iotfleetwise/pom.xml b/services/iotfleetwise/pom.xml index 35edd538738b..ba6a8b1f8220 100644 --- a/services/iotfleetwise/pom.xml +++ b/services/iotfleetwise/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotfleetwise AWS Java SDK :: Services :: Io T Fleet Wise diff --git a/services/iotjobsdataplane/pom.xml b/services/iotjobsdataplane/pom.xml index daf19a3babb0..d5f0f7ddfd41 100644 --- a/services/iotjobsdataplane/pom.xml +++ b/services/iotjobsdataplane/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotjobsdataplane AWS Java SDK :: Services :: IoT Jobs Data Plane diff --git a/services/iotsecuretunneling/pom.xml b/services/iotsecuretunneling/pom.xml index e233fa104cd4..bd5b1ecb8bd0 100644 --- a/services/iotsecuretunneling/pom.xml +++ b/services/iotsecuretunneling/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotsecuretunneling AWS Java SDK :: Services :: IoTSecureTunneling diff --git a/services/iotsitewise/pom.xml b/services/iotsitewise/pom.xml index d0d2b3fda315..0631c24d9ce1 100644 --- a/services/iotsitewise/pom.xml +++ b/services/iotsitewise/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotsitewise AWS Java SDK :: Services :: Io T Site Wise diff --git a/services/iotthingsgraph/pom.xml b/services/iotthingsgraph/pom.xml index e837dbeab8f2..c8412a1f3784 100644 --- a/services/iotthingsgraph/pom.xml +++ b/services/iotthingsgraph/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotthingsgraph AWS Java SDK :: Services :: IoTThingsGraph diff --git a/services/iottwinmaker/pom.xml b/services/iottwinmaker/pom.xml index d61efc048aa8..2da1fb5017d3 100644 --- a/services/iottwinmaker/pom.xml +++ b/services/iottwinmaker/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iottwinmaker AWS Java SDK :: Services :: Io T Twin Maker diff --git a/services/iotwireless/pom.xml b/services/iotwireless/pom.xml index 5c97f9091c22..e59dd1712ecf 100644 --- a/services/iotwireless/pom.xml +++ b/services/iotwireless/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 iotwireless AWS Java SDK :: Services :: IoT Wireless diff --git a/services/ivs/pom.xml b/services/ivs/pom.xml index fa72837ccba7..c05475959950 100644 --- a/services/ivs/pom.xml +++ b/services/ivs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ivs AWS Java SDK :: Services :: Ivs diff --git a/services/ivschat/pom.xml b/services/ivschat/pom.xml index 53a635e5c1cd..333e7bf57b43 100644 --- a/services/ivschat/pom.xml +++ b/services/ivschat/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ivschat AWS Java SDK :: Services :: Ivschat diff --git a/services/ivsrealtime/pom.xml b/services/ivsrealtime/pom.xml index e03b78788a05..156a18b39135 100644 --- a/services/ivsrealtime/pom.xml +++ b/services/ivsrealtime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ivsrealtime AWS Java SDK :: Services :: IVS Real Time diff --git a/services/kafka/pom.xml b/services/kafka/pom.xml index a2eae18c4187..4d7d159a8a45 100644 --- a/services/kafka/pom.xml +++ b/services/kafka/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kafka AWS Java SDK :: Services :: Kafka diff --git a/services/kafkaconnect/pom.xml b/services/kafkaconnect/pom.xml index 9bd4385e5903..23ce7ad04880 100644 --- a/services/kafkaconnect/pom.xml +++ b/services/kafkaconnect/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kafkaconnect AWS Java SDK :: Services :: Kafka Connect diff --git a/services/kendra/pom.xml b/services/kendra/pom.xml index b1dbe30c3ee4..d53ff2bf67df 100644 --- a/services/kendra/pom.xml +++ b/services/kendra/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kendra AWS Java SDK :: Services :: Kendra diff --git a/services/kendraranking/pom.xml b/services/kendraranking/pom.xml index a0bd93de6ff1..23e006899261 100644 --- a/services/kendraranking/pom.xml +++ b/services/kendraranking/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kendraranking AWS Java SDK :: Services :: Kendra Ranking diff --git a/services/keyspaces/pom.xml b/services/keyspaces/pom.xml index a90433c0871c..2a73c5f02866 100644 --- a/services/keyspaces/pom.xml +++ b/services/keyspaces/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 keyspaces AWS Java SDK :: Services :: Keyspaces diff --git a/services/kinesis/pom.xml b/services/kinesis/pom.xml index 00343e803697..eafec5164d79 100644 --- a/services/kinesis/pom.xml +++ b/services/kinesis/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kinesis AWS Java SDK :: Services :: Amazon Kinesis diff --git a/services/kinesisanalytics/pom.xml b/services/kinesisanalytics/pom.xml index bc558491aa6a..49fa04a6e439 100644 --- a/services/kinesisanalytics/pom.xml +++ b/services/kinesisanalytics/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kinesisanalytics AWS Java SDK :: Services :: Amazon Kinesis Analytics diff --git a/services/kinesisanalyticsv2/pom.xml b/services/kinesisanalyticsv2/pom.xml index 30633eb7f277..8756e43c49ed 100644 --- a/services/kinesisanalyticsv2/pom.xml +++ b/services/kinesisanalyticsv2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kinesisanalyticsv2 AWS Java SDK :: Services :: Kinesis Analytics V2 diff --git a/services/kinesisvideo/pom.xml b/services/kinesisvideo/pom.xml index 17b7965bd0c5..ab60a8cf53f7 100644 --- a/services/kinesisvideo/pom.xml +++ b/services/kinesisvideo/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 kinesisvideo diff --git a/services/kinesisvideoarchivedmedia/pom.xml b/services/kinesisvideoarchivedmedia/pom.xml index 9f614636fc28..c7eb28d9400b 100644 --- a/services/kinesisvideoarchivedmedia/pom.xml +++ b/services/kinesisvideoarchivedmedia/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kinesisvideoarchivedmedia AWS Java SDK :: Services :: Kinesis Video Archived Media diff --git a/services/kinesisvideomedia/pom.xml b/services/kinesisvideomedia/pom.xml index eded59999369..f73773443009 100644 --- a/services/kinesisvideomedia/pom.xml +++ b/services/kinesisvideomedia/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kinesisvideomedia AWS Java SDK :: Services :: Kinesis Video Media diff --git a/services/kinesisvideosignaling/pom.xml b/services/kinesisvideosignaling/pom.xml index 9ec660fb1535..3152718b7f82 100644 --- a/services/kinesisvideosignaling/pom.xml +++ b/services/kinesisvideosignaling/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kinesisvideosignaling AWS Java SDK :: Services :: Kinesis Video Signaling diff --git a/services/kinesisvideowebrtcstorage/pom.xml b/services/kinesisvideowebrtcstorage/pom.xml index c1a92a335157..f200583de8a6 100644 --- a/services/kinesisvideowebrtcstorage/pom.xml +++ b/services/kinesisvideowebrtcstorage/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kinesisvideowebrtcstorage AWS Java SDK :: Services :: Kinesis Video Web RTC Storage diff --git a/services/kms/pom.xml b/services/kms/pom.xml index f31b7464068b..f89943e19ed5 100644 --- a/services/kms/pom.xml +++ b/services/kms/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 kms AWS Java SDK :: Services :: AWS KMS diff --git a/services/lakeformation/pom.xml b/services/lakeformation/pom.xml index d68d12e34aaa..e5499c15c1aa 100644 --- a/services/lakeformation/pom.xml +++ b/services/lakeformation/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lakeformation AWS Java SDK :: Services :: LakeFormation diff --git a/services/lambda/pom.xml b/services/lambda/pom.xml index 988f8dd794e1..392ae86b5d8a 100644 --- a/services/lambda/pom.xml +++ b/services/lambda/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lambda AWS Java SDK :: Services :: AWS Lambda diff --git a/services/launchwizard/pom.xml b/services/launchwizard/pom.xml index 644582b03082..09f27184930d 100644 --- a/services/launchwizard/pom.xml +++ b/services/launchwizard/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 launchwizard AWS Java SDK :: Services :: Launch Wizard diff --git a/services/lexmodelbuilding/pom.xml b/services/lexmodelbuilding/pom.xml index c0f012447a42..4588e7d754e1 100644 --- a/services/lexmodelbuilding/pom.xml +++ b/services/lexmodelbuilding/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lexmodelbuilding AWS Java SDK :: Services :: Amazon Lex Model Building diff --git a/services/lexmodelsv2/pom.xml b/services/lexmodelsv2/pom.xml index 23ec74ca45ad..983c025eab2c 100644 --- a/services/lexmodelsv2/pom.xml +++ b/services/lexmodelsv2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lexmodelsv2 AWS Java SDK :: Services :: Lex Models V2 diff --git a/services/lexruntime/pom.xml b/services/lexruntime/pom.xml index 0021d48a6b25..469f66647b40 100644 --- a/services/lexruntime/pom.xml +++ b/services/lexruntime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lexruntime AWS Java SDK :: Services :: Amazon Lex Runtime diff --git a/services/lexruntimev2/pom.xml b/services/lexruntimev2/pom.xml index 2c192a70f58b..8290fc2fba8b 100644 --- a/services/lexruntimev2/pom.xml +++ b/services/lexruntimev2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lexruntimev2 AWS Java SDK :: Services :: Lex Runtime V2 diff --git a/services/licensemanager/pom.xml b/services/licensemanager/pom.xml index 22e6b7c19441..df91839db9e2 100644 --- a/services/licensemanager/pom.xml +++ b/services/licensemanager/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 licensemanager AWS Java SDK :: Services :: License Manager diff --git a/services/licensemanagerlinuxsubscriptions/pom.xml b/services/licensemanagerlinuxsubscriptions/pom.xml index aee7f41e96ce..03391ae5147f 100644 --- a/services/licensemanagerlinuxsubscriptions/pom.xml +++ b/services/licensemanagerlinuxsubscriptions/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 licensemanagerlinuxsubscriptions AWS Java SDK :: Services :: License Manager Linux Subscriptions diff --git a/services/licensemanagerusersubscriptions/pom.xml b/services/licensemanagerusersubscriptions/pom.xml index 21fd3e8df907..3f8008d33a13 100644 --- a/services/licensemanagerusersubscriptions/pom.xml +++ b/services/licensemanagerusersubscriptions/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 licensemanagerusersubscriptions AWS Java SDK :: Services :: License Manager User Subscriptions diff --git a/services/lightsail/pom.xml b/services/lightsail/pom.xml index ca4a497659c1..ce836dd9ca5f 100644 --- a/services/lightsail/pom.xml +++ b/services/lightsail/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lightsail AWS Java SDK :: Services :: Amazon Lightsail diff --git a/services/location/pom.xml b/services/location/pom.xml index 218fa93439f4..dca617704d45 100644 --- a/services/location/pom.xml +++ b/services/location/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 location AWS Java SDK :: Services :: Location diff --git a/services/lookoutequipment/pom.xml b/services/lookoutequipment/pom.xml index 25e5b10ed274..b3314740f859 100644 --- a/services/lookoutequipment/pom.xml +++ b/services/lookoutequipment/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lookoutequipment AWS Java SDK :: Services :: Lookout Equipment diff --git a/services/lookoutmetrics/pom.xml b/services/lookoutmetrics/pom.xml index 1dfbf8746413..8a4557a1f382 100644 --- a/services/lookoutmetrics/pom.xml +++ b/services/lookoutmetrics/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lookoutmetrics AWS Java SDK :: Services :: Lookout Metrics diff --git a/services/lookoutvision/pom.xml b/services/lookoutvision/pom.xml index 7132177dc581..292f0d323feb 100644 --- a/services/lookoutvision/pom.xml +++ b/services/lookoutvision/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 lookoutvision AWS Java SDK :: Services :: Lookout Vision diff --git a/services/m2/pom.xml b/services/m2/pom.xml index aa6e21834553..08a9c779ee95 100644 --- a/services/m2/pom.xml +++ b/services/m2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 m2 AWS Java SDK :: Services :: M2 diff --git a/services/machinelearning/pom.xml b/services/machinelearning/pom.xml index 4f6dc6b803a4..701e51125962 100644 --- a/services/machinelearning/pom.xml +++ b/services/machinelearning/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 machinelearning AWS Java SDK :: Services :: Amazon Machine Learning diff --git a/services/macie2/pom.xml b/services/macie2/pom.xml index e34ab13e0ebf..72d460c7cf4a 100644 --- a/services/macie2/pom.xml +++ b/services/macie2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 macie2 AWS Java SDK :: Services :: Macie2 diff --git a/services/managedblockchain/pom.xml b/services/managedblockchain/pom.xml index 9719c3169e15..1a82d817c942 100644 --- a/services/managedblockchain/pom.xml +++ b/services/managedblockchain/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 managedblockchain AWS Java SDK :: Services :: ManagedBlockchain diff --git a/services/managedblockchainquery/pom.xml b/services/managedblockchainquery/pom.xml index 971b8bdf1f31..382e27e1999b 100644 --- a/services/managedblockchainquery/pom.xml +++ b/services/managedblockchainquery/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 managedblockchainquery AWS Java SDK :: Services :: Managed Blockchain Query diff --git a/services/marketplaceagreement/pom.xml b/services/marketplaceagreement/pom.xml index 24d6f005d76b..969ca4e5583a 100644 --- a/services/marketplaceagreement/pom.xml +++ b/services/marketplaceagreement/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 marketplaceagreement AWS Java SDK :: Services :: Marketplace Agreement diff --git a/services/marketplacecatalog/pom.xml b/services/marketplacecatalog/pom.xml index 2bdf68454c05..6f5a267702a9 100644 --- a/services/marketplacecatalog/pom.xml +++ b/services/marketplacecatalog/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 marketplacecatalog AWS Java SDK :: Services :: Marketplace Catalog diff --git a/services/marketplacecommerceanalytics/pom.xml b/services/marketplacecommerceanalytics/pom.xml index 58a998c42a05..d49e8928a9a9 100644 --- a/services/marketplacecommerceanalytics/pom.xml +++ b/services/marketplacecommerceanalytics/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 marketplacecommerceanalytics AWS Java SDK :: Services :: AWS Marketplace Commerce Analytics diff --git a/services/marketplacedeployment/pom.xml b/services/marketplacedeployment/pom.xml index 30f981582cc9..d67920c01279 100644 --- a/services/marketplacedeployment/pom.xml +++ b/services/marketplacedeployment/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 marketplacedeployment AWS Java SDK :: Services :: Marketplace Deployment diff --git a/services/marketplaceentitlement/pom.xml b/services/marketplaceentitlement/pom.xml index 563743e1d241..3cd6b64114e0 100644 --- a/services/marketplaceentitlement/pom.xml +++ b/services/marketplaceentitlement/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 marketplaceentitlement AWS Java SDK :: Services :: AWS Marketplace Entitlement diff --git a/services/marketplacemetering/pom.xml b/services/marketplacemetering/pom.xml index c19b76ecac09..cb2d6dfcbf08 100644 --- a/services/marketplacemetering/pom.xml +++ b/services/marketplacemetering/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 marketplacemetering AWS Java SDK :: Services :: AWS Marketplace Metering Service diff --git a/services/mediaconnect/pom.xml b/services/mediaconnect/pom.xml index 533d57d08f88..baf29551b4af 100644 --- a/services/mediaconnect/pom.xml +++ b/services/mediaconnect/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 mediaconnect AWS Java SDK :: Services :: MediaConnect diff --git a/services/mediaconvert/pom.xml b/services/mediaconvert/pom.xml index 40fed44c43c7..646dc7417a1c 100644 --- a/services/mediaconvert/pom.xml +++ b/services/mediaconvert/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 mediaconvert diff --git a/services/medialive/pom.xml b/services/medialive/pom.xml index f44b594363a9..b03b81869f1f 100644 --- a/services/medialive/pom.xml +++ b/services/medialive/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 medialive diff --git a/services/mediapackage/pom.xml b/services/mediapackage/pom.xml index 4593e0b7d8a9..f0122c67730b 100644 --- a/services/mediapackage/pom.xml +++ b/services/mediapackage/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 mediapackage diff --git a/services/mediapackagev2/pom.xml b/services/mediapackagev2/pom.xml index f43a8388b818..73992945507a 100644 --- a/services/mediapackagev2/pom.xml +++ b/services/mediapackagev2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 mediapackagev2 AWS Java SDK :: Services :: Media Package V2 diff --git a/services/mediapackagevod/pom.xml b/services/mediapackagevod/pom.xml index 3587595f34c8..7db118b3bdad 100644 --- a/services/mediapackagevod/pom.xml +++ b/services/mediapackagevod/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 mediapackagevod AWS Java SDK :: Services :: MediaPackage Vod diff --git a/services/mediastore/pom.xml b/services/mediastore/pom.xml index 0ac3fceb1572..be2a73460b91 100644 --- a/services/mediastore/pom.xml +++ b/services/mediastore/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 mediastore diff --git a/services/mediastoredata/pom.xml b/services/mediastoredata/pom.xml index b73ddd12e49c..96ab4c56e3db 100644 --- a/services/mediastoredata/pom.xml +++ b/services/mediastoredata/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 mediastoredata diff --git a/services/mediatailor/pom.xml b/services/mediatailor/pom.xml index 97a5b0007f90..94730665cfa2 100644 --- a/services/mediatailor/pom.xml +++ b/services/mediatailor/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 mediatailor AWS Java SDK :: Services :: MediaTailor diff --git a/services/medicalimaging/pom.xml b/services/medicalimaging/pom.xml index f4fdc1eeaba3..459d6316213d 100644 --- a/services/medicalimaging/pom.xml +++ b/services/medicalimaging/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 medicalimaging AWS Java SDK :: Services :: Medical Imaging diff --git a/services/memorydb/pom.xml b/services/memorydb/pom.xml index b0ca52794345..d231c83f142d 100644 --- a/services/memorydb/pom.xml +++ b/services/memorydb/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 memorydb AWS Java SDK :: Services :: Memory DB diff --git a/services/mgn/pom.xml b/services/mgn/pom.xml index b375cd09a282..4818c6c7fa6d 100644 --- a/services/mgn/pom.xml +++ b/services/mgn/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 mgn AWS Java SDK :: Services :: Mgn diff --git a/services/migrationhub/pom.xml b/services/migrationhub/pom.xml index 8e78e7f7afe7..a11a24d3140a 100644 --- a/services/migrationhub/pom.xml +++ b/services/migrationhub/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 migrationhub diff --git a/services/migrationhubconfig/pom.xml b/services/migrationhubconfig/pom.xml index eb01e0ea9af4..490e3bff4ddd 100644 --- a/services/migrationhubconfig/pom.xml +++ b/services/migrationhubconfig/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 migrationhubconfig AWS Java SDK :: Services :: MigrationHub Config diff --git a/services/migrationhuborchestrator/pom.xml b/services/migrationhuborchestrator/pom.xml index 3fb9f2c585bd..7d45104ef500 100644 --- a/services/migrationhuborchestrator/pom.xml +++ b/services/migrationhuborchestrator/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 migrationhuborchestrator AWS Java SDK :: Services :: Migration Hub Orchestrator diff --git a/services/migrationhubrefactorspaces/pom.xml b/services/migrationhubrefactorspaces/pom.xml index 18bf1a4ba3d9..062958d2439a 100644 --- a/services/migrationhubrefactorspaces/pom.xml +++ b/services/migrationhubrefactorspaces/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 migrationhubrefactorspaces AWS Java SDK :: Services :: Migration Hub Refactor Spaces diff --git a/services/migrationhubstrategy/pom.xml b/services/migrationhubstrategy/pom.xml index 47ecf021f0f2..4ab6dc0ef96b 100644 --- a/services/migrationhubstrategy/pom.xml +++ b/services/migrationhubstrategy/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 migrationhubstrategy AWS Java SDK :: Services :: Migration Hub Strategy diff --git a/services/mobile/pom.xml b/services/mobile/pom.xml index 6ffd984e4c6a..b53e2e8ecf5c 100644 --- a/services/mobile/pom.xml +++ b/services/mobile/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 mobile diff --git a/services/mq/pom.xml b/services/mq/pom.xml index b70b9c348c8f..f27b762cf29b 100644 --- a/services/mq/pom.xml +++ b/services/mq/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 mq diff --git a/services/mturk/pom.xml b/services/mturk/pom.xml index 3df74e0abe85..1da9e1cea6c6 100644 --- a/services/mturk/pom.xml +++ b/services/mturk/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 mturk AWS Java SDK :: Services :: Amazon Mechanical Turk Requester diff --git a/services/mwaa/pom.xml b/services/mwaa/pom.xml index 94b5f1a99108..bcb5a51a8bd4 100644 --- a/services/mwaa/pom.xml +++ b/services/mwaa/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 mwaa AWS Java SDK :: Services :: MWAA diff --git a/services/neptune/pom.xml b/services/neptune/pom.xml index 66242e716f91..3a81e5cb53e4 100644 --- a/services/neptune/pom.xml +++ b/services/neptune/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 neptune AWS Java SDK :: Services :: Neptune diff --git a/services/neptunedata/pom.xml b/services/neptunedata/pom.xml index fcba242bd501..518198d8299c 100644 --- a/services/neptunedata/pom.xml +++ b/services/neptunedata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 neptunedata AWS Java SDK :: Services :: Neptunedata diff --git a/services/neptunegraph/pom.xml b/services/neptunegraph/pom.xml index 5f12f512923f..4f9dd49e489c 100644 --- a/services/neptunegraph/pom.xml +++ b/services/neptunegraph/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 neptunegraph AWS Java SDK :: Services :: Neptune Graph diff --git a/services/networkfirewall/pom.xml b/services/networkfirewall/pom.xml index f1ca7c8a2415..a8f0208acecc 100644 --- a/services/networkfirewall/pom.xml +++ b/services/networkfirewall/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 networkfirewall AWS Java SDK :: Services :: Network Firewall diff --git a/services/networkmanager/pom.xml b/services/networkmanager/pom.xml index e6c692e03f23..203764a0b3eb 100644 --- a/services/networkmanager/pom.xml +++ b/services/networkmanager/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 networkmanager AWS Java SDK :: Services :: NetworkManager diff --git a/services/networkmonitor/pom.xml b/services/networkmonitor/pom.xml index 2bd50e770ba5..9087b3ef5eaf 100644 --- a/services/networkmonitor/pom.xml +++ b/services/networkmonitor/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 networkmonitor AWS Java SDK :: Services :: Network Monitor diff --git a/services/nimble/pom.xml b/services/nimble/pom.xml index 0ab04b9d4802..da9dc95ba1c6 100644 --- a/services/nimble/pom.xml +++ b/services/nimble/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 nimble AWS Java SDK :: Services :: Nimble diff --git a/services/oam/pom.xml b/services/oam/pom.xml index 2624c6e51a72..8873a30bc1c3 100644 --- a/services/oam/pom.xml +++ b/services/oam/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 oam AWS Java SDK :: Services :: OAM diff --git a/services/omics/pom.xml b/services/omics/pom.xml index 3b03278443ba..acb6c3548ba4 100644 --- a/services/omics/pom.xml +++ b/services/omics/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 omics AWS Java SDK :: Services :: Omics diff --git a/services/opensearch/pom.xml b/services/opensearch/pom.xml index 250ab698aa03..513f47c5109f 100644 --- a/services/opensearch/pom.xml +++ b/services/opensearch/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 opensearch AWS Java SDK :: Services :: Open Search diff --git a/services/opensearchserverless/pom.xml b/services/opensearchserverless/pom.xml index 9915b9cbcfdb..17e4876b2262 100644 --- a/services/opensearchserverless/pom.xml +++ b/services/opensearchserverless/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 opensearchserverless AWS Java SDK :: Services :: Open Search Serverless diff --git a/services/opsworks/pom.xml b/services/opsworks/pom.xml index 18d77d6d446f..91ab316e24d2 100644 --- a/services/opsworks/pom.xml +++ b/services/opsworks/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 opsworks AWS Java SDK :: Services :: AWS OpsWorks diff --git a/services/opsworkscm/pom.xml b/services/opsworkscm/pom.xml index daf03384f46b..0681683e2c76 100644 --- a/services/opsworkscm/pom.xml +++ b/services/opsworkscm/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 opsworkscm AWS Java SDK :: Services :: AWS OpsWorks for Chef Automate diff --git a/services/organizations/pom.xml b/services/organizations/pom.xml index 4ef3c95f11f2..c6ab21ab7f97 100644 --- a/services/organizations/pom.xml +++ b/services/organizations/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 organizations AWS Java SDK :: Services :: AWS Organizations diff --git a/services/osis/pom.xml b/services/osis/pom.xml index 4a719b2e4c2d..ef773362320c 100644 --- a/services/osis/pom.xml +++ b/services/osis/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 osis AWS Java SDK :: Services :: OSIS diff --git a/services/outposts/pom.xml b/services/outposts/pom.xml index 57d292cb6b3e..369b88afeede 100644 --- a/services/outposts/pom.xml +++ b/services/outposts/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 outposts AWS Java SDK :: Services :: Outposts diff --git a/services/panorama/pom.xml b/services/panorama/pom.xml index 037876fd299e..83e61c78839c 100644 --- a/services/panorama/pom.xml +++ b/services/panorama/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 panorama AWS Java SDK :: Services :: Panorama diff --git a/services/paymentcryptography/pom.xml b/services/paymentcryptography/pom.xml index e66dce121207..e8612c5731fd 100644 --- a/services/paymentcryptography/pom.xml +++ b/services/paymentcryptography/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 paymentcryptography AWS Java SDK :: Services :: Payment Cryptography diff --git a/services/paymentcryptographydata/pom.xml b/services/paymentcryptographydata/pom.xml index 95284dbd5580..0d517b0706ee 100644 --- a/services/paymentcryptographydata/pom.xml +++ b/services/paymentcryptographydata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 paymentcryptographydata AWS Java SDK :: Services :: Payment Cryptography Data diff --git a/services/pcaconnectorad/pom.xml b/services/pcaconnectorad/pom.xml index a97b4439224a..b1ce0fe1185b 100644 --- a/services/pcaconnectorad/pom.xml +++ b/services/pcaconnectorad/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 pcaconnectorad AWS Java SDK :: Services :: Pca Connector Ad diff --git a/services/personalize/pom.xml b/services/personalize/pom.xml index b70cf2df1c52..83c140142066 100644 --- a/services/personalize/pom.xml +++ b/services/personalize/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 personalize AWS Java SDK :: Services :: Personalize diff --git a/services/personalizeevents/pom.xml b/services/personalizeevents/pom.xml index 7459c3ce8501..74b4f471370e 100644 --- a/services/personalizeevents/pom.xml +++ b/services/personalizeevents/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 personalizeevents AWS Java SDK :: Services :: Personalize Events diff --git a/services/personalizeruntime/pom.xml b/services/personalizeruntime/pom.xml index fb10fa5b3e28..40983a49bb77 100644 --- a/services/personalizeruntime/pom.xml +++ b/services/personalizeruntime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 personalizeruntime AWS Java SDK :: Services :: Personalize Runtime diff --git a/services/pi/pom.xml b/services/pi/pom.xml index 2b7c21169c87..730da3fbc9e6 100644 --- a/services/pi/pom.xml +++ b/services/pi/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 pi AWS Java SDK :: Services :: PI diff --git a/services/pi/src/main/resources/codegen-resources/endpoint-rule-set.json b/services/pi/src/main/resources/codegen-resources/endpoint-rule-set.json index 2a013d4fe262..59d8979adddb 100644 --- a/services/pi/src/main/resources/codegen-resources/endpoint-rule-set.json +++ b/services/pi/src/main/resources/codegen-resources/endpoint-rule-set.json @@ -40,7 +40,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -83,7 +82,8 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [ @@ -96,7 +96,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -110,7 +109,6 @@ "assign": "PartitionResult" } ], - "type": "tree", "rules": [ { "conditions": [ @@ -133,7 +131,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -168,7 +165,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [], @@ -179,14 +175,16 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [], "error": "FIPS and DualStack are enabled, but this partition does not support one or both", "type": "error" } - ] + ], + "type": "tree" }, { "conditions": [ @@ -200,14 +198,12 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ { "fn": "booleanEquals", "argv": [ - true, { "fn": "getAttr", "argv": [ @@ -216,11 +212,11 @@ }, "supportsFIPS" ] - } + }, + true ] } ], - "type": "tree", "rules": [ { "conditions": [], @@ -231,14 +227,16 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [], "error": "FIPS is enabled but this partition does not support FIPS", "type": "error" } - ] + ], + "type": "tree" }, { "conditions": [ @@ -252,7 +250,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -272,7 +269,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [], @@ -283,14 +279,16 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [], "error": "DualStack is enabled but this partition does not support DualStack", "type": "error" } - ] + ], + "type": "tree" }, { "conditions": [], @@ -301,9 +299,11 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" } - ] + ], + "type": "tree" }, { "conditions": [], diff --git a/services/pi/src/main/resources/codegen-resources/service-2.json b/services/pi/src/main/resources/codegen-resources/service-2.json index d80c7e263126..5d997fdb2841 100644 --- a/services/pi/src/main/resources/codegen-resources/service-2.json +++ b/services/pi/src/main/resources/codegen-resources/service-2.json @@ -117,7 +117,7 @@ {"shape":"InternalServiceError"}, {"shape":"NotAuthorizedException"} ], - "documentation":"

Retrieve Performance Insights metrics for a set of data sources over a time period. You can provide specific dimension groups and dimensions, and provide aggregation and filtering criteria for each group.

Each response element returns a maximum of 500 bytes. For larger elements, such as SQL statements, only the first 500 bytes are returned.

" + "documentation":"

Retrieve Performance Insights metrics for a set of data sources over a time period. You can provide specific dimension groups and dimensions, and provide filtering criteria for each group. You must specify an aggregate function for each metric.

Each response element returns a maximum of 500 bytes. For larger elements, such as SQL statements, only the first 500 bytes are returned.

" }, "ListAvailableResourceDimensions":{ "name":"ListAvailableResourceDimensions", @@ -807,7 +807,7 @@ }, "MetricQueries":{ "shape":"MetricQueryList", - "documentation":"

An array of one or more queries to perform. Each query must specify a Performance Insights metric, and can optionally specify aggregation and filtering criteria.

" + "documentation":"

An array of one or more queries to perform. Each query must specify a Performance Insights metric and specify an aggregate function, and you can provide filtering criteria. You must append the aggregate function to the metric. For example, to find the average for the metric db.load you must use db.load.avg. Valid values for aggregate functions include .avg, .min, .max, and .sum.

" }, "StartTime":{ "shape":"ISOTimestamp", @@ -1153,7 +1153,7 @@ "members":{ "Metric":{ "shape":"RequestString", - "documentation":"

The name of a Performance Insights metric to be measured.

Valid values for Metric are:

  • db.load.avg - A scaled representation of the number of active sessions for the database engine.

  • db.sampledload.avg - The raw number of active sessions for the database engine.

  • The counter metrics listed in Performance Insights operating system counters in the Amazon Aurora User Guide.

If the number of active sessions is less than an internal Performance Insights threshold, db.load.avg and db.sampledload.avg are the same value. If the number of active sessions is greater than the internal threshold, Performance Insights samples the active sessions, with db.load.avg showing the scaled values, db.sampledload.avg showing the raw values, and db.sampledload.avg less than db.load.avg. For most use cases, you can query db.load.avg only.

" + "documentation":"

The name of a Performance Insights metric to be measured.

Valid values for Metric are:

If the number of active sessions is less than an internal Performance Insights threshold, db.load.avg and db.sampledload.avg are the same value. If the number of active sessions is greater than the internal threshold, Performance Insights samples the active sessions, with db.load.avg showing the scaled values, db.sampledload.avg showing the raw values, and db.sampledload.avg less than db.load.avg. For most use cases, you can query db.load.avg only.

" }, "GroupBy":{ "shape":"DimensionGroup", @@ -1164,7 +1164,7 @@ "documentation":"

One or more filters to apply in the request. Restrictions:

  • Any number of filters by the same dimension, as specified in the GroupBy parameter.

  • A single filter for any other dimension in this dimension group.

" } }, - "documentation":"

A single query to be processed. You must provide the metric to query. If no other parameters are specified, Performance Insights returns all data points for the specified metric. Optionally, you can request that the data points be aggregated by dimension group (GroupBy), and return only those data points that match your criteria (Filter).

" + "documentation":"

A single query to be processed. You must provide the metric to query and append an aggregate function to the metric. For example, to find the average for the metric db.load you must use db.load.avg. Valid values for aggregate functions include .avg, .min, .max, and .sum. If no other parameters are specified, Performance Insights returns all data points for the specified metric. Optionally, you can request that the data points be aggregated by dimension group (GroupBy), and return only those data points that match your criteria (Filter).

" }, "MetricQueryFilterMap":{ "type":"map", @@ -1303,7 +1303,7 @@ "members":{ "Metric":{ "shape":"String", - "documentation":"

The name of a Performance Insights metric to be measured.

Valid values for Metric are:

  • db.load.avg - A scaled representation of the number of active sessions for the database engine.

  • db.sampledload.avg - The raw number of active sessions for the database engine.

  • The counter metrics listed in Performance Insights operating system counters in the Amazon Aurora User Guide.

If the number of active sessions is less than an internal Performance Insights threshold, db.load.avg and db.sampledload.avg are the same value. If the number of active sessions is greater than the internal threshold, Performance Insights samples the active sessions, with db.load.avg showing the scaled values, db.sampledload.avg showing the raw values, and db.sampledload.avg less than db.load.avg. For most use cases, you can query db.load.avg only.

" + "documentation":"

The name of a Performance Insights metric to be measured.

Valid values for Metric are:

If the number of active sessions is less than an internal Performance Insights threshold, db.load.avg and db.sampledload.avg are the same value. If the number of active sessions is greater than the internal threshold, Performance Insights samples the active sessions, with db.load.avg showing the scaled values, db.sampledload.avg showing the raw values, and db.sampledload.avg less than db.load.avg. For most use cases, you can query db.load.avg only.

" }, "Dimensions":{ "shape":"DimensionMap", diff --git a/services/pinpoint/pom.xml b/services/pinpoint/pom.xml index b54aad6c349b..2e322991dace 100644 --- a/services/pinpoint/pom.xml +++ b/services/pinpoint/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 pinpoint AWS Java SDK :: Services :: Amazon Pinpoint diff --git a/services/pinpointemail/pom.xml b/services/pinpointemail/pom.xml index 9df61f193386..b51da0779b27 100644 --- a/services/pinpointemail/pom.xml +++ b/services/pinpointemail/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 pinpointemail AWS Java SDK :: Services :: Pinpoint Email diff --git a/services/pinpointsmsvoice/pom.xml b/services/pinpointsmsvoice/pom.xml index d67b511840a3..83b95e2bd549 100644 --- a/services/pinpointsmsvoice/pom.xml +++ b/services/pinpointsmsvoice/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 pinpointsmsvoice AWS Java SDK :: Services :: Pinpoint SMS Voice diff --git a/services/pinpointsmsvoicev2/pom.xml b/services/pinpointsmsvoicev2/pom.xml index 0e62b9ad033a..eee3aab15016 100644 --- a/services/pinpointsmsvoicev2/pom.xml +++ b/services/pinpointsmsvoicev2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 pinpointsmsvoicev2 AWS Java SDK :: Services :: Pinpoint SMS Voice V2 diff --git a/services/pipes/pom.xml b/services/pipes/pom.xml index 9d601cbb8146..49b0b241ca96 100644 --- a/services/pipes/pom.xml +++ b/services/pipes/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 pipes AWS Java SDK :: Services :: Pipes diff --git a/services/polly/pom.xml b/services/polly/pom.xml index 28156dac2853..15cb707f77e4 100644 --- a/services/polly/pom.xml +++ b/services/polly/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 polly AWS Java SDK :: Services :: Amazon Polly diff --git a/services/pom.xml b/services/pom.xml index 59c30a61f1f1..a153696edccd 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 services AWS Java SDK :: Services diff --git a/services/pricing/pom.xml b/services/pricing/pom.xml index c263551c62de..b8fefa9bae0f 100644 --- a/services/pricing/pom.xml +++ b/services/pricing/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 pricing diff --git a/services/privatenetworks/pom.xml b/services/privatenetworks/pom.xml index f8422f76faed..e0f6edc4df8c 100644 --- a/services/privatenetworks/pom.xml +++ b/services/privatenetworks/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 privatenetworks AWS Java SDK :: Services :: Private Networks diff --git a/services/proton/pom.xml b/services/proton/pom.xml index ac71858a902a..fd330d9abac9 100644 --- a/services/proton/pom.xml +++ b/services/proton/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 proton AWS Java SDK :: Services :: Proton diff --git a/services/qbusiness/pom.xml b/services/qbusiness/pom.xml index 5713520af108..b0c41787941e 100644 --- a/services/qbusiness/pom.xml +++ b/services/qbusiness/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 qbusiness AWS Java SDK :: Services :: Q Business diff --git a/services/qconnect/pom.xml b/services/qconnect/pom.xml index 5a42fc2235e9..49c8b8096c7a 100644 --- a/services/qconnect/pom.xml +++ b/services/qconnect/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 qconnect AWS Java SDK :: Services :: Q Connect diff --git a/services/qldb/pom.xml b/services/qldb/pom.xml index 1babedec7c3d..209728186720 100644 --- a/services/qldb/pom.xml +++ b/services/qldb/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 qldb AWS Java SDK :: Services :: QLDB diff --git a/services/qldbsession/pom.xml b/services/qldbsession/pom.xml index 4fb7be26ad69..b4267170faeb 100644 --- a/services/qldbsession/pom.xml +++ b/services/qldbsession/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 qldbsession AWS Java SDK :: Services :: QLDB Session diff --git a/services/quicksight/pom.xml b/services/quicksight/pom.xml index 2a30ef0827a0..f98492f8921d 100644 --- a/services/quicksight/pom.xml +++ b/services/quicksight/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 quicksight AWS Java SDK :: Services :: QuickSight diff --git a/services/ram/pom.xml b/services/ram/pom.xml index 0525054fa6a0..3dcff48d862c 100644 --- a/services/ram/pom.xml +++ b/services/ram/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ram AWS Java SDK :: Services :: RAM diff --git a/services/rbin/pom.xml b/services/rbin/pom.xml index 2fe2e0e210fc..02b96e6e9914 100644 --- a/services/rbin/pom.xml +++ b/services/rbin/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 rbin AWS Java SDK :: Services :: Rbin diff --git a/services/rds/pom.xml b/services/rds/pom.xml index ee88ce9b3a40..6c1863812576 100644 --- a/services/rds/pom.xml +++ b/services/rds/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 rds AWS Java SDK :: Services :: Amazon RDS diff --git a/services/rds/src/main/resources/codegen-resources/service-2.json b/services/rds/src/main/resources/codegen-resources/service-2.json index 55711448b8d2..cd9417644dbf 100644 --- a/services/rds/src/main/resources/codegen-resources/service-2.json +++ b/services/rds/src/main/resources/codegen-resources/service-2.json @@ -12034,7 +12034,7 @@ "members":{ "ResourceArn":{ "shape":"String", - "documentation":"

The Amazon Resource Name (ARN) of the RDS for Oracle or Microsoft SQL Server DB instance. For example, arn:aws:rds:us-east-1:12345667890:instance:my-orcl-db.

" + "documentation":"

The Amazon Resource Name (ARN) of the RDS for Oracle or Microsoft SQL Server DB instance. For example, arn:aws:rds:us-east-1:12345667890:db:my-orcl-db.

" }, "AuditPolicyState":{ "shape":"AuditPolicyState", diff --git a/services/rdsdata/pom.xml b/services/rdsdata/pom.xml index b7dae457b670..744d91f089b4 100644 --- a/services/rdsdata/pom.xml +++ b/services/rdsdata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 rdsdata AWS Java SDK :: Services :: RDS Data diff --git a/services/redshift/pom.xml b/services/redshift/pom.xml index c83ce4e98af3..14d3b6cbc391 100644 --- a/services/redshift/pom.xml +++ b/services/redshift/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 redshift AWS Java SDK :: Services :: Amazon Redshift diff --git a/services/redshiftdata/pom.xml b/services/redshiftdata/pom.xml index 056d864323d9..9d89c6930b0e 100644 --- a/services/redshiftdata/pom.xml +++ b/services/redshiftdata/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 redshiftdata AWS Java SDK :: Services :: Redshift Data diff --git a/services/redshiftserverless/pom.xml b/services/redshiftserverless/pom.xml index 8f7b144dcd06..dc719367e9fc 100644 --- a/services/redshiftserverless/pom.xml +++ b/services/redshiftserverless/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 redshiftserverless AWS Java SDK :: Services :: Redshift Serverless diff --git a/services/rekognition/pom.xml b/services/rekognition/pom.xml index a5419c3b41d2..4fe7ad33a084 100644 --- a/services/rekognition/pom.xml +++ b/services/rekognition/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 rekognition AWS Java SDK :: Services :: Amazon Rekognition diff --git a/services/repostspace/pom.xml b/services/repostspace/pom.xml index ad5628306650..33323128419d 100644 --- a/services/repostspace/pom.xml +++ b/services/repostspace/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 repostspace AWS Java SDK :: Services :: Repostspace diff --git a/services/resiliencehub/pom.xml b/services/resiliencehub/pom.xml index 396245c939a4..1690a06a2d6c 100644 --- a/services/resiliencehub/pom.xml +++ b/services/resiliencehub/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 resiliencehub AWS Java SDK :: Services :: Resiliencehub diff --git a/services/resourceexplorer2/pom.xml b/services/resourceexplorer2/pom.xml index ee169965fffc..edd967e25e9c 100644 --- a/services/resourceexplorer2/pom.xml +++ b/services/resourceexplorer2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 resourceexplorer2 AWS Java SDK :: Services :: Resource Explorer 2 diff --git a/services/resourcegroups/pom.xml b/services/resourcegroups/pom.xml index a4e356458c4a..b799394c357c 100644 --- a/services/resourcegroups/pom.xml +++ b/services/resourcegroups/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 resourcegroups diff --git a/services/resourcegroupstaggingapi/pom.xml b/services/resourcegroupstaggingapi/pom.xml index 073630ff07fe..eabe52e9d9a1 100644 --- a/services/resourcegroupstaggingapi/pom.xml +++ b/services/resourcegroupstaggingapi/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 resourcegroupstaggingapi AWS Java SDK :: Services :: AWS Resource Groups Tagging API diff --git a/services/robomaker/pom.xml b/services/robomaker/pom.xml index b372b64309fe..fe0def424d29 100644 --- a/services/robomaker/pom.xml +++ b/services/robomaker/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 robomaker AWS Java SDK :: Services :: RoboMaker diff --git a/services/rolesanywhere/pom.xml b/services/rolesanywhere/pom.xml index b23904698b27..7542d64df0ab 100644 --- a/services/rolesanywhere/pom.xml +++ b/services/rolesanywhere/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 rolesanywhere AWS Java SDK :: Services :: Roles Anywhere diff --git a/services/route53/pom.xml b/services/route53/pom.xml index 15333c5496d1..0b4cea202138 100644 --- a/services/route53/pom.xml +++ b/services/route53/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 route53 AWS Java SDK :: Services :: Amazon Route53 diff --git a/services/route53domains/pom.xml b/services/route53domains/pom.xml index 09ad992bc745..c4153ee5e9db 100644 --- a/services/route53domains/pom.xml +++ b/services/route53domains/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 route53domains AWS Java SDK :: Services :: Amazon Route53 Domains diff --git a/services/route53profiles/pom.xml b/services/route53profiles/pom.xml index 059b894b83b5..29bbacc97edb 100644 --- a/services/route53profiles/pom.xml +++ b/services/route53profiles/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 route53profiles AWS Java SDK :: Services :: Route53 Profiles diff --git a/services/route53recoverycluster/pom.xml b/services/route53recoverycluster/pom.xml index a37cb0f9a034..d10e71b9814e 100644 --- a/services/route53recoverycluster/pom.xml +++ b/services/route53recoverycluster/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 route53recoverycluster AWS Java SDK :: Services :: Route53 Recovery Cluster diff --git a/services/route53recoverycontrolconfig/pom.xml b/services/route53recoverycontrolconfig/pom.xml index 53d67b756a4b..d7358a113894 100644 --- a/services/route53recoverycontrolconfig/pom.xml +++ b/services/route53recoverycontrolconfig/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 route53recoverycontrolconfig AWS Java SDK :: Services :: Route53 Recovery Control Config diff --git a/services/route53recoveryreadiness/pom.xml b/services/route53recoveryreadiness/pom.xml index c6f81ce2f07a..ec9835513b07 100644 --- a/services/route53recoveryreadiness/pom.xml +++ b/services/route53recoveryreadiness/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 route53recoveryreadiness AWS Java SDK :: Services :: Route53 Recovery Readiness diff --git a/services/route53resolver/pom.xml b/services/route53resolver/pom.xml index 87799940bc89..ea3ddc65d8ef 100644 --- a/services/route53resolver/pom.xml +++ b/services/route53resolver/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 route53resolver AWS Java SDK :: Services :: Route53Resolver diff --git a/services/rum/pom.xml b/services/rum/pom.xml index 8808ad85f25d..96faf902a9d8 100644 --- a/services/rum/pom.xml +++ b/services/rum/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 rum AWS Java SDK :: Services :: RUM diff --git a/services/s3/pom.xml b/services/s3/pom.xml index cc374743abbb..0dcee94335b3 100644 --- a/services/s3/pom.xml +++ b/services/s3/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 s3 AWS Java SDK :: Services :: Amazon S3 diff --git a/services/s3control/pom.xml b/services/s3control/pom.xml index 77a7e24d106e..ac6ebc8086aa 100644 --- a/services/s3control/pom.xml +++ b/services/s3control/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 s3control AWS Java SDK :: Services :: Amazon S3 Control diff --git a/services/s3outposts/pom.xml b/services/s3outposts/pom.xml index 4663e0860b88..f2e4aa633f3c 100644 --- a/services/s3outposts/pom.xml +++ b/services/s3outposts/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 s3outposts AWS Java SDK :: Services :: S3 Outposts diff --git a/services/sagemaker/pom.xml b/services/sagemaker/pom.xml index 6692997087b6..069857e2841a 100644 --- a/services/sagemaker/pom.xml +++ b/services/sagemaker/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 sagemaker diff --git a/services/sagemakera2iruntime/pom.xml b/services/sagemakera2iruntime/pom.xml index 2e305cc2d47b..049b886c3b57 100644 --- a/services/sagemakera2iruntime/pom.xml +++ b/services/sagemakera2iruntime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sagemakera2iruntime AWS Java SDK :: Services :: SageMaker A2I Runtime diff --git a/services/sagemakeredge/pom.xml b/services/sagemakeredge/pom.xml index 138735e41480..0f2937cf7561 100644 --- a/services/sagemakeredge/pom.xml +++ b/services/sagemakeredge/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sagemakeredge AWS Java SDK :: Services :: Sagemaker Edge diff --git a/services/sagemakerfeaturestoreruntime/pom.xml b/services/sagemakerfeaturestoreruntime/pom.xml index df416efb7b58..5530bc20ad1e 100644 --- a/services/sagemakerfeaturestoreruntime/pom.xml +++ b/services/sagemakerfeaturestoreruntime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sagemakerfeaturestoreruntime AWS Java SDK :: Services :: Sage Maker Feature Store Runtime diff --git a/services/sagemakergeospatial/pom.xml b/services/sagemakergeospatial/pom.xml index 25d572d452a7..0e68d387dc79 100644 --- a/services/sagemakergeospatial/pom.xml +++ b/services/sagemakergeospatial/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sagemakergeospatial AWS Java SDK :: Services :: Sage Maker Geospatial diff --git a/services/sagemakermetrics/pom.xml b/services/sagemakermetrics/pom.xml index 67a597a8faf6..7d1f25c3927f 100644 --- a/services/sagemakermetrics/pom.xml +++ b/services/sagemakermetrics/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sagemakermetrics AWS Java SDK :: Services :: Sage Maker Metrics diff --git a/services/sagemakerruntime/pom.xml b/services/sagemakerruntime/pom.xml index faf077d90466..5d8fb8ec4ef1 100644 --- a/services/sagemakerruntime/pom.xml +++ b/services/sagemakerruntime/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sagemakerruntime AWS Java SDK :: Services :: SageMaker Runtime diff --git a/services/savingsplans/pom.xml b/services/savingsplans/pom.xml index 12a92644809f..66461ea452ec 100644 --- a/services/savingsplans/pom.xml +++ b/services/savingsplans/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 savingsplans AWS Java SDK :: Services :: Savingsplans diff --git a/services/scheduler/pom.xml b/services/scheduler/pom.xml index 7ed37d802b06..767252963022 100644 --- a/services/scheduler/pom.xml +++ b/services/scheduler/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 scheduler AWS Java SDK :: Services :: Scheduler diff --git a/services/schemas/pom.xml b/services/schemas/pom.xml index ec8efedab10c..8ca44f768eea 100644 --- a/services/schemas/pom.xml +++ b/services/schemas/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 schemas AWS Java SDK :: Services :: Schemas diff --git a/services/secretsmanager/pom.xml b/services/secretsmanager/pom.xml index e1665385436a..00418bc93e17 100644 --- a/services/secretsmanager/pom.xml +++ b/services/secretsmanager/pom.xml @@ -22,7 +22,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 secretsmanager AWS Java SDK :: Services :: AWS Secrets Manager diff --git a/services/securityhub/pom.xml b/services/securityhub/pom.xml index 055a14db6c68..79bfd73e0a93 100644 --- a/services/securityhub/pom.xml +++ b/services/securityhub/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 securityhub AWS Java SDK :: Services :: SecurityHub diff --git a/services/securitylake/pom.xml b/services/securitylake/pom.xml index 0cc3e0211333..463ebf3f2fe8 100644 --- a/services/securitylake/pom.xml +++ b/services/securitylake/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 securitylake AWS Java SDK :: Services :: Security Lake diff --git a/services/serverlessapplicationrepository/pom.xml b/services/serverlessapplicationrepository/pom.xml index 231f23f0ee69..23525f4c492d 100644 --- a/services/serverlessapplicationrepository/pom.xml +++ b/services/serverlessapplicationrepository/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 serverlessapplicationrepository diff --git a/services/servicecatalog/pom.xml b/services/servicecatalog/pom.xml index 91e621dfa921..3f2fe9716807 100644 --- a/services/servicecatalog/pom.xml +++ b/services/servicecatalog/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 servicecatalog AWS Java SDK :: Services :: AWS Service Catalog diff --git a/services/servicecatalogappregistry/pom.xml b/services/servicecatalogappregistry/pom.xml index c8918672a5c5..9241ee6c8dc7 100644 --- a/services/servicecatalogappregistry/pom.xml +++ b/services/servicecatalogappregistry/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 servicecatalogappregistry AWS Java SDK :: Services :: Service Catalog App Registry diff --git a/services/servicediscovery/pom.xml b/services/servicediscovery/pom.xml index 7dbafb2482eb..15424554f7d4 100644 --- a/services/servicediscovery/pom.xml +++ b/services/servicediscovery/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 servicediscovery diff --git a/services/servicequotas/pom.xml b/services/servicequotas/pom.xml index 0afc74c9ed6a..43e05b0f9ca7 100644 --- a/services/servicequotas/pom.xml +++ b/services/servicequotas/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 servicequotas AWS Java SDK :: Services :: Service Quotas diff --git a/services/ses/pom.xml b/services/ses/pom.xml index bbaa018ba44c..68c2a6aed9be 100644 --- a/services/ses/pom.xml +++ b/services/ses/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ses AWS Java SDK :: Services :: Amazon SES diff --git a/services/sesv2/pom.xml b/services/sesv2/pom.xml index c4dfbcc6ae61..967ada0d5af2 100644 --- a/services/sesv2/pom.xml +++ b/services/sesv2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sesv2 AWS Java SDK :: Services :: SESv2 diff --git a/services/sfn/pom.xml b/services/sfn/pom.xml index 570dfa4236e6..2c2907b5e3e5 100644 --- a/services/sfn/pom.xml +++ b/services/sfn/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sfn AWS Java SDK :: Services :: AWS Step Functions diff --git a/services/shield/pom.xml b/services/shield/pom.xml index 75fdbd3fe078..f4953c5f807f 100644 --- a/services/shield/pom.xml +++ b/services/shield/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 shield AWS Java SDK :: Services :: AWS Shield diff --git a/services/signer/pom.xml b/services/signer/pom.xml index 260c4157e6e9..9d1e5d5cff75 100644 --- a/services/signer/pom.xml +++ b/services/signer/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 signer AWS Java SDK :: Services :: Signer diff --git a/services/simspaceweaver/pom.xml b/services/simspaceweaver/pom.xml index fef10104e4af..51911dc0b84d 100644 --- a/services/simspaceweaver/pom.xml +++ b/services/simspaceweaver/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 simspaceweaver AWS Java SDK :: Services :: Sim Space Weaver diff --git a/services/sms/pom.xml b/services/sms/pom.xml index 2340c3d12fa8..3fd390d5f2cd 100644 --- a/services/sms/pom.xml +++ b/services/sms/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sms AWS Java SDK :: Services :: AWS Server Migration diff --git a/services/snowball/pom.xml b/services/snowball/pom.xml index b89da48fc95d..1f98353fa22f 100644 --- a/services/snowball/pom.xml +++ b/services/snowball/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 snowball AWS Java SDK :: Services :: Amazon Snowball diff --git a/services/snowdevicemanagement/pom.xml b/services/snowdevicemanagement/pom.xml index dab752bfc7f8..c4862ee13357 100644 --- a/services/snowdevicemanagement/pom.xml +++ b/services/snowdevicemanagement/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 snowdevicemanagement AWS Java SDK :: Services :: Snow Device Management diff --git a/services/sns/pom.xml b/services/sns/pom.xml index 162b9686af17..68567757898c 100644 --- a/services/sns/pom.xml +++ b/services/sns/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sns AWS Java SDK :: Services :: Amazon SNS diff --git a/services/sqs/pom.xml b/services/sqs/pom.xml index 16121965ce50..d6f3137cefd0 100644 --- a/services/sqs/pom.xml +++ b/services/sqs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sqs AWS Java SDK :: Services :: Amazon SQS diff --git a/services/ssm/pom.xml b/services/ssm/pom.xml index 6849a23add12..a5e485c8104a 100644 --- a/services/ssm/pom.xml +++ b/services/ssm/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ssm AWS Java SDK :: Services :: AWS Simple Systems Management (SSM) diff --git a/services/ssmcontacts/pom.xml b/services/ssmcontacts/pom.xml index b60e4782aba2..a4c878324b90 100644 --- a/services/ssmcontacts/pom.xml +++ b/services/ssmcontacts/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ssmcontacts AWS Java SDK :: Services :: SSM Contacts diff --git a/services/ssmincidents/pom.xml b/services/ssmincidents/pom.xml index 60874b9c57d0..5109c91eb500 100644 --- a/services/ssmincidents/pom.xml +++ b/services/ssmincidents/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ssmincidents AWS Java SDK :: Services :: SSM Incidents diff --git a/services/ssmsap/pom.xml b/services/ssmsap/pom.xml index 493471a7236a..4f0698c46ffc 100644 --- a/services/ssmsap/pom.xml +++ b/services/ssmsap/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ssmsap AWS Java SDK :: Services :: Ssm Sap diff --git a/services/sso/pom.xml b/services/sso/pom.xml index 2cd12b6ab9b9..901d9e7172a5 100644 --- a/services/sso/pom.xml +++ b/services/sso/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sso AWS Java SDK :: Services :: SSO diff --git a/services/ssoadmin/pom.xml b/services/ssoadmin/pom.xml index ede08abc6d84..95ef22868a05 100644 --- a/services/ssoadmin/pom.xml +++ b/services/ssoadmin/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ssoadmin AWS Java SDK :: Services :: SSO Admin diff --git a/services/ssooidc/pom.xml b/services/ssooidc/pom.xml index d5b38b0a1939..ede62c4afc17 100644 --- a/services/ssooidc/pom.xml +++ b/services/ssooidc/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 ssooidc AWS Java SDK :: Services :: SSO OIDC diff --git a/services/storagegateway/pom.xml b/services/storagegateway/pom.xml index bf7a779e4ef0..dcbeb5359ce5 100644 --- a/services/storagegateway/pom.xml +++ b/services/storagegateway/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 storagegateway AWS Java SDK :: Services :: AWS Storage Gateway diff --git a/services/sts/pom.xml b/services/sts/pom.xml index f12c3fc66a4b..d21f745255f1 100644 --- a/services/sts/pom.xml +++ b/services/sts/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 sts AWS Java SDK :: Services :: AWS STS diff --git a/services/sts/src/it/java/software/amazon/awssdk/services/sts/AssumeRoleIntegrationTest.java b/services/sts/src/it/java/software/amazon/awssdk/services/sts/AssumeRoleIntegrationTest.java index c845bb770cf8..6d14f30b3269 100644 --- a/services/sts/src/it/java/software/amazon/awssdk/services/sts/AssumeRoleIntegrationTest.java +++ b/services/sts/src/it/java/software/amazon/awssdk/services/sts/AssumeRoleIntegrationTest.java @@ -178,6 +178,7 @@ public void profileCredentialsProviderCanAssumeRoles() throws InterruptedExcepti assertThat(awsCredentials.accessKeyId()).isNotBlank(); assertThat(awsCredentials.secretAccessKey()).isNotBlank(); + assertThat(awsCredentials.accountId()).isPresent(); ((SdkAutoCloseable) awsCredentialsProvider).close(); } @@ -210,6 +211,7 @@ public void profileCredentialProviderCanAssumeRolesWithEnvironmentCredentialSour assertThat(awsCredentials.accessKeyId()).isNotBlank(); assertThat(awsCredentials.secretAccessKey()).isNotBlank(); + assertThat(awsCredentials.accountId()).isPresent(); ((SdkAutoCloseable) awsCredentialsProvider).close(); }); } @@ -247,6 +249,7 @@ public void profileCredentialProviderWithEnvironmentCredentialSourceAndSystemPro assertThat(awsCredentials.accessKeyId()).isNotBlank(); assertThat(awsCredentials.secretAccessKey()).isNotBlank(); + assertThat(awsCredentials.accountId()).isPresent(); ((SdkAutoCloseable) awsCredentialsProvider).close(); }); } finally { diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/SessionCredentialsHolder.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/SessionCredentialsHolder.java new file mode 100644 index 000000000000..5b6a8b66c241 --- /dev/null +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/SessionCredentialsHolder.java @@ -0,0 +1,74 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.services.sts.auth; + +import java.time.Instant; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; +import software.amazon.awssdk.services.sts.model.Credentials; + +/** + * Holder class used to atomically store a session with its expiration time. + */ +@SdkInternalApi +@ThreadSafe +final class SessionCredentialsHolder { + private final AwsSessionCredentials sessionCredentials; + private final Instant sessionCredentialsExpiration; + + SessionCredentialsHolder(Builder b) { + Credentials credentials = b.credentials; + this.sessionCredentials = AwsSessionCredentials.builder() + .accessKeyId(credentials.accessKeyId()) + .secretAccessKey(credentials.secretAccessKey()) + .sessionToken(credentials.sessionToken()) + .accountId(b.accountId) + .build(); + this.sessionCredentialsExpiration = credentials.expiration(); + } + + public static Builder builder() { + return new Builder(); + } + + public AwsSessionCredentials getSessionCredentials() { + return sessionCredentials; + } + + public Instant getSessionCredentialsExpiration() { + return sessionCredentialsExpiration; + } + + public static class Builder { + private Credentials credentials; + private String accountId; + + public Builder credentials(Credentials credentials) { + this.credentials = credentials; + return this; + } + + public Builder accountId(String accountId) { + this.accountId = accountId; + return this; + } + + public SessionCredentialsHolder build() { + return new SessionCredentialsHolder(this); + } + } +} diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.java index b7e1e3003c4d..3cdc5ff2a437 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.java @@ -15,7 +15,8 @@ package software.amazon.awssdk.services.sts.auth; -import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.toAwsSessionCredentials; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.accountIdFromArn; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.fromStsCredentials; import java.util.function.Consumer; import java.util.function.Supplier; @@ -26,6 +27,8 @@ import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.model.AssumeRoleRequest; +import software.amazon.awssdk.services.sts.model.AssumeRoleResponse; +import software.amazon.awssdk.utils.ToString; import software.amazon.awssdk.utils.Validate; import software.amazon.awssdk.utils.builder.ToCopyableBuilder; @@ -70,7 +73,17 @@ public static Builder builder() { protected AwsSessionCredentials getUpdatedCredentials(StsClient stsClient) { AssumeRoleRequest assumeRoleRequest = assumeRoleRequestSupplier.get(); Validate.notNull(assumeRoleRequest, "Assume role request must not be null."); - return toAwsSessionCredentials(stsClient.assumeRole(assumeRoleRequest).credentials(), PROVIDER_NAME); + AssumeRoleResponse assumeRoleResponse = stsClient.assumeRole(assumeRoleRequest); + return fromStsCredentials(assumeRoleResponse.credentials(), + PROVIDER_NAME, + accountIdFromArn(assumeRoleResponse.assumedRoleUser())); + } + + @Override + public String toString() { + return ToString.builder("StsAssumeRoleCredentialsProvider") + .add("refreshRequest", assumeRoleRequestSupplier) + .build(); } @Override diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProvider.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProvider.java index 761e0dcb044e..6d99b555e311 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProvider.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProvider.java @@ -15,7 +15,8 @@ package software.amazon.awssdk.services.sts.auth; -import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.toAwsSessionCredentials; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.accountIdFromArn; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.fromStsCredentials; import java.util.function.Consumer; import java.util.function.Supplier; @@ -26,6 +27,7 @@ import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.model.AssumeRoleWithSamlRequest; +import software.amazon.awssdk.services.sts.model.AssumeRoleWithSamlResponse; import software.amazon.awssdk.utils.Validate; import software.amazon.awssdk.utils.builder.ToCopyableBuilder; @@ -71,7 +73,10 @@ public static Builder builder() { protected AwsSessionCredentials getUpdatedCredentials(StsClient stsClient) { AssumeRoleWithSamlRequest assumeRoleWithSamlRequest = assumeRoleWithSamlRequestSupplier.get(); Validate.notNull(assumeRoleWithSamlRequest, "Assume role with saml request must not be null."); - return toAwsSessionCredentials(stsClient.assumeRoleWithSAML(assumeRoleWithSamlRequest).credentials(), PROVIDER_NAME); + AssumeRoleWithSamlResponse assumeRoleResponse = stsClient.assumeRoleWithSAML(assumeRoleWithSamlRequest); + return fromStsCredentials(assumeRoleResponse.credentials(), + PROVIDER_NAME, + accountIdFromArn(assumeRoleResponse.assumedRoleUser())); } @Override @@ -83,7 +88,7 @@ public Builder toBuilder() { String providerName() { return PROVIDER_NAME; } - + /** * A builder (created by {@link StsAssumeRoleWithSamlCredentialsProvider#builder()}) for creating a * {@link StsAssumeRoleWithSamlCredentialsProvider}. diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProvider.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProvider.java index d5e5a20f5b97..4cbb325f7458 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProvider.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProvider.java @@ -15,7 +15,8 @@ package software.amazon.awssdk.services.sts.auth; -import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.toAwsSessionCredentials; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.accountIdFromArn; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.fromStsCredentials; import static software.amazon.awssdk.utils.Validate.notNull; import java.util.function.Consumer; @@ -27,6 +28,7 @@ import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityRequest; +import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityResponse; import software.amazon.awssdk.utils.builder.ToCopyableBuilder; /** @@ -71,7 +73,10 @@ public static Builder builder() { protected AwsSessionCredentials getUpdatedCredentials(StsClient stsClient) { AssumeRoleWithWebIdentityRequest request = assumeRoleWithWebIdentityRequest.get(); notNull(request, "AssumeRoleWithWebIdentityRequest can't be null"); - return toAwsSessionCredentials(stsClient.assumeRoleWithWebIdentity(request).credentials(), PROVIDER_NAME); + AssumeRoleWithWebIdentityResponse assumeRoleResponse = stsClient.assumeRoleWithWebIdentity(request); + return fromStsCredentials(assumeRoleResponse.credentials(), + PROVIDER_NAME, + accountIdFromArn(assumeRoleResponse.assumedRoleUser())); } @Override @@ -83,7 +88,7 @@ public Builder toBuilder() { String providerName() { return PROVIDER_NAME; } - + /** * A builder (created by {@link StsAssumeRoleWithWebIdentityCredentialsProvider#builder()}) for creating a * {@link StsAssumeRoleWithWebIdentityCredentialsProvider}. diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProvider.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProvider.java index 77c57147aea9..da28815b686e 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProvider.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProvider.java @@ -15,7 +15,7 @@ package software.amazon.awssdk.services.sts.auth; -import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.toAwsSessionCredentials; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.fromStsCredentials; import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; @@ -24,7 +24,10 @@ import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.services.sts.StsClient; +import software.amazon.awssdk.services.sts.endpoints.internal.Arn; +import software.amazon.awssdk.services.sts.model.FederatedUser; import software.amazon.awssdk.services.sts.model.GetFederationTokenRequest; +import software.amazon.awssdk.services.sts.model.GetFederationTokenResponse; import software.amazon.awssdk.utils.Validate; import software.amazon.awssdk.utils.builder.ToCopyableBuilder; @@ -68,7 +71,19 @@ public static Builder builder() { @Override protected AwsSessionCredentials getUpdatedCredentials(StsClient stsClient) { - return toAwsSessionCredentials(stsClient.getFederationToken(getFederationTokenRequest).credentials(), PROVIDER_NAME); + GetFederationTokenResponse federationToken = stsClient.getFederationToken(getFederationTokenRequest); + return fromStsCredentials(federationToken.credentials(), + PROVIDER_NAME, + accountIdFromArn(federationToken.federatedUser())); + } + + private String accountIdFromArn(FederatedUser federatedUser) { + if (federatedUser == null) { + return null; + } + return Arn.parse(federatedUser.arn()) + .map(Arn::accountId) + .orElse(null); } @Override @@ -80,7 +95,7 @@ public Builder toBuilder() { String providerName() { return PROVIDER_NAME; } - + /** * A builder (created by {@link StsGetFederationTokenCredentialsProvider#builder()}) for creating a * {@link StsGetFederationTokenCredentialsProvider}. diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProvider.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProvider.java index e7942671879c..8ca66114d2be 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProvider.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProvider.java @@ -15,7 +15,7 @@ package software.amazon.awssdk.services.sts.auth; -import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.toAwsSessionCredentials; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.fromStsCredentials; import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; @@ -25,6 +25,7 @@ import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.model.GetSessionTokenRequest; +import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse; import software.amazon.awssdk.utils.Validate; import software.amazon.awssdk.utils.builder.ToCopyableBuilder; @@ -46,7 +47,7 @@ public class StsGetSessionTokenCredentialsProvider extends StsCredentialsProvider implements ToCopyableBuilder { private static final String PROVIDER_NAME = "StsGetSessionTokenCredentialsProvider"; - + private final GetSessionTokenRequest getSessionTokenRequest; /** @@ -68,7 +69,8 @@ public static Builder builder() { @Override protected AwsSessionCredentials getUpdatedCredentials(StsClient stsClient) { - return toAwsSessionCredentials(stsClient.getSessionToken(getSessionTokenRequest).credentials(), PROVIDER_NAME); + GetSessionTokenResponse sessionToken = stsClient.getSessionToken(getSessionTokenRequest); + return fromStsCredentials(sessionToken.credentials(), PROVIDER_NAME); } @Override @@ -80,7 +82,7 @@ public Builder toBuilder() { String providerName() { return PROVIDER_NAME; } - + /** * A builder (created by {@link StsGetSessionTokenCredentialsProvider#builder()}) for creating a * {@link StsGetSessionTokenCredentialsProvider}. diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenFileCredentialsProvider.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenFileCredentialsProvider.java index c1710327fcb8..c812da56e21e 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenFileCredentialsProvider.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenFileCredentialsProvider.java @@ -15,7 +15,8 @@ package software.amazon.awssdk.services.sts.auth; -import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.toAwsSessionCredentials; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.accountIdFromArn; +import static software.amazon.awssdk.services.sts.internal.StsAuthUtils.fromStsCredentials; import static software.amazon.awssdk.utils.StringUtils.trim; import static software.amazon.awssdk.utils.Validate.notNull; @@ -32,6 +33,7 @@ import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.internal.AssumeRoleWithWebIdentityRequestSupplier; import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityRequest; +import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityResponse; import software.amazon.awssdk.utils.builder.ToCopyableBuilder; /** @@ -137,7 +139,10 @@ public AwsCredentials resolveCredentials() { protected AwsSessionCredentials getUpdatedCredentials(StsClient stsClient) { AssumeRoleWithWebIdentityRequest request = assumeRoleWithWebIdentityRequest.get(); notNull(request, "AssumeRoleWithWebIdentityRequest can't be null"); - return toAwsSessionCredentials(stsClient.assumeRoleWithWebIdentity(request).credentials(), PROVIDER_NAME); + AssumeRoleWithWebIdentityResponse assumeRoleWithWebIdentityResponse = stsClient.assumeRoleWithWebIdentity(request); + return fromStsCredentials(assumeRoleWithWebIdentityResponse.credentials(), + PROVIDER_NAME, + accountIdFromArn(assumeRoleWithWebIdentityResponse.assumedRoleUser())); } @Override @@ -149,7 +154,7 @@ public Builder toBuilder() { String providerName() { return PROVIDER_NAME; } - + public static final class Builder extends BaseBuilder { private String roleArn; private String roleSessionName; diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsAuthUtils.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsAuthUtils.java index 1de31d7f55ee..e854495e0124 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsAuthUtils.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsAuthUtils.java @@ -17,20 +17,37 @@ import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; +import software.amazon.awssdk.services.sts.endpoints.internal.Arn; +import software.amazon.awssdk.services.sts.model.AssumedRoleUser; import software.amazon.awssdk.services.sts.model.Credentials; @SdkInternalApi public final class StsAuthUtils { + private StsAuthUtils() { } - public static AwsSessionCredentials toAwsSessionCredentials(Credentials credentials, String provider) { + public static String accountIdFromArn(AssumedRoleUser assumedRoleUser) { + if (assumedRoleUser == null) { + return null; + } + return Arn.parse(assumedRoleUser.arn()) + .map(Arn::accountId) + .orElse(null); + } + + public static AwsSessionCredentials fromStsCredentials(Credentials credentials, String provider) { + return fromStsCredentials(credentials, provider, null); + } + + public static AwsSessionCredentials fromStsCredentials(Credentials credentials, String provider, String accountId) { return AwsSessionCredentials.builder() .accessKeyId(credentials.accessKeyId()) .secretAccessKey(credentials.secretAccessKey()) .sessionToken(credentials.sessionToken()) .expirationTime(credentials.expiration()) .providerName(provider) + .accountId(accountId) .build(); } } diff --git a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProviderTest.java b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProviderTest.java index 2c8a4878b6aa..e4d7b6c6bc5c 100644 --- a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProviderTest.java +++ b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProviderTest.java @@ -18,6 +18,7 @@ import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.model.AssumeRoleRequest; import software.amazon.awssdk.services.sts.model.AssumeRoleResponse; +import software.amazon.awssdk.services.sts.model.AssumedRoleUser; import software.amazon.awssdk.services.sts.model.Credentials; /** @@ -32,7 +33,10 @@ protected AssumeRoleRequest getRequest() { @Override protected AssumeRoleResponse getResponse(Credentials credentials) { - return AssumeRoleResponse.builder().credentials(credentials).build(); + return AssumeRoleResponse.builder() + .credentials(credentials) + .assumedRoleUser(AssumedRoleUser.builder().arn(ARN).build()) + .build(); } @Override diff --git a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProviderTest.java b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProviderTest.java index 624f4380e670..fb4729f98f79 100644 --- a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProviderTest.java +++ b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithSamlCredentialsProviderTest.java @@ -19,6 +19,7 @@ import software.amazon.awssdk.services.sts.auth.StsAssumeRoleWithSamlCredentialsProvider.Builder; import software.amazon.awssdk.services.sts.model.AssumeRoleWithSamlRequest; import software.amazon.awssdk.services.sts.model.AssumeRoleWithSamlResponse; +import software.amazon.awssdk.services.sts.model.AssumedRoleUser; import software.amazon.awssdk.services.sts.model.Credentials; /** @@ -35,7 +36,10 @@ protected AssumeRoleWithSamlRequest getRequest() { @Override protected AssumeRoleWithSamlResponse getResponse(Credentials credentials) { - return AssumeRoleWithSamlResponse.builder().credentials(credentials).build(); + return AssumeRoleWithSamlResponse.builder() + .credentials(credentials) + .assumedRoleUser(AssumedRoleUser.builder().arn(ARN).build()) + .build(); } @Override diff --git a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProviderTest.java b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProviderTest.java index dfdcddd8fd45..d037597897a2 100644 --- a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProviderTest.java +++ b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsAssumeRoleWithWebIdentityCredentialsProviderTest.java @@ -19,6 +19,7 @@ import software.amazon.awssdk.services.sts.auth.StsAssumeRoleWithWebIdentityCredentialsProvider.Builder; import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityRequest; import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityResponse; +import software.amazon.awssdk.services.sts.model.AssumedRoleUser; import software.amazon.awssdk.services.sts.model.Credentials; /** @@ -34,7 +35,10 @@ protected AssumeRoleWithWebIdentityRequest getRequest() { @Override protected AssumeRoleWithWebIdentityResponse getResponse(Credentials credentials) { - return AssumeRoleWithWebIdentityResponse.builder().credentials(credentials).build(); + return AssumeRoleWithWebIdentityResponse.builder() + .credentials(credentials) + .assumedRoleUser(AssumedRoleUser.builder().arn(ARN).build()) + .build(); } @Override diff --git a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsCredentialsProviderTestBase.java b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsCredentialsProviderTestBase.java index f16f564a0a43..dc35f7907b5d 100644 --- a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsCredentialsProviderTestBase.java +++ b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsCredentialsProviderTestBase.java @@ -29,6 +29,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.services.sts.StsClient; +import software.amazon.awssdk.services.sts.endpoints.internal.Arn; import software.amazon.awssdk.services.sts.model.Credentials; /** @@ -36,6 +37,8 @@ */ @ExtendWith(MockitoExtension.class) public abstract class StsCredentialsProviderTestBase { + + protected static final String ARN = "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-0e9801d129EXAMPLE"; @Mock protected StsClient stsClient; @@ -102,7 +105,6 @@ public void callClientWithCredentialsProvider(Instant credentialsExpirationDate, Credentials credentials = Credentials.builder().accessKeyId("a").secretAccessKey("b").sessionToken("c").expiration(credentialsExpirationDate).build(); RequestT request = getRequest(); ResponseT response = getResponse(credentials); - when(callClient(stsClient, request)).thenReturn(response); StsCredentialsProvider.BaseBuilder credentialsProviderBuilder = createCredentialsProviderBuilder(request); @@ -130,6 +132,10 @@ public void callClientWithCredentialsProvider(Instant credentialsExpirationDate, assertThat(providedCredentials.secretAccessKey()).isEqualTo("b"); assertThat(providedCredentials.sessionToken()).isEqualTo("c"); assertThat(providedCredentials.providerName()).isPresent().contains(providerName()); + if (!(credentialsProvider instanceof StsGetSessionTokenCredentialsProvider)) { + assertThat(providedCredentials.accountId().isPresent()); + assertThat(providedCredentials.accountId().get()).isEqualTo("123456789012"); + } } } } diff --git a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProviderTest.java b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProviderTest.java index 9d04a3c17baf..bdc50a817aaa 100644 --- a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProviderTest.java +++ b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetFederationTokenCredentialsProviderTest.java @@ -17,7 +17,9 @@ import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.auth.StsGetFederationTokenCredentialsProvider.Builder; +import software.amazon.awssdk.services.sts.model.AssumedRoleUser; import software.amazon.awssdk.services.sts.model.Credentials; +import software.amazon.awssdk.services.sts.model.FederatedUser; import software.amazon.awssdk.services.sts.model.GetFederationTokenRequest; import software.amazon.awssdk.services.sts.model.GetFederationTokenResponse; @@ -34,7 +36,10 @@ protected GetFederationTokenRequest getRequest() { @Override protected GetFederationTokenResponse getResponse(Credentials credentials) { - return GetFederationTokenResponse.builder().credentials(credentials).build(); + return GetFederationTokenResponse.builder() + .credentials(credentials) + .federatedUser(FederatedUser.builder().arn(ARN).build()) + .build(); } @Override diff --git a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProviderTest.java b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProviderTest.java index 3dd7aaac267f..18f9feadf796 100644 --- a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProviderTest.java +++ b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsGetSessionTokenCredentialsProviderTest.java @@ -17,6 +17,7 @@ import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.auth.StsGetSessionTokenCredentialsProvider.Builder; +import software.amazon.awssdk.services.sts.model.AssumedRoleUser; import software.amazon.awssdk.services.sts.model.Credentials; import software.amazon.awssdk.services.sts.model.GetSessionTokenRequest; import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse; @@ -34,7 +35,9 @@ protected GetSessionTokenRequest getRequest() { @Override protected GetSessionTokenResponse getResponse(Credentials credentials) { - return GetSessionTokenResponse.builder().credentials(credentials).build(); + return GetSessionTokenResponse.builder() + .credentials(credentials) + .build(); } @Override diff --git a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenCredentialsProviderBaseTest.java b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenCredentialsProviderBaseTest.java index eb08a86f7b6a..cb3ca75140bf 100644 --- a/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenCredentialsProviderBaseTest.java +++ b/services/sts/src/test/java/software/amazon/awssdk/services/sts/auth/StsWebIdentityTokenCredentialsProviderBaseTest.java @@ -29,13 +29,14 @@ import software.amazon.awssdk.services.sts.auth.StsWebIdentityTokenFileCredentialsProvider.Builder; import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityRequest; import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityResponse; +import software.amazon.awssdk.services.sts.model.AssumedRoleUser; import software.amazon.awssdk.services.sts.model.Credentials; import software.amazon.awssdk.testutils.EnvironmentVariableHelper; import software.amazon.awssdk.utils.IoUtils; /** - * Validate the functionality of {@link StsWebIdentityTokenFileCredentialsProvider}. Inherits tests from {@link - * StsCredentialsProviderTestBase}. + * Validate the functionality of {@link StsWebIdentityTokenFileCredentialsProvider}. Inherits tests from + * {@link StsCredentialsProviderTestBase}. */ public class StsWebIdentityTokenCredentialsProviderBaseTest extends StsCredentialsProviderTestBase { @@ -44,7 +45,7 @@ public class StsWebIdentityTokenCredentialsProviderBaseTest @BeforeEach - public void setUp() { + public void setUp() { String webIdentityTokenPath = Paths.get("src/test/resources/token.jwt").toAbsolutePath().toString(); ENVIRONMENT_VARIABLE_HELPER.set(SdkSystemSetting.AWS_ROLE_ARN.environmentVariable(), "someRole"); ENVIRONMENT_VARIABLE_HELPER.set(SdkSystemSetting.AWS_WEB_IDENTITY_TOKEN_FILE.environmentVariable(), webIdentityTokenPath); @@ -52,7 +53,7 @@ public void setUp() { } @AfterEach - public void cleanUp(){ + public void cleanUp() { ENVIRONMENT_VARIABLE_HELPER.reset(); } @@ -64,7 +65,10 @@ protected AssumeRoleWithWebIdentityRequest getRequest() { @Override protected AssumeRoleWithWebIdentityResponse getResponse(Credentials credentials) { - return AssumeRoleWithWebIdentityResponse.builder().credentials(credentials).build(); + return AssumeRoleWithWebIdentityResponse.builder() + .credentials(credentials) + .assumedRoleUser(AssumedRoleUser.builder().arn(ARN).build()) + .build(); } @Override diff --git a/services/supplychain/pom.xml b/services/supplychain/pom.xml index f5c9afa787c4..6b08204fcbb8 100644 --- a/services/supplychain/pom.xml +++ b/services/supplychain/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 supplychain AWS Java SDK :: Services :: Supply Chain diff --git a/services/support/pom.xml b/services/support/pom.xml index 0bbed5093abc..b5ce7588fbfc 100644 --- a/services/support/pom.xml +++ b/services/support/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 support AWS Java SDK :: Services :: AWS Support diff --git a/services/supportapp/pom.xml b/services/supportapp/pom.xml index 0c9f85a00f3e..666c74637602 100644 --- a/services/supportapp/pom.xml +++ b/services/supportapp/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 supportapp AWS Java SDK :: Services :: Support App diff --git a/services/swf/pom.xml b/services/swf/pom.xml index da9d27082cb4..fd9ea65db879 100644 --- a/services/swf/pom.xml +++ b/services/swf/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 swf AWS Java SDK :: Services :: Amazon SWF diff --git a/services/synthetics/pom.xml b/services/synthetics/pom.xml index 52afd6dff92e..077d43c45f99 100644 --- a/services/synthetics/pom.xml +++ b/services/synthetics/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 synthetics AWS Java SDK :: Services :: Synthetics diff --git a/services/textract/pom.xml b/services/textract/pom.xml index ac5fc28b7ec1..167943f658e7 100644 --- a/services/textract/pom.xml +++ b/services/textract/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 textract AWS Java SDK :: Services :: Textract diff --git a/services/timestreaminfluxdb/pom.xml b/services/timestreaminfluxdb/pom.xml index 43cda7e24eab..02657d2b6fa7 100644 --- a/services/timestreaminfluxdb/pom.xml +++ b/services/timestreaminfluxdb/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 timestreaminfluxdb AWS Java SDK :: Services :: Timestream Influx DB diff --git a/services/timestreamquery/pom.xml b/services/timestreamquery/pom.xml index d3de7cbd319b..f2f994fe3139 100644 --- a/services/timestreamquery/pom.xml +++ b/services/timestreamquery/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 timestreamquery AWS Java SDK :: Services :: Timestream Query diff --git a/services/timestreamwrite/pom.xml b/services/timestreamwrite/pom.xml index 263d2f1d82c2..67a044e4f45b 100644 --- a/services/timestreamwrite/pom.xml +++ b/services/timestreamwrite/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 timestreamwrite AWS Java SDK :: Services :: Timestream Write diff --git a/services/tnb/pom.xml b/services/tnb/pom.xml index 2aeb702e1bc8..1b507434391f 100644 --- a/services/tnb/pom.xml +++ b/services/tnb/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 tnb AWS Java SDK :: Services :: Tnb diff --git a/services/transcribe/pom.xml b/services/transcribe/pom.xml index faa9de2543e8..87bc481b7b2d 100644 --- a/services/transcribe/pom.xml +++ b/services/transcribe/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 transcribe AWS Java SDK :: Services :: Transcribe diff --git a/services/transcribestreaming/pom.xml b/services/transcribestreaming/pom.xml index 44a8dcbbdb3e..2709dafa970b 100644 --- a/services/transcribestreaming/pom.xml +++ b/services/transcribestreaming/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 transcribestreaming AWS Java SDK :: Services :: AWS Transcribe Streaming diff --git a/services/transfer/pom.xml b/services/transfer/pom.xml index 20ab85f321f8..3b0519fea0b7 100644 --- a/services/transfer/pom.xml +++ b/services/transfer/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 transfer AWS Java SDK :: Services :: Transfer diff --git a/services/translate/pom.xml b/services/translate/pom.xml index 7bda4152a380..24ab611216e2 100644 --- a/services/translate/pom.xml +++ b/services/translate/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 translate diff --git a/services/trustedadvisor/pom.xml b/services/trustedadvisor/pom.xml index cced68ac73eb..e7ce95724fc7 100644 --- a/services/trustedadvisor/pom.xml +++ b/services/trustedadvisor/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 trustedadvisor AWS Java SDK :: Services :: Trusted Advisor diff --git a/services/verifiedpermissions/pom.xml b/services/verifiedpermissions/pom.xml index 38f18bcfbb76..8ae7a6fe71e1 100644 --- a/services/verifiedpermissions/pom.xml +++ b/services/verifiedpermissions/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 verifiedpermissions AWS Java SDK :: Services :: Verified Permissions diff --git a/services/voiceid/pom.xml b/services/voiceid/pom.xml index c6a64eee4a41..df17add10a76 100644 --- a/services/voiceid/pom.xml +++ b/services/voiceid/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 voiceid AWS Java SDK :: Services :: Voice ID diff --git a/services/vpclattice/pom.xml b/services/vpclattice/pom.xml index c283f972810b..b706feb54042 100644 --- a/services/vpclattice/pom.xml +++ b/services/vpclattice/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 vpclattice AWS Java SDK :: Services :: VPC Lattice diff --git a/services/waf/pom.xml b/services/waf/pom.xml index eb6365e1f3cf..1127f33149a6 100644 --- a/services/waf/pom.xml +++ b/services/waf/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 waf AWS Java SDK :: Services :: AWS WAF diff --git a/services/wafv2/pom.xml b/services/wafv2/pom.xml index 4dc6b4152f77..8883e889e6e0 100644 --- a/services/wafv2/pom.xml +++ b/services/wafv2/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 wafv2 AWS Java SDK :: Services :: WAFV2 diff --git a/services/wellarchitected/pom.xml b/services/wellarchitected/pom.xml index 085f2630dff6..a8e8b9661a14 100644 --- a/services/wellarchitected/pom.xml +++ b/services/wellarchitected/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 wellarchitected AWS Java SDK :: Services :: Well Architected diff --git a/services/wisdom/pom.xml b/services/wisdom/pom.xml index 579fd41bf151..c948ad487981 100644 --- a/services/wisdom/pom.xml +++ b/services/wisdom/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 wisdom AWS Java SDK :: Services :: Wisdom diff --git a/services/workdocs/pom.xml b/services/workdocs/pom.xml index 259560030d9a..9f54ec21a19a 100644 --- a/services/workdocs/pom.xml +++ b/services/workdocs/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 workdocs AWS Java SDK :: Services :: Amazon WorkDocs diff --git a/services/worklink/pom.xml b/services/worklink/pom.xml index c53a4848bf92..f63f44842887 100644 --- a/services/worklink/pom.xml +++ b/services/worklink/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 worklink AWS Java SDK :: Services :: WorkLink diff --git a/services/workmail/pom.xml b/services/workmail/pom.xml index 8ca82117ac2b..7837a49cda88 100644 --- a/services/workmail/pom.xml +++ b/services/workmail/pom.xml @@ -20,7 +20,7 @@ services software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 workmail diff --git a/services/workmailmessageflow/pom.xml b/services/workmailmessageflow/pom.xml index 37d724b73518..826d13b10174 100644 --- a/services/workmailmessageflow/pom.xml +++ b/services/workmailmessageflow/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 workmailmessageflow AWS Java SDK :: Services :: WorkMailMessageFlow diff --git a/services/workspaces/pom.xml b/services/workspaces/pom.xml index 4ff36e053236..26b4c3a57ffa 100644 --- a/services/workspaces/pom.xml +++ b/services/workspaces/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 workspaces AWS Java SDK :: Services :: Amazon WorkSpaces diff --git a/services/workspacesthinclient/pom.xml b/services/workspacesthinclient/pom.xml index 0e0506c2b33c..c9d08142cd43 100644 --- a/services/workspacesthinclient/pom.xml +++ b/services/workspacesthinclient/pom.xml @@ -17,7 +17,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 workspacesthinclient AWS Java SDK :: Services :: Work Spaces Thin Client diff --git a/services/workspacesweb/pom.xml b/services/workspacesweb/pom.xml index 52907afc716d..72d41b9e2cd7 100644 --- a/services/workspacesweb/pom.xml +++ b/services/workspacesweb/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 workspacesweb AWS Java SDK :: Services :: Work Spaces Web diff --git a/services/workspacesweb/src/main/resources/codegen-resources/endpoint-rule-set.json b/services/workspacesweb/src/main/resources/codegen-resources/endpoint-rule-set.json index 7124ded3a94b..2398c28612fd 100644 --- a/services/workspacesweb/src/main/resources/codegen-resources/endpoint-rule-set.json +++ b/services/workspacesweb/src/main/resources/codegen-resources/endpoint-rule-set.json @@ -40,7 +40,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -83,7 +82,8 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [ @@ -96,7 +96,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -110,7 +109,6 @@ "assign": "PartitionResult" } ], - "type": "tree", "rules": [ { "conditions": [ @@ -133,7 +131,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -168,7 +165,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [], @@ -179,14 +175,16 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [], "error": "FIPS and DualStack are enabled, but this partition does not support one or both", "type": "error" } - ] + ], + "type": "tree" }, { "conditions": [ @@ -200,14 +198,12 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ { "fn": "booleanEquals", "argv": [ - true, { "fn": "getAttr", "argv": [ @@ -216,11 +212,11 @@ }, "supportsFIPS" ] - } + }, + true ] } ], - "type": "tree", "rules": [ { "conditions": [], @@ -231,14 +227,16 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [], "error": "FIPS is enabled but this partition does not support FIPS", "type": "error" } - ] + ], + "type": "tree" }, { "conditions": [ @@ -252,7 +250,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [ @@ -272,7 +269,6 @@ ] } ], - "type": "tree", "rules": [ { "conditions": [], @@ -283,14 +279,16 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" }, { "conditions": [], "error": "DualStack is enabled but this partition does not support DualStack", "type": "error" } - ] + ], + "type": "tree" }, { "conditions": [], @@ -301,9 +299,11 @@ }, "type": "endpoint" } - ] + ], + "type": "tree" } - ] + ], + "type": "tree" }, { "conditions": [], diff --git a/services/workspacesweb/src/main/resources/codegen-resources/service-2.json b/services/workspacesweb/src/main/resources/codegen-resources/service-2.json index 3c4785fbd2e6..3e85985f70bd 100644 --- a/services/workspacesweb/src/main/resources/codegen-resources/service-2.json +++ b/services/workspacesweb/src/main/resources/codegen-resources/service-2.json @@ -1028,6 +1028,7 @@ {"shape":"ResourceNotFoundException"}, {"shape":"AccessDeniedException"}, {"shape":"ThrottlingException"}, + {"shape":"ServiceQuotaExceededException"}, {"shape":"ValidationException"}, {"shape":"ConflictException"} ], @@ -1359,6 +1360,10 @@ "type":"structure", "required":["browserSettingsArn"], "members":{ + "additionalEncryptionContext":{ + "shape":"EncryptionContextMap", + "documentation":"

The additional encryption context of the browser settings.

" + }, "associatedPortalArns":{ "shape":"ArnList", "documentation":"

A list of web portal ARNs that this browser settings is associated with.

" @@ -1370,6 +1375,10 @@ "browserSettingsArn":{ "shape":"ARN", "documentation":"

The ARN of the browser settings.

" + }, + "customerManagedKey":{ + "shape":"keyArn", + "documentation":"

The customer managed key used to encrypt sensitive information in the browser settings.

" } }, "documentation":"

The browser settings resource that can be associated with a web portal. Once associated with a web portal, browser settings control how the browser will behave once a user starts a streaming session for the web portal.

" @@ -1503,18 +1512,21 @@ "type":"string", "max":253, "min":0, - "pattern":"^(\\.?)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)*[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$" + "pattern":"^(\\.?)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)*[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$", + "sensitive":true }, "CookieName":{ "type":"string", "max":4096, - "min":0 + "min":0, + "sensitive":true }, "CookiePath":{ "type":"string", "max":2000, "min":0, - "pattern":"^/(\\S)*$" + "pattern":"^/(\\S)*$", + "sensitive":true }, "CookieSpecification":{ "type":"structure", @@ -1571,7 +1583,7 @@ }, "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "customerManagedKey":{ @@ -1605,12 +1617,12 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "identityProviderDetails":{ "shape":"IdentityProviderDetails", - "documentation":"

The identity provider details. The following list describes the provider detail keys for each identity provider type.

  • For Google and Login with Amazon:

    • client_id

    • client_secret

    • authorize_scopes

  • For Facebook:

    • client_id

    • client_secret

    • authorize_scopes

    • api_version

  • For Sign in with Apple:

    • client_id

    • team_id

    • key_id

    • private_key

    • authorize_scopes

  • For OIDC providers:

    • client_id

    • client_secret

    • attributes_request_method

    • oidc_issuer

    • authorize_scopes

    • authorize_url if not available from discovery URL specified by oidc_issuer key

    • token_url if not available from discovery URL specified by oidc_issuer key

    • attributes_url if not available from discovery URL specified by oidc_issuer key

    • jwks_uri if not available from discovery URL specified by oidc_issuer key

  • For SAML providers:

    • MetadataFile OR MetadataURL

    • IDPSignout (boolean) optional

" + "documentation":"

The identity provider details. The following list describes the provider detail keys for each identity provider type.

  • For Google and Login with Amazon:

    • client_id

    • client_secret

    • authorize_scopes

  • For Facebook:

    • client_id

    • client_secret

    • authorize_scopes

    • api_version

  • For Sign in with Apple:

    • client_id

    • team_id

    • key_id

    • private_key

    • authorize_scopes

  • For OIDC providers:

    • client_id

    • client_secret

    • attributes_request_method

    • oidc_issuer

    • authorize_scopes

    • authorize_url if not available from discovery URL specified by oidc_issuer key

    • token_url if not available from discovery URL specified by oidc_issuer key

    • attributes_url if not available from discovery URL specified by oidc_issuer key

    • jwks_uri if not available from discovery URL specified by oidc_issuer key

  • For SAML providers:

    • MetadataFile OR MetadataURL

    • IDPSignout (boolean) optional

    • IDPInit (boolean) optional

    • RequestSigningAlgorithm (string) optional - Only accepts rsa-sha256

    • EncryptedResponses (boolean) optional

" }, "identityProviderName":{ "shape":"IdentityProviderName", @@ -1646,7 +1658,7 @@ }, "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "customerManagedKey":{ @@ -1691,7 +1703,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "securityGroupIds":{ @@ -1731,11 +1743,11 @@ }, "authenticationType":{ "shape":"AuthenticationType", - "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM_Identity_Center web portals are authenticated through AWS IAM Identity Center (successor to AWS Single Sign-On). They provide additional features, such as IdP-initiated authentication. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" + "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM Identity Center web portals are authenticated through IAM Identity Center (successor to Single Sign-On). Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" }, "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "customerManagedKey":{ @@ -1746,6 +1758,14 @@ "shape":"DisplayName", "documentation":"

The name of the web portal. This is not visible to users who log into the web portal.

" }, + "instanceType":{ + "shape":"InstanceType", + "documentation":"

The type and resources of the underlying instance.

" + }, + "maxConcurrentSessions":{ + "shape":"MaxConcurrentSessions", + "documentation":"

The maximum number of concurrent sessions for the portal.

" + }, "tags":{ "shape":"TagList", "documentation":"

The tags to add to the web portal. A tag is a key-value pair.

" @@ -1779,7 +1799,7 @@ }, "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "tags":{ @@ -1804,7 +1824,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "kinesisStreamArn":{ @@ -1843,7 +1863,7 @@ }, "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "cookieSynchronizationConfiguration":{ @@ -2409,7 +2429,7 @@ }, "identityProviderDetails":{ "shape":"IdentityProviderDetails", - "documentation":"

The identity provider details. The following list describes the provider detail keys for each identity provider type.

  • For Google and Login with Amazon:

    • client_id

    • client_secret

    • authorize_scopes

  • For Facebook:

    • client_id

    • client_secret

    • authorize_scopes

    • api_version

  • For Sign in with Apple:

    • client_id

    • team_id

    • key_id

    • private_key

    • authorize_scopes

  • For OIDC providers:

    • client_id

    • client_secret

    • attributes_request_method

    • oidc_issuer

    • authorize_scopes

    • authorize_url if not available from discovery URL specified by oidc_issuer key

    • token_url if not available from discovery URL specified by oidc_issuer key

    • attributes_url if not available from discovery URL specified by oidc_issuer key

    • jwks_uri if not available from discovery URL specified by oidc_issuer key

  • For SAML providers:

    • MetadataFile OR MetadataURL

    • IDPSignout optional

" + "documentation":"

The identity provider details. The following list describes the provider detail keys for each identity provider type.

  • For Google and Login with Amazon:

    • client_id

    • client_secret

    • authorize_scopes

  • For Facebook:

    • client_id

    • client_secret

    • authorize_scopes

    • api_version

  • For Sign in with Apple:

    • client_id

    • team_id

    • key_id

    • private_key

    • authorize_scopes

  • For OIDC providers:

    • client_id

    • client_secret

    • attributes_request_method

    • oidc_issuer

    • authorize_scopes

    • authorize_url if not available from discovery URL specified by oidc_issuer key

    • token_url if not available from discovery URL specified by oidc_issuer key

    • attributes_url if not available from discovery URL specified by oidc_issuer key

    • jwks_uri if not available from discovery URL specified by oidc_issuer key

  • For SAML providers:

    • MetadataFile OR MetadataURL

    • IDPSignout (boolean) optional

    • IDPInit (boolean) optional

    • RequestSigningAlgorithm (string) optional - Only accepts rsa-sha256

    • EncryptedResponses (boolean) optional

" }, "identityProviderName":{ "shape":"IdentityProviderName", @@ -2475,6 +2495,14 @@ "max":60, "min":0 }, + "InstanceType":{ + "type":"string", + "enum":[ + "standard.regular", + "standard.large", + "standard.xlarge" + ] + }, "InternalServerException":{ "type":"structure", "members":{ @@ -2495,6 +2523,10 @@ "type":"structure", "required":["ipAccessSettingsArn"], "members":{ + "additionalEncryptionContext":{ + "shape":"EncryptionContextMap", + "documentation":"

The additional encryption context of the IP access settings.

" + }, "associatedPortalArns":{ "shape":"ArnList", "documentation":"

A list of web portal ARNs that this IP access settings resource is associated with.

" @@ -2503,6 +2535,10 @@ "shape":"Timestamp", "documentation":"

The creation date timestamp of the IP access settings.

" }, + "customerManagedKey":{ + "shape":"keyArn", + "documentation":"

The customer managed key used to encrypt sensitive information in the IP access settings.

" + }, "description":{ "shape":"Description", "documentation":"

The description of the IP access settings.

" @@ -2894,6 +2930,12 @@ } } }, + "MaxConcurrentSessions":{ + "type":"integer", + "box":true, + "max":5000, + "min":1 + }, "MaxResults":{ "type":"integer", "box":true, @@ -2955,9 +2997,13 @@ "type":"structure", "required":["portalArn"], "members":{ + "additionalEncryptionContext":{ + "shape":"EncryptionContextMap", + "documentation":"

The additional encryption context of the portal.

" + }, "authenticationType":{ "shape":"AuthenticationType", - "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM_Identity_Center web portals are authenticated through AWS IAM Identity Center (successor to AWS Single Sign-On). They provide additional features, such as IdP-initiated authentication. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" + "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM Identity Center web portals are authenticated through IAM Identity Center (successor to Single Sign-On). Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" }, "browserSettingsArn":{ "shape":"ARN", @@ -2971,14 +3017,26 @@ "shape":"Timestamp", "documentation":"

The creation date of the web portal.

" }, + "customerManagedKey":{ + "shape":"keyArn", + "documentation":"

The customer managed key used to encrypt sensitive information in the portal.

" + }, "displayName":{ "shape":"DisplayName", "documentation":"

The name of the web portal.

" }, + "instanceType":{ + "shape":"InstanceType", + "documentation":"

The type and resources of the underlying instance.

" + }, "ipAccessSettingsArn":{ "shape":"ARN", "documentation":"

The ARN of the IP access settings.

" }, + "maxConcurrentSessions":{ + "shape":"MaxConcurrentSessions", + "documentation":"

The maximum number of concurrent sessions for the portal.

" + }, "networkSettingsArn":{ "shape":"ARN", "documentation":"

The ARN of the network settings that is associated with the web portal.

" @@ -3042,7 +3100,7 @@ "members":{ "authenticationType":{ "shape":"AuthenticationType", - "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM_Identity_Center web portals are authenticated through AWS IAM Identity Center (successor to AWS Single Sign-On). They provide additional features, such as IdP-initiated authentication. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" + "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM Identity Center web portals are authenticated through IAM Identity Center (successor to Single Sign-On). Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" }, "browserSettingsArn":{ "shape":"ARN", @@ -3060,10 +3118,18 @@ "shape":"DisplayName", "documentation":"

The name of the web portal.

" }, + "instanceType":{ + "shape":"InstanceType", + "documentation":"

The type and resources of the underlying instance.

" + }, "ipAccessSettingsArn":{ "shape":"ARN", "documentation":"

The ARN of the IP access settings.

" }, + "maxConcurrentSessions":{ + "shape":"MaxConcurrentSessions", + "documentation":"

The maximum number of concurrent sessions for the portal.

" + }, "networkSettingsArn":{ "shape":"ARN", "documentation":"

The ARN of the network settings that is associated with the web portal.

" @@ -3252,7 +3318,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "resourceArn":{ @@ -3393,7 +3459,7 @@ }, "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true } } @@ -3414,7 +3480,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "identityProviderArn":{ @@ -3425,7 +3491,7 @@ }, "identityProviderDetails":{ "shape":"IdentityProviderDetails", - "documentation":"

The details of the identity provider. The following list describes the provider detail keys for each identity provider type.

  • For Google and Login with Amazon:

    • client_id

    • client_secret

    • authorize_scopes

  • For Facebook:

    • client_id

    • client_secret

    • authorize_scopes

    • api_version

  • For Sign in with Apple:

    • client_id

    • team_id

    • key_id

    • private_key

    • authorize_scopes

  • For OIDC providers:

    • client_id

    • client_secret

    • attributes_request_method

    • oidc_issuer

    • authorize_scopes

    • authorize_url if not available from discovery URL specified by oidc_issuer key

    • token_url if not available from discovery URL specified by oidc_issuer key

    • attributes_url if not available from discovery URL specified by oidc_issuer key

    • jwks_uri if not available from discovery URL specified by oidc_issuer key

  • For SAML providers:

    • MetadataFile OR MetadataURL

    • IDPSignout (boolean) optional

" + "documentation":"

The details of the identity provider. The following list describes the provider detail keys for each identity provider type.

  • For Google and Login with Amazon:

    • client_id

    • client_secret

    • authorize_scopes

  • For Facebook:

    • client_id

    • client_secret

    • authorize_scopes

    • api_version

  • For Sign in with Apple:

    • client_id

    • team_id

    • key_id

    • private_key

    • authorize_scopes

  • For OIDC providers:

    • client_id

    • client_secret

    • attributes_request_method

    • oidc_issuer

    • authorize_scopes

    • authorize_url if not available from discovery URL specified by oidc_issuer key

    • token_url if not available from discovery URL specified by oidc_issuer key

    • attributes_url if not available from discovery URL specified by oidc_issuer key

    • jwks_uri if not available from discovery URL specified by oidc_issuer key

  • For SAML providers:

    • MetadataFile OR MetadataURL

    • IDPSignout (boolean) optional

    • IDPInit (boolean) optional

    • RequestSigningAlgorithm (string) optional - Only accepts rsa-sha256

    • EncryptedResponses (boolean) optional

" }, "identityProviderName":{ "shape":"IdentityProviderName", @@ -3453,7 +3519,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "description":{ @@ -3492,7 +3558,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "networkSettingsArn":{ @@ -3531,12 +3597,20 @@ "members":{ "authenticationType":{ "shape":"AuthenticationType", - "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM_Identity_Center web portals are authenticated through AWS IAM Identity Center (successor to AWS Single Sign-On). They provide additional features, such as IdP-initiated authentication. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" + "documentation":"

The type of authentication integration points used when signing into the web portal. Defaults to Standard.

Standard web portals are authenticated directly through your identity provider. You need to call CreateIdentityProvider to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.

IAM Identity Center web portals are authenticated through IAM Identity Center (successor to Single Sign-On). Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.

" }, "displayName":{ "shape":"DisplayName", "documentation":"

The name of the web portal. This is not visible to users who log into the web portal.

" }, + "instanceType":{ + "shape":"InstanceType", + "documentation":"

The type and resources of the underlying instance.

" + }, + "maxConcurrentSessions":{ + "shape":"MaxConcurrentSessions", + "documentation":"

The maximum number of concurrent sessions for the portal.

" + }, "portalArn":{ "shape":"ARN", "documentation":"

The ARN of the web portal.

", @@ -3568,7 +3642,7 @@ }, "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "trustStoreArn":{ @@ -3595,7 +3669,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "kinesisStreamArn":{ @@ -3626,7 +3700,7 @@ "members":{ "clientToken":{ "shape":"ClientToken", - "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the AWS SDK.

", + "documentation":"

A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request.

If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.

", "idempotencyToken":true }, "cookieSynchronizationConfiguration":{ @@ -3721,6 +3795,10 @@ "type":"structure", "required":["userSettingsArn"], "members":{ + "additionalEncryptionContext":{ + "shape":"EncryptionContextMap", + "documentation":"

The additional encryption context of the user settings.

" + }, "associatedPortalArns":{ "shape":"ArnList", "documentation":"

A list of web portal ARNs that this user settings is associated with.

" @@ -3733,6 +3811,10 @@ "shape":"EnabledType", "documentation":"

Specifies whether the user can copy text from the streaming session to the local device.

" }, + "customerManagedKey":{ + "shape":"keyArn", + "documentation":"

The customer managed key used to encrypt sensitive information in the user settings.

" + }, "disconnectTimeoutInMinutes":{ "shape":"DisconnectTimeoutInMinutes", "documentation":"

The amount of time that a streaming session remains active after users disconnect.

" diff --git a/services/xray/pom.xml b/services/xray/pom.xml index 74c77d69d3f0..735fa85e7818 100644 --- a/services/xray/pom.xml +++ b/services/xray/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk services - 2.25.36 + 2.25.37 xray AWS Java SDK :: Services :: AWS X-Ray diff --git a/test/auth-tests/pom.xml b/test/auth-tests/pom.xml index a8d08228cb3d..68648bced433 100644 --- a/test/auth-tests/pom.xml +++ b/test/auth-tests/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/bundle-logging-bridge-binding-test/pom.xml b/test/bundle-logging-bridge-binding-test/pom.xml index 685f75dd45bb..778ab4c56a29 100644 --- a/test/bundle-logging-bridge-binding-test/pom.xml +++ b/test/bundle-logging-bridge-binding-test/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/codegen-generated-classes-test/pom.xml b/test/codegen-generated-classes-test/pom.xml index 6d762d414a2a..21447a9f86be 100644 --- a/test/codegen-generated-classes-test/pom.xml +++ b/test/codegen-generated-classes-test/pom.xml @@ -21,7 +21,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml diff --git a/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/customization.config b/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/customization.config index 71e2ca8b3532..d0d5e2fdf88c 100644 --- a/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/customization.config +++ b/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/customization.config @@ -1,4 +1,5 @@ { "skipEndpointTestGeneration": true, + "useSraAuth": true, "enableGenerateCompiledEndpointRules": false } diff --git a/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/endpoint-rule-set.json b/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/endpoint-rule-set.json index cf58fb6fe996..78c391c26449 100644 --- a/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/endpoint-rule-set.json +++ b/test/codegen-generated-classes-test/src/main/resources/codegen-resources/endpointproviders/endpoint-rule-set.json @@ -27,6 +27,16 @@ "documentation": "Override the endpoint used to send this request", "type": "String" }, + "awsAccountId": { + "type": "String", + "builtIn": "AWS::Auth::AccountId", + "required": false + }, + "awsAccountEndpointMode": { + "type": "String", + "builtIn": "AWS::Auth::AccountIdEndpointMode", + "required": false + }, "StaticStringParam": { "type": "String", "required": false diff --git a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/accountidendpointrouting/AccountIdParameterTests.java b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/accountidendpointrouting/AccountIdParameterTests.java new file mode 100644 index 000000000000..9ae0911b2715 --- /dev/null +++ b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/accountidendpointrouting/AccountIdParameterTests.java @@ -0,0 +1,111 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.services.accountidendpointrouting; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.net.URI; +import java.util.concurrent.CompletableFuture; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.mockito.ArgumentCaptor; +import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; +import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; +import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode; +import software.amazon.awssdk.endpoints.Endpoint; +import software.amazon.awssdk.http.SdkHttpClient; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.restjsonendpointproviders.RestJsonEndpointProvidersClient; +import software.amazon.awssdk.services.restjsonendpointproviders.endpoints.RestJsonEndpointProvidersEndpointParams; +import software.amazon.awssdk.services.restjsonendpointproviders.endpoints.RestJsonEndpointProvidersEndpointProvider; + +class AccountIdParameterTests { + + private RestJsonEndpointProvidersEndpointProvider mockEndpointProvider; + private SdkHttpClient mockHttpClient; + + @BeforeEach + void setup() { + mockEndpointProvider = mock(RestJsonEndpointProvidersEndpointProvider.class); + mockHttpClient = mock(SdkHttpClient.class); + when(mockHttpClient.clientName()).thenReturn("MockHttpClient"); + when(mockHttpClient.prepareRequest(any())).thenThrow(new RuntimeException("boom")); + when(mockEndpointProvider.resolveEndpoint(any(RestJsonEndpointProvidersEndpointParams.class))) + .thenReturn(CompletableFuture.completedFuture(Endpoint.builder() + .url(URI.create("https://my-service.com")) + .build())); + } + + @Test + void accountId_isResolvedToValue_whenEndpointResolverIsCalled_NOTWORKING() { + RestJsonEndpointProvidersClient client = + RestJsonEndpointProvidersClient.builder() + .endpointProvider(mockEndpointProvider) + .httpClient(mockHttpClient) + .region(Region.US_WEST_2) + .credentialsProvider(credentialsWithAccountId()) + .build(); + + assertThatThrownBy(() -> client.operationWithNoInputOrOutput(r -> {})).hasMessageContaining("boom"); + + ArgumentCaptor paramsCaptor = + ArgumentCaptor.forClass(RestJsonEndpointProvidersEndpointParams.class); + verify(mockEndpointProvider).resolveEndpoint(paramsCaptor.capture()); + + RestJsonEndpointProvidersEndpointParams resolvedEndpointParams = paramsCaptor.getValue(); + assertThat(resolvedEndpointParams.awsAccountId()).isNotNull().isEqualTo("accountId"); + assertThat(resolvedEndpointParams.awsAccountEndpointMode()).isNotNull().isEqualTo(AccountIdEndpointMode.PREFERRED.name()); + } + + @ParameterizedTest + @EnumSource(AccountIdEndpointMode.class) + void accountId_isResolvedToValue_whenEndpointResolverIsCalled(AccountIdEndpointMode accountIdEndpointMode) { + RestJsonEndpointProvidersClient client = + RestJsonEndpointProvidersClient.builder() + .endpointProvider(mockEndpointProvider) + .httpClient(mockHttpClient) + .region(Region.US_WEST_2) + .credentialsProvider(credentialsWithAccountId()) + .accountIdEndpointMode(accountIdEndpointMode) + .build(); + + assertThatThrownBy(() -> client.operationWithNoInputOrOutput(r -> {})).hasMessageContaining("boom"); + + ArgumentCaptor paramsCaptor = + ArgumentCaptor.forClass(RestJsonEndpointProvidersEndpointParams.class); + verify(mockEndpointProvider).resolveEndpoint(paramsCaptor.capture()); + + RestJsonEndpointProvidersEndpointParams resolvedEndpointParams = paramsCaptor.getValue(); + assertThat(resolvedEndpointParams.awsAccountId()).isNotNull().isEqualTo("accountId"); + assertThat(resolvedEndpointParams.awsAccountEndpointMode()).isNotNull().isEqualTo(accountIdEndpointMode.name()); + } + + private static AwsCredentialsProvider credentialsWithAccountId() { + return () -> AwsSessionCredentials.builder() + .accessKeyId("akid") + .secretAccessKey("skid") + .sessionToken("token") + .accountId("accountId") + .build(); + } +} diff --git a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/endpointproviders/AwsEndpointProviderUtilsTest.java b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/endpointproviders/AwsEndpointProviderUtilsTest.java index c55826322113..b48e27c99e5f 100644 --- a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/endpointproviders/AwsEndpointProviderUtilsTest.java +++ b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/endpointproviders/AwsEndpointProviderUtilsTest.java @@ -134,13 +134,6 @@ public void endpointBuiltIn_doesNotIncludeQueryParams() { assertThat(AwsEndpointProviderUtils.endpointBuiltIn(attrs).toString()).isEqualTo("https://example.com/path"); } - @Test - public void useGlobalEndpointBuiltIn_returnsAttrValue() { - ExecutionAttributes attrs = new ExecutionAttributes(); - attrs.putAttribute(AwsExecutionAttribute.USE_GLOBAL_ENDPOINT, true); - assertThat(AwsEndpointProviderUtils.useGlobalEndpointBuiltIn(attrs)).isEqualTo(true); - } - @Test public void setUri_combinesPathsCorrectly() { URI clientEndpoint = URI.create("https://override.example.com/a"); diff --git a/test/crt-unavailable-tests/pom.xml b/test/crt-unavailable-tests/pom.xml index b02f77657dc7..2837de708104 100644 --- a/test/crt-unavailable-tests/pom.xml +++ b/test/crt-unavailable-tests/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/http-client-tests/pom.xml b/test/http-client-tests/pom.xml index 71a1d74fa487..7fd832ed22db 100644 --- a/test/http-client-tests/pom.xml +++ b/test/http-client-tests/pom.xml @@ -21,7 +21,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml http-client-tests diff --git a/test/module-path-tests/pom.xml b/test/module-path-tests/pom.xml index 4f8fbab98ad6..50c6b7c4b535 100644 --- a/test/module-path-tests/pom.xml +++ b/test/module-path-tests/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/old-client-version-compatibility-test/pom.xml b/test/old-client-version-compatibility-test/pom.xml index ab131f4c01e3..9aca65affed4 100644 --- a/test/old-client-version-compatibility-test/pom.xml +++ b/test/old-client-version-compatibility-test/pom.xml @@ -21,7 +21,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml diff --git a/test/protocol-tests-core/pom.xml b/test/protocol-tests-core/pom.xml index d7d0c024a6fb..8292a857cec7 100644 --- a/test/protocol-tests-core/pom.xml +++ b/test/protocol-tests-core/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/protocol-tests/pom.xml b/test/protocol-tests/pom.xml index 7015cf48e682..fc7eb81b1907 100644 --- a/test/protocol-tests/pom.xml +++ b/test/protocol-tests/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/region-testing/pom.xml b/test/region-testing/pom.xml index e678ccc73698..8b4e5da96599 100644 --- a/test/region-testing/pom.xml +++ b/test/region-testing/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/ruleset-testing-core/pom.xml b/test/ruleset-testing-core/pom.xml index 6bab2fe1eb55..ffcddf8dd168 100644 --- a/test/ruleset-testing-core/pom.xml +++ b/test/ruleset-testing-core/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/s3-benchmarks/pom.xml b/test/s3-benchmarks/pom.xml index c83a963c3ae5..fcffcc98faad 100644 --- a/test/s3-benchmarks/pom.xml +++ b/test/s3-benchmarks/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/sdk-benchmarks/pom.xml b/test/sdk-benchmarks/pom.xml index c02050ffaa78..bdc84d9ac041 100644 --- a/test/sdk-benchmarks/pom.xml +++ b/test/sdk-benchmarks/pom.xml @@ -19,7 +19,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../../pom.xml diff --git a/test/sdk-native-image-test/pom.xml b/test/sdk-native-image-test/pom.xml index fae194c07c00..494cf973d82c 100644 --- a/test/sdk-native-image-test/pom.xml +++ b/test/sdk-native-image-test/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/service-test-utils/pom.xml b/test/service-test-utils/pom.xml index 13a9042a1bf3..85fa415e33d3 100644 --- a/test/service-test-utils/pom.xml +++ b/test/service-test-utils/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../../pom.xml service-test-utils diff --git a/test/stability-tests/pom.xml b/test/stability-tests/pom.xml index b368b99d84fa..aeabd030a343 100644 --- a/test/stability-tests/pom.xml +++ b/test/stability-tests/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/test/test-utils/pom.xml b/test/test-utils/pom.xml index 809fc1bd6737..194336f014cf 100644 --- a/test/test-utils/pom.xml +++ b/test/test-utils/pom.xml @@ -21,7 +21,7 @@ software.amazon.awssdk aws-sdk-java-pom - 2.25.36 + 2.25.37 ../../pom.xml test-utils diff --git a/test/tests-coverage-reporting/pom.xml b/test/tests-coverage-reporting/pom.xml index a4344d8eeed3..d781220c3743 100644 --- a/test/tests-coverage-reporting/pom.xml +++ b/test/tests-coverage-reporting/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 ../../pom.xml 4.0.0 diff --git a/third-party/pom.xml b/third-party/pom.xml index 8f857f1e2870..cff7f1e3f54b 100644 --- a/third-party/pom.xml +++ b/third-party/pom.xml @@ -21,7 +21,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 third-party diff --git a/third-party/third-party-jackson-core/pom.xml b/third-party/third-party-jackson-core/pom.xml index 6e09a08d12a3..b772beb61f50 100644 --- a/third-party/third-party-jackson-core/pom.xml +++ b/third-party/third-party-jackson-core/pom.xml @@ -20,7 +20,7 @@ third-party software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/third-party/third-party-jackson-dataformat-cbor/pom.xml b/third-party/third-party-jackson-dataformat-cbor/pom.xml index fcb64a757fd1..7f9f65fef49d 100644 --- a/third-party/third-party-jackson-dataformat-cbor/pom.xml +++ b/third-party/third-party-jackson-dataformat-cbor/pom.xml @@ -20,7 +20,7 @@ third-party software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/third-party/third-party-slf4j-api/pom.xml b/third-party/third-party-slf4j-api/pom.xml index f1a8d0b44741..5838279c93fe 100644 --- a/third-party/third-party-slf4j-api/pom.xml +++ b/third-party/third-party-slf4j-api/pom.xml @@ -20,7 +20,7 @@ third-party software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0 diff --git a/utils/pom.xml b/utils/pom.xml index d342baed75f2..0a4df4d4c6ac 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -20,7 +20,7 @@ aws-sdk-java-pom software.amazon.awssdk - 2.25.36 + 2.25.37 4.0.0