首页/新闻资讯/正文详情

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

发布时间:2026/9/24 16:31:45 来源:云帆数科 栏目:资讯中心
使用 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),仅供参考

相关推荐

Jev专题:Jev在科学决策点能顶替大模型吗?选错关系却算出正确标签怎么办
Jev专题:Jev在科学决策点能顶替大模型吗?选错关系却算出正确标签怎么办

(1)《三年面试五年模拟》AIGC / LLM / AI Agent 算法工程师与开发工程师求职面试秘籍,独家资源见 WeThinkIn/AIGC-Interview-Book,欢迎 Star! (2)AIGC / LLM / AI Agent 算法岗与开发岗求职面试… · 2026/9/24 16:31:45

@arizeai/phoenix-evals:用 TypeScript 构建 LLM 评估器与分类指标评估体系
@arizeai/phoenix-evals:用 TypeScript 构建 LLM 评估器与分类指标评估体系

可观测性AI 评测LLMOpsAI 应用人工智能 【免费下载链接】phoenix AI Observability & Evaluation 项目地址: https://gitcode.com/gh_mirrors/phoenix13/phoenix 点击查看 免费下载 本指南围绕 Phoenix 开源仓库中的 TypeScript 评估库 arizeai/phoenix-evals&… · 2026/9/24 16:31:45

GitHub Copilot for Xcode 自定义指令 如何上手
GitHub Copilot for Xcode 自定义指令 如何上手

GitHub Copilot for Xcode 自定义指令 如何上手 【免费下载链接】CopilotForXcode AI coding assistant for Xcode 项目地址: https://gitcode.com/GitHub_Trending/cop/CopilotForXcode 想让 AI 按你的规范写代码,却每次都在提示词里重复塞"命名约定、… · 2026/9/24 16:31:34

前期工作小结
前期工作小结

从暑假开始到目前,主要做的工作是:阅读学姐的增量学习的论文,以及对论文内的数据进行复现。论文阅读:读完学姐的论文,主要理解 LAUR 增量学习框架——用贝叶斯参数建模缓解灾难性遗忘,BERT/BGE 做特征编码&… · 2026/9/24 17:04:05

video-use 技能实战指南:用对话式 Agent 完成视频剪辑、调色、字幕与动画合成
video-use 技能实战指南:用对话式 Agent 完成视频剪辑、调色、字幕与动画合成

AI 技能/插件音视频视频处理人工智能 【免费下载链接】video-use Edit videos with coding agents 项目地址: https://gitcode.com/GitHub_Trending/vid/video-use 点击查看 免费下载 导读 video-use 是一个开源、基于对话驱动的视频编辑技能(Skill&am… · 2026/9/24 17:03:59

基于SpringBoot+Vue的美妆产品推荐系统(源代码+文档+PPT+调试+讲解)
基于SpringBoot+Vue的美妆产品推荐系统(源代码+文档+PPT+调试+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台… · 2026/9/24 17:03:47

openFrameworks 视频播放实战:基于 ofVideoPlayer 的加载、速度控制与像素可视化
openFrameworks 视频播放实战:基于 ofVideoPlayer 的加载、速度控制与像素可视化

openFrameworks 视频播放实战:基于 ofVideoPlayer 的加载、速度控制与像素可视化 【免费下载链接】openFrameworks openFrameworks is a community-developed cross platform toolkit for creative coding in C. 项目地址: https://gitcode.com/gh_mirrors/op/ope… · 2026/9/24 17:03:47

30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南
30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南

30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南 【免费下载链接】continue open-source coding agent 项目地址: https://gitcode.com/GitHub_Trending/co/continue 写代码时总要切到网页版 AI 问一句,答完再切回来贴代码&#xf… · 2026/9/24 17:03:47

【Dify】FLUX绘画机器人多模态识别与语音交互自动化
【Dify】FLUX绘画机器人多模态识别与语音交互自动化

以多模态智能交互为核心的自动化创作方式,正推动AI艺术、教育与硬件结合的快速发展。视觉识别、语音播报与机器人控制的结合,为传统绘画和教学带来了新的可能。 本文梳理FLUX绘画机器人结合多模态识别和语音播报的完整工作流,实现从图片输入、内容识别、创意生成到语音解读… · 2026/9/24 17:03:27

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

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

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码