如何使用AWS SDK for Rust获取假定角色的凭证?
在AWS SDK for Rust中获取AssumeRole返回的明文凭证
要在Rust SDK里拿到AssumeRole返回的三个核心凭证字段,直接调用STS的assume_role接口即可,不需要依赖自动凭证链的隐式处理。以下是具体实现步骤:
1. 添加依赖
在你的Cargo.toml中加入AWS SDK相关依赖:
[dependencies] aws-config = "1.1" aws-sdk-sts = "1.12" tokio = { version = "1.0", features = ["full"] }
2. 编写代码获取凭证
通过STS客户端发起AssumeRole请求,从响应中直接提取所需字段:
use aws_sdk_sts::{Client, Config, Credentials}; use aws_types::region::Region; #[tokio::main] async fn main() -> Result<(), aws_sdk_sts::Error> { // 初始化STS客户端(可使用默认配置,或指定自定义凭证来源) let config = Config::builder() .region(Region::new("us-east-1")) .build(); let client = Client::from_conf(config); // 构建AssumeRole请求参数 let assume_role_response = client .assume_role() .role_arn("arn:aws:iam::ACCOUNT_ID:role/YOUR_ROLE_NAME") .role_session_name("rust-assume-role-session") // 可选:添加外部ID、权限策略等参数 // .external_id("YOUR_EXTERNAL_ID") .send() .await?; // 提取目标凭证字段 if let Some(credentials) = assume_role_response.credentials() { let access_key_id = credentials.access_key_id(); let secret_access_key = credentials.secret_access_key(); let session_token = credentials.session_token(); // 可根据需求打印、存储或使用这些凭证 println!("Access Key ID: {}", access_key_id); println!("Secret Access Key: {}", secret_access_key); println!("Session Token: {}", session_token); // 可选:用获取到的凭证初始化其他AWS服务客户端 let custom_credentials = Credentials::new( access_key_id, secret_access_key, session_token.to_owned(), credentials.expiration(), "assume-role", ); // 示例:初始化S3客户端 // let s3_config = aws_sdk_s3::Config::builder() // .region(Region::new("us-east-1")) // .credentials_provider(custom_credentials) // .build(); // let s3_client = aws_sdk_s3::Client::from_conf(s3_config); } Ok(()) }
关键说明
assume_role()返回的AssumeRoleOutput对象,通过credentials()方法可获取Option<Credentials>结构体,其中包含你需要的三个核心凭证字段。- 若要复用这些凭证初始化其他AWS客户端,直接用
Credentials::new构建凭证实例,传入对应客户端的配置即可。 - 注意通过
if let Some处理Option类型,避免空指针panic。
内容的提问来源于stack exchange,提问作者Mikhail Subbotin
相关产品推荐
相关产品推荐

