如何使用适用于 Rust 的 AWS 开发工具包获取我所担任角色的凭证?

问题描述 投票:0回答:1

我正在使用适用于 Rust 的 AWS 开发工具包来承担在新账户下发出请求的角色。

docs 中的 Python 示例所示,我正在寻找

aws_access_key_id
aws_secret_access_key
aws_session_token
,

等凭证

但是,Rust 示例看起来有所不同,并且似乎没有显示底层凭证。

如何使用适用于 Rust 的 AWS 开发工具包获取我所担任角色的凭证?

amazon-web-services rust amazon-iam aws-sts aws-sdk-rust
1个回答
0
投票

Rust 示例不是最好的(因为它确实处于预览状态)并且还有一个名为

role_name
的参数,而实际上它应该是
role_arn
...

也就是说,要获取访问密钥 ID、秘密访问密钥和会话令牌 - 就像 Python 示例一样 - 使用 ProvideCredentials

AssumeRoleProvider
 方法。

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());
}
© www.soinside.com 2019 - 2024. All rights reserved.