我正在使用用于Rust的AWS SDK来承担在新帐户下发出请求的角色.

docs中的Python示例所示,我正在寻找aws_access_key_idaws_secret_access_keyaws_session_token这样的凭据,

然而,铁 rust 的例子看起来不同,而且似乎没有浮出水面的基本凭据.

我如何使用AWS SDK for Rust获取我承担的角色的凭据?

推荐答案

Rust示例并不是最好的(诚然它还在预览中)&;也有一个名为role_name的参数,而实际上它应该是role_arn……

也就是说,要获得访问密钥ID、秘密访问密钥和会话令牌--就像Python示例一样--use the 100 method of the 101.

let provider = aws_config::sts::AssumeRoleProvider::builder(role_arn)
    .session_name(session_name.unwrap())
    .configure(config)
    .build()
    .await;

let credentials = provider.provide_credentials().await.unwrap();

println!("AWS Access Key ID: {}", credentials.access_key_id());
println!("AWS Secret Access Key: {}", credentials.secret_access_key());
println!("AWS Session Token: {}", credentials.session_token().unwrap_or_default());

以下是一个完整但最小的工作Rust CLI应用程序来演示以上内容:

// cargo.toml

[package]
name = "aws-sdk-for-rust-assume-role-demo"
version = "0.1.0"
edition = "2021"

[dependencies]
aws-config = "0.57.1"
aws-credential-types="0.57.1"
aws-types="0.57.1"
tokio = { version = "1", features = ["full"] }

// main.rs

use aws_config::SdkConfig;
use aws_credential_types::provider::ProvideCredentials;

#[tokio::main]
async fn main() {
    let config = aws_config::load_from_env().await;
    let role_arn = "arn:aws:iam::xxx:role/xxx".to_string();
    let session_name = Option::from("xxx".to_string());

    assume_role(&config, role_arn, session_name).await;
}

async fn assume_role(config: &SdkConfig, role_arn: String, session_name: Option<String>) {
    let provider = aws_config::sts::AssumeRoleProvider::builder(role_arn)
        .session_name(session_name.unwrap())
        .configure(config)
        .build()
        .await;

    let credentials = provider.provide_credentials().await.unwrap();
    println!("AWS Access Key ID: {}", credentials.access_key_id());
    println!("AWS Secret Access Key: {}", credentials.secret_access_key());
    println!("AWS Session Token: {}", credentials.session_token().unwrap_or_default());
}

Rust相关问答推荐

无需通过ASIO输入音频,并使用cpal进行反馈示例

在泛型 struct 的字段声明中访问关联的Conant

Rust&;Tokio:如何处理更多的信号,而不仅仅是SIGINT,即SIGQUE?

在IntoIter上调用.by_ref().Take().rev()时会发生什么情况

写入引用会更新基础值,但引用会打印意外的值

无法将 rust 蚀向量附加到另一个向量

在运行特定测试时,如何 suppress cargo test 的空输出?

为什么编译器看不到这个 `From` impl?

详尽的匹配模式绑定

write_buffer 不写入缓冲区而是输出零 WGPU

如何将 Rust 字符串转换为 i8(c_char) 数组?

如何在 Rust 中将 UTF-8 十六进制值转换为 char?

是否可以预测堆栈溢出?

为什么在 macOS / iOS 上切换 WiFi 网络时 reqwest 响应会挂起?

仅当满足外部条件时如何添加到 actix web 的路由

没有通用参数的通用返回

在 Rust 中为泛型 struct 编写一次特征绑定

通用函数中的生命周期扣除和borrow (通用测试需要)

为什么我可以从读取的可变自引用中移出?

返回 &str 但不是 String 时,borrow 时间比预期长