使用 AWS SDK for C++ 调用 AWS STS:AssumeRole 临时凭证示例详解

发布时间:2026/9/24 16:31:33

使用 AWS SDK for C++ 调用 AWS STS:AssumeRole 临时凭证示例详解 使用 AWS SDK for C 调用 AWS STSAssumeRole 临时凭证示例详解【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址: https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examplesAWS Security Token ServiceAWS STS用于为可信用户颁发可控制 AWS 资源访问权限的临时安全凭证。本文以 aws-doc-sdk-examples 仓库中 cpp/example_code/sts 目录下的官方 C 示例为主线完整讲解如何构建、运行并用 gtest 验证AssumeRole操作帮助读者掌握在 C 应用中安全换取跨账户临时凭证并以此访问外部账户 S3 资源的完整实战流程。概述示例在项目中的定位该示例展示了使用 AWS SDK for C 与 AWS STS 协同工作的标准做法覆盖两大核心场景调用AssumeRole传入角色 ARN、会话名称与外部 IDExternalId换取一组临时安全凭证Access Key、Secret Key、Session Token。临时凭证的落地使用用换取的临时凭证初始化 S3 客户端列出外部账户下的 S3 存储桶验证凭证的实际可用性。源码文件清单位于 cpp/example_code/sts文件作用assume_role.cpp核心示例assumeRole()函数实现与可执行入口mainsts_samples.h声明AwsDoc::STS::assumeRole接口CMakeLists.txt顶层构建脚本生成run_assume_role可执行文件tests/gtest_assume_role.cpp单元测试真实调用 Mock HTTP 两种模式tests/sts_gtests.cpp测试夹具创建/删除 IAM Role、构造信任策略tests/mock_input/AssumeRole.xmlMock 模式下模拟的 STS 响应报文前置条件运行示例前请先按官方指南完成 SDK 安装与凭据配置安装 AWS SDK for C并完成凭据、区域等环境初始化对应官方Getting started流程。了解本仓库代码示例的构建与运行约定每个源文件都会生成一个可执行文件位于构建目录中命名为run_ 源文件名去掉后缀。准备一个已存在的 IAM 角色且该角色需信任你的账户信任策略中授予sts:AssumeRole权限。⚠️ 注意运行本示例或测试可能产生 AWS 账户费用建议参考 AWS 定价与免费套餐说明。建议遵循最小权限原则仅授予完成任务所必需的最低权限。本示例代码未在所有 AWS 区域进行测试请确认目标服务在你所使用的区域可用。核心实现assumeRole 函数逐行解析assumeRole的完整实现位于 assume_role.cpp其函数签名声明于 sts_samples.hbool AwsDoc::STS::assumeRole(const Aws::String roleArn, const Aws::String roleSessionName, const Aws::String externalId, Aws::Auth::AWSCredentials credentials, const Aws::Client::ClientConfiguration clientConfig);参数含义与取值范围参数说明roleArn目标 IAM 角色的 Amazon Resource NameARN形如arn:aws:iam::account-id:role/role-nameroleSessionName会话名称。从源码测试可见其被限制在 62 个字符以内见 gtest_assume_role.cpp用于在 CloudTrail 等审计日志中标识该会话externalId外部 ID。可选但推荐使用用于防止混淆代理人攻击示例中采用固定值012345见 assume_role.cpp生产环境应使用随机生成的高熵值credentials输出参数用于接收临时凭证是标准的Aws::Auth::AWSCredentials实例clientConfig客户端配置可指定区域示例中以注释形式给出clientConfig.region us-east-1的用法见 assume_role.cpp调用流程Aws::STS::STSClient sts(clientConfig); Aws::STS::Model::AssumeRoleRequest sts_req; sts_req.SetRoleArn(roleArn); sts_req.SetRoleSessionName(roleSessionName); sts_req.SetExternalId(externalId); const Aws::STS::Model::AssumeRoleOutcome outcome sts.AssumeRole(sts_req); if (!outcome.IsSuccess()) { std::cerr Error assuming IAM role. outcome.GetError().GetMessage() std::endl; } else { // 从结果中取出临时凭证 const Aws::STS::Model::AssumeRoleResult result outcome.GetResult(); const Aws::STS::Model::Credentials temp_credentials result.GetCredentials(); // 将 STS 返回的凭证写入 AWSCredentials 对象 credentials.SetAWSAccessKeyId(temp_credentials.GetAccessKeyId()); credentials.SetAWSSecretKey(temp_credentials.GetSecretAccessKey()); credentials.SetSessionToken(temp_credentials.GetSessionToken()); }流程要点基于ClientConfiguration创建STSClient。构造AssumeRoleRequest并填充角色 ARN、会话名称、外部 ID 三个字段。调用sts.AssumeRole()获取AssumeRoleOutcome。通过outcome.IsSuccess()判断成败失败时用outcome.GetError().GetMessage()输出错误详情。成功时将AssumeRoleResult.GetCredentials()中的临时凭证回填到AWSCredentials输出参数。源码注释特别提醒STS 返回的Credentials对象与常规使用的AWSCredentials对象不同因此必须显式搬运 AccessKeyId、SecretAccessKey 与 SessionToken 三个字段。完整运行入口main 函数实战演示示例的可执行入口在 assume_role.cpp通过#ifndef TESTING_BUILD与测试构建隔离测试编译时定义TESTING_BUILD宏从而跳过main。命令行用法run_assume_role role_arn role_session_name完整执行逻辑校验参数个数必须为 3程序名 两个参数否则打印用法并退出。调用Aws::InitAPI(options)初始化 SDK 运行时环境。读取roleArn、roleSessionName使用固定外部 ID012345。调用assumeRole()失败则返回退出码 1。凭证落地验证用换取的临时凭证创建 S3 客户端Aws::S3::S3Client s3(credentials)调用s3.ListBuckets()列出外部账户的存储桶并逐个打印名称。注意被扮演的角色必须授予相应的 Amazon S3 权限否则该步会失败见 assume_role.cpp。退出作用域后调用Aws::ShutdownAPI(options)清理 SDK。这段代码直观展示了 STS 临时凭证最典型的应用模式扮演角色 → 获取临时凭证 → 用临时凭证驱动其他 AWS 服务客户端。构建示例CMake 配置解读顶层 CMakeLists.txt 定义了构建规则关键点如下最低 CMake 版本要求3.13C 标准为 C11默认构建共享库。通过find_package(AWSSDK REQUIRED COMPONENTS ${SERVICE_COMPONENTS})查找 SDK本示例依赖三个组件sts、iam、s3见 CMakeLists.txt。遍历所有.cpp源文件生成同名可执行文件源文件assume_role.cpp对应目标run_assume_role。支持用AWSDOC_SOURCE变量在命令行限定参与构建的源文件。当BUILD_TESTSON时通过add_subdirectory(tests)引入测试子项目。运行单元测试测试类型约定测试文件 gtest_assume_role.cpp 顶部注释明确了命名约定测试名后缀_1_表示需要凭据、权限和 AWS 资源_2_表示需要凭据和权限_3_表示无需真实凭据走 Mock。两个测试用例assume_role_2U_真实调用需要当前用户环境后缀U表示仅在用户环境运行在 EC2 实例等已扮演角色的环境中会失败。流程为通过测试夹具创建 IAM 角色并获取其 ARN生成 62 字符以内的随机会话名随后最多重试 20 次、每次间隔 1 秒调用assumeRole()以等待新创建角色在 AWS 全局传播生效见 gtest_assume_role.cpp。assume_role_3_Mock 模式通过MockHTTP加载 mock_input/AssumeRole.xml 作为模拟响应无需真实 AWS 凭据即可验证代码路径。该 XML 模拟了包含AssumedRoleUser、CredentialsAccessKeyId、SecretAccessKey、SessionToken、Expiration与ResponseMetadata的标准 STS 响应报文。测试夹具细节测试夹具定义在 sts_gtests.cpp 与 sts_gtests.hSetUpTestSuite中调用InitAPI并初始化s_clientConfig必须是指针因为配置要在InitAPI之后创建。createRole()通过 IAM 客户端创建角色并使用getAssumeRolePolicyJSON()动态生成信任策略——该策略基于当前用户的 ARN 构造Principal授予sts:AssumeRole动作见 sts_gtests.cpp。测试结束后TearDownTestSuite会调用deleteRole()清理已创建的角色避免残留资源。自定义CustomMockHTTPClient对凭据请求URI 中含/credentials/单独返回模拟的临时凭证响应其余请求才走预设的 Mock 响应确保测试过程中 SDK 内部的元数据服务/配置文件凭据请求不会被 Mock 响应污染见 sts_gtests.cpp。运行测试的命令在测试子目录的 CMakeLists.txt 中测试目标名为sts_gtest依赖sts、iam、s3组件与 GTest若系统未安装 GTest会自动通过 FetchContent 拉取 googletest release-1.12.1。测试构建会定义TESTING_BUILD宏与SRC_DIR宏用于定位 Mock 输入文件。在构建目录中执行cd BUILD_DIR cmake path-to-root-of-this-source-code -DBUILD_TESTSON make ctest⚠️ 运行assume_role_2U_这类真实调用测试会产生真实的 AWS API 调用可能产生费用。补充资料导航本示例所在源码目录cpp/example_code/sts更多 C AWS SDK 代码示例入口cpp/example_codeSTS 临时凭证概念可参阅 AWS STS 用户指南与 API 参考中关于AssumeRole的说明C SDK 的 STS 客户端 API 说明可查阅随 SDK 安装的aws-cpp-sdk-sts头文件如 assume_role.cpp 所引用的aws/sts/STSClient.h与aws/sts/model/AssumeRoleRequest.h。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址: https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/24 17:26:40

RocketMQ怎么保证消息不丢

^^ 《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用: 《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808 一、Producer端 1、消息发送确认机制: 同步发送会等待Broker确认消息发送成功&#xff…

2026/9/24 17:26:40

第4章 节点 Node 详解

节点是图的基本计算单元。本章讲清节点的完整输入输出契约:它能接收哪些参数(state / config / runtime)、返回值必须遵循什么规则(增量更新);再介绍两个生产级能力——节点缓存(CachePolicy&am…

2026/9/24 17:26:40

RabbitMQ和RocketMQ

^^ 《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用: 《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808 1、开发语言: RabbitMQ是Erlang语言开发的; RocketMQ是Java语言开发的。 2、…

2026/9/24 17:26:40

RocketMQ知识点

^^ 《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用: 《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808 RocketMQ是队列式的消息中间件。由Producer、Consumer、Broker、NameServer组成。Productor创建消息…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码