翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SDK for Rust には、コードで作成したクライアントで使用される AWS のサービス 組み込み HTTP 機能が用意されています。
デフォルトでは、SDK for Rust は hyper
、、rustls
および に基づく HTTPS クライアントを使用しますaws-lc-rs
。このクライアントは、追加の設定なしでほとんどのユースケースでうまく機能する必要があります。
別の TLS または暗号化プロバイダーを選択する場合、aws-smithy-http-client
クレートにはいくつかの追加オプションと設定が用意されています。より高度なユースケースでは、独自の HTTP クライアントの実装を導入するか、検討のために機能リクエストを提出することをお勧めします。
代替 TLS プロバイダーの選択
aws-smithy-http-client
クレートには、いくつかの代替 TLS プロバイダーが用意されています。
以下のプロバイダーを利用できます。
前提条件
aws-lc-rs
または を使用するには、C コンパイラ (Clang または GCC) s2n-tls
を構築する必要があります。一部のプラットフォームでは、ビルドに CMake が必要になる場合があります。任意のプラットフォームで「fips」機能を使用して構築するには、CMake と Go が必要です。詳細については、AWS Libcrypto for Rust (aws-lc-rs
)
代替 TLS プロバイダーの使用方法
aws-smithy-http-client
クレートには追加の TLS オプションがあります。 AWS のサービス クライアントが別の TLS プロバイダーを使用するには、クレートからローダーhttp_client
を使用して aws_config
を上書きします。HTTP クライアントは、 AWS のサービス および 認証情報プロバイダーの両方に使用されます。
次の例は、TLS s2n-tls
プロバイダーを使用する方法を示しています。ただし、同様のアプローチは他のプロバイダーにも有効です。
サンプルコードをコンパイルするには、次のコマンドを実行して依存関係をプロジェクトに追加します。
cargo add aws-smithy-http-client -F
s2n-tls
コード例:
use aws_smithy_http_client::{tls, Builder};
#[tokio::main]
async fn main() {
let http_client = Builder::new()
.tls_provider(tls::Provider::S2nTls
)
.build_https();
let sdk_config = aws_config::defaults(
aws_config::BehaviorVersion::latest()
)
.http_client(http_client)
.load()
.await;
// create client(s) using sdk_config
// e.g. aws_sdk_s3::Client::new(&sdk_config);
}
FIPS サポートの有効化
aws-smithy-http-client
クレートには、FIPS 準拠の暗号化実装を有効にするオプションがあります。 AWS のサービス クライアントが FIPS 準拠プロバイダーを使用するには、木箱からローダーhttp_client
を使用して aws_config
を上書きします。HTTP クライアントは、 AWS のサービス および 認証情報プロバイダーの両方に使用されます。
注記
FIPS サポートでは、ビルド環境で追加の依存関係が必要です。aws-lc
木箱のビルド
サンプルコードをコンパイルするには、次のコマンドを実行して依存関係をプロジェクトに追加します。
cargo add aws-smithy-http-client -F rustls-aws-lc-fips
次のコード例では、FIPS サポートを有効にします。
// file: main.rs
use aws_smithy_http_client::{
tls::{self, rustls_provider::CryptoMode},
Builder,
};
#[tokio::main]
async fn main() {
let http_client = Builder::new()
.tls_provider(tls::Provider::Rustls(CryptoMode::AwsLcFips))
.build_https();
let sdk_config = aws_config::defaults(
aws_config::BehaviorVersion::latest()
)
.http_client(http_client)
.load()
.await;
// create client(s) using sdk_config
// e.g. aws_sdk_s3::Client::new(&sdk_config);
}
ポスト量子キー交換の優先順位付け
デフォルトの TLS プロバイダーは、ポストX25519MLKEM768
量子キー交換アルゴリズムaws-lc-rs
をサポートする rustls
の使用に基づいています。最も優先度X25519MLKEM768
の高いアルゴリズムを作成するには、rustls
パッケージを木箱に追加し、prefer-post-quantum
機能フラグを有効にする必要があります。それ以外の場合、これは使用できますが、最高優先度ではありません。詳細については、rustls
ドキュメント
注記
これは今後のリリースではデフォルトになります。
DNS リゾルバーの上書き
デフォルトの DNS リゾルバーは、HTTP クライアントを手動で設定することで上書きできます。
サンプルコードをコンパイルするには、次のコマンドを実行して依存関係をプロジェクトに追加します。
cargo add aws-smithy-http-client -F rustls-aws-lc cargo add aws-smithy-runtime-api -F client
次のコード例では、DNS リゾルバーを上書きします。
use aws_smithy_http_client::{
tls::{self, rustls_provider::CryptoMode},
Builder
};
use aws_smithy_runtime_api::client::dns::{DnsFuture, ResolveDns};
use std::net::{IpAddr, Ipv4Addr};
/// A DNS resolver that returns a static IP address (127.0.0.1)
#[derive(Debug, Clone)]
struct StaticResolver;
impl ResolveDns for StaticResolver {
fn resolve_dns<'a>(&'a self, _name: &'a str) -> DnsFuture<'a> {
DnsFuture::ready(Ok(vec![IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1))]))
}
}
#[tokio::main]
async fn main() {
let http_client = Builder::new()
.tls_provider(tls::Provider::Rustls(CryptoMode::AwsLc))
.build_with_resolver(StaticResolver);
let sdk_config = aws_config::defaults(
aws_config::BehaviorVersion::latest()
)
.http_client(http_client)
.load()
.await;
// create client(s) using sdk_config
// e.g. aws_sdk_s3::Client::new(&sdk_config);
}
注記
デフォルトでは、Amazon Linux 2023 (AL2023) はオペレーティングシステムレベルで DNS をキャッシュしません。
ルート CA 証明書のカスタマイズ
デフォルトでは、TLS プロバイダーは特定のプラットフォームのシステムネイティブルート証明書をロードします。この動作をカスタマイズしてカスタム CA バンドルをロードするには、独自の TlsContext
で を設定できますTrustStore
。
サンプルコードをコンパイルするには、次のコマンドを実行して依存関係をプロジェクトに追加します。
cargo add aws-smithy-http-client -F rustls-aws-lc
次の例では、 rustls
で を使用しますaws-lc
が、サポートされている TLS プロバイダーで動作します。
use aws_smithy_http_client::{
tls::{self, rustls_provider::CryptoMode},
Builder
};
use std::fs;
/// read the PEM encoded root CA (bundle) and return a custom TLS context
fn tls_context_from_pem(filename: &str) -> tls::TlsContext {
let pem_contents = fs::read(filename).unwrap();
// Create a new empty trust store (this will not load platform native certificates)
let trust_store = tls::TrustStore::empty()
.with_pem_certificate(pem_contents.as_slice());
tls::TlsContext::builder()
.with_trust_store(trust_store)
.build()
.expect("valid TLS config")
}
#[tokio::main]
async fn main() {
let http_client = Builder::new()
.tls_provider(tls::Provider::Rustls(CryptoMode::AwsLc))
.tls_context(tls_context_from_pem("my-custom-ca.pem"))
.build_https();
let sdk_config = aws_config::defaults(
aws_config::BehaviorVersion::latest()
)
.http_client(http_client)
.load()
.await;
// create client(s) using sdk_config
// e.g. aws_sdk_s3::Client::new(&sdk_config);
}