Skip to content
Unverified Commit de4be56e authored by ysaito1001's avatar ysaito1001 Committed by GitHub
Browse files

Add support for environment token provider for services whose SigV4 signing...

Add support for environment token provider for services whose SigV4 signing names are `bedrock` (#4241)

## Motivation and Context
Adds support for environment token provider for AWS services whose SigV4
service signing name matches `bedrock`. Setting this environment
variable, `AWS_BEARER_TOKEN_BEDROCK`, allows SDKs to prefer the
`httpBearerAuth` auth scheme and to retrieve a `Token` value from the
said environment.

## Description
Customers would use the environment variable in question like so:
```
    // export AWS_BEARER_TOKEN_BEDROCK=my-token

    let sdk_config = aws_config::defaults(BehaviorVersion::latest()).load().await;

    let bedrock_client = aws_sdk_bedrock::Client::new(&sdk_config);
    // call an operation on `bedrock_client`...
```
Under the hood, this is equivalent roughly to
```
    let sdk_config = aws_config::defaults(BehaviorVersion::latest()).load().await;
    let bedrock_config = aws_sdk_bedrock::config::Builder::from(sdk_config)
        .auth_scheme_preference([HTTP_BEARER_AUTH_SCHEME_ID])
        .token_provider(Token::new("my-token", None))
        .build();

    let bedrock_client = aws_sdk_bedrock::Client::from_conf(bedrock_config);
    // call an operation on `bedrock_client`...
```
This behind-the-scenes convenience is implemented in `impl
From<&SdkConfig> for Builder`, similar to how a service-specific
environment is implemented for the [endpoint
URL](https://docs.aws.amazon.com/sdkref/latest/guide/feature-ss-endpoints.html#ss-endpoints-envar).

However, `impl From<&SdkConfig> for Builder` implies that customers need
to create a service client from `SdkConfig` (typically through
[ConfigLoader::load](https://docs.rs/aws-config/latest/aws_config/struct.ConfigLoader.html#method.load))
in order to take advantage of the environment variable. If customers
create the service client directly from the service config builder, the
environment variable will not be applied, i.e.
```
    // export AWS_BEARER_TOKEN_BEDROCK=my-token

    let bedrock_config = aws_sdk_bedrock::Config::builder()
        // other configurations
        .build();

    let bedrock_client = aws_sdk_bedrock::Client::from_conf(bedrock_config);
    // `bedrock_client` neither prefers HTTP_BEARER_AUTH_SCHEME_ID nor sets a Token with my-token.
```

## Testing
- Added integration tests for `bedrockruntime` (whose model is already
checked in to `aws/sdk/aws-models`)

## Checklist
- [x] For changes to the AWS SDK, generated SDK code, or SDK runtime
crates, I have created a changelog entry Markdown file in the
`.changelog` directory, specifying "aws-sdk-rust" in the `applies_to`
key.

----

_By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice._
parent 0642b3b8
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment