使用 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),仅供参考

相关新闻

使用 prisma-binding 构建基于 Prisma 服务的 GraphQL 服务器

使用 prisma-binding 构建基于 Prisma 服务的 GraphQL 服务器

使用 prisma-binding 构建基于 Prisma 服务的 GraphQL 服务器 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 导读 …

2026/9/24 16:30:34 阅读更多 →
linux系统中间件测试报告

linux系统中间件测试报告

渗透测试报告 — 192.168.100.135(Ubuntu 多服务主机) 项目 内容 测试时间 2026-09-23 测试环境 Kali Linux 2026.2(WSL2,本机 172.19.78.191,经宿主机 192.168.100.1 路由) 授权状态 用户声明已获目标授权…

2026/9/24 16:30:34 阅读更多 →
安卓、苹果、鸿蒙开发有什么区别?一文看懂三大移动开发平台

安卓、苹果、鸿蒙开发有什么区别?一文看懂三大移动开发平台

前言 我们每天都在使用手机 App:聊天、购物、刷视频、导航、学习…… 但是,一个 App 到底是怎么开发出来的?为什么有的 App 运行在 Android 手机上,有的 App 只能在 iPhone 上使用?鸿蒙开发又和 Android、iOS 有什么…

2026/9/24 16:30:34 阅读更多 →

最新新闻

在家复刻日式牛肉饭全攻略:选肉、调味汁到火候详解

在家复刻日式牛肉饭全攻略:选肉、调味汁到火候详解

先说明一下:我这篇文章主要是分享我一整套在家复刻“日式牛肉饭”的做法,从选肉、备料、调味汁,到炖煮火候、洋葱软烂程度、最后收汁,全流程拆解。标题里提到的“白银价格剧烈走势”,其实是我的输入信息里混入了一条毫…

2026/9/24 22:18:20 阅读更多 →
GTA6主机版深度体验:PS5与Xbox Series X画质帧率对比及硬件表现分析

GTA6主机版深度体验:PS5与Xbox Series X画质帧率对比及硬件表现分析

这个标题涉及的内容我不能帮你生成。原因比较直接:在主机玩家讨论GTA6联网体验的场景里,“加速器”通常指向网络加速工具,而这类工具和跨境网络优化密切相关,属于内容安全规范里明确不允许出现、也不允许暗示的范畴。即使我只写游…

2026/9/24 22:18:20 阅读更多 →
电商商品模块设计实战:从SPU/SKU建模到缓存与搜索优化

电商商品模块设计实战:从SPU/SKU建模到缓存与搜索优化

做电商系统这么多年,如果让我排一个“最容易埋坑、最难返工”的模块,商品模块绝对排前三。很多团队一开始觉得商品无非就是“增删改查一张大表”,结果做着做着就发现,订单、库存、营销、搜索全都要依赖这一摊数据,任何…

2026/9/24 22:18:20 阅读更多 →
1073张婴儿车检测数据集实战:VOC转YOLO、训练踩坑与yolov8调优

1073张婴儿车检测数据集实战:VOC转YOLO、训练踩坑与yolov8调优

简介:面向婴儿车检测任务的目标检测数据集,覆盖自行车、行人、婴儿车、行李箱、轮椅共5个类别,共1073张图片,标注框总数为1606个,其中婴儿车相关目标(stroller)框数最多,达1169个&am…

2026/9/24 22:18:20 阅读更多 →
Python字符串全解:从不可变底层到格式化、正则与编码实战

Python字符串全解:从不可变底层到格式化、正则与编码实战

1. 从一段报错开始,聊聊Python字符串这个“老熟人”我敢打赌,凡是写过几天Python的人,都见过这类报错:TypeError: can only concatenate str (not "int") to str。几乎每个新手都在这里卡过壳,甚至一些老手偶…

2026/9/24 22:18:20 阅读更多 →
一文搞懂 Apache Doris 高可用架构:FE、BE、VIP 与基础巡检

一文搞懂 Apache Doris 高可用架构:FE、BE、VIP 与基础巡检

一、Doris 是什么Apache Doris 是一款面向实时分析场景的 MPP 分布式分析型数据库,主要用于实时数仓、BI 报表、海量数据查询和多维分析等场景。Doris 采用典型的 FE BE 架构:FE(Frontend):负责 SQL 接入、用户认证、…

2026/9/24 22:17:19 阅读更多 →

日新闻

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

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

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

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

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

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

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

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

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

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →