使用 AWS SDK for PHP 调用 AWS STS 获取临时凭证:AssumeRole 实战指南

发布时间:2026/9/27 11:01:19

使用 AWS SDK for PHP 调用 AWS STS 获取临时凭证:AssumeRole 实战指南 示例工程教程后端【免费下载链接】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点击查看免费下载本指南以 php/example_code/sts 目录为线索系统讲解如何在 PHP 项目中使用 AWS Security Token ServiceAWS STS获取临时安全凭证并借助这些凭证安全地访问 S3 等其他 AWS 服务。读完本文你将掌握assumeRole的核心调用方式、临时凭证的下游复用模式以及从 IAM 角色创建到凭证生效的完整链路。概述为什么需要 AWS STSAWS STSAWS Security Token Service为可信用户创建并提供临时安全凭证用于控制对 AWS 资源的访问。与长期凭证如 IAM 用户的 Access Key相比临时凭证具有三个显著特点有限生命周期凭证在几十分钟到数小时内自动过期降低长期泄露风险按需权限可以通过角色Role或联合身份Federated Identity动态获得一组权限无需在代码中硬编码密钥可组合使用获取临时凭证后可将其作为credentials注入任意 AWS 服务客户端如 S3、DynamoDB实现以角色的身份执行操作。在 PHP 生态中这一切通过 AWS SDK for PHP v3 的Aws\Sts\StsClient完成。本仓库的 STS 示例目录 提供了最核心的AssumeRole.php示例本文将以它为骨架展开讲解。环境准备与前置条件按照 php 目录 README 的说明运行 STS 示例前需要准备PHP 8.1 或更高版本Composer用于依赖管理仓库根部的 composer.json 声明了aws/aws-sdk-php: ^3.209这是 PHP 示例的统一 SDK 版本基线PHPUnit用于运行单元测试仅测试场景需要AWS 凭证按 AWS 共享凭证/配置文件方式配置默认defaultprofileSDK 会通过默认凭证提供链自动加载。安装依赖cd php composer install注意STS 示例所在目录本身没有独立的composer.json需要从php目录级别安装依赖后再进入php/example_code/sts运行示例。核心示例解析AssumeRole.phpAssumeRole.php 是本目录唯一的示例文件它完整演示了假设一个 IAM 角色 → 拿到临时凭证 → 用临时凭证初始化 S3 客户端的全过程。第一步初始化 StsClient$client new StsClient([ profile default, region us-west-2, version 2011-06-15 ]);三个关键配置项的说明配置项取值示例含义profiledefault指定使用~/.aws/credentials或~/.aws/config中哪个命名的凭证集不传则走默认凭证提供链regionus-west-2请求发往的 AWS 区域STS 是全局服务但请求仍需落在某个区域端点version2011-06-15STS API 版本号SDK for PHP v3 强制要求显式指定版本也可以写latest从源码看version是不可省略的 SDK 约束示例文件中统一显式声明版本这也是 SDK for PHP v3 客户端初始化的标准写法。第二步调用 assumeRole$roleToAssumeArn arn:aws:iam::123456789012:role/RoleName; try { $result $client-assumeRole([ RoleArn $roleToAssumeArn, RoleSessionName session1 ]);assumeRole的入参要点RoleArn目标 IAM 角色的 ARN形如arn:aws:iam::account-id:role/RoleName。示例中的123456789012:role/RoleName是占位符实际运行必须替换为真实角色的 ARNRoleSessionName会话名称用于在 CloudTrail 中标识该次角色会话的来源例如session1也作为sts:RoleSessionName条件键的取值依据。第三步解析返回值并用临时凭证驱动 S3$s3Client new S3Client([ version 2006-03-01, region us-west-2, credentials [ key $result[Credentials][AccessKeyId], secret $result[Credentials][SecretAccessKey], token $result[Credentials][SessionToken] ] ]); } catch (AwsException $e) { error_log($e-getMessage()); }assumeRole的返回结果$result[Credentials]包含四个字段示例中使用其中三个注入 S3 客户端字段用途AccessKeyId临时访问密钥 IDSecretAccessKey临时访问密钥配合上面使用SessionToken必须传递的会话令牌缺少token的请求无法通过 STS 凭证校验Expiration凭证过期时间示例未使用生产环境应据此规划轮换或续期这里的关键点是临时凭证的临时属性决定了它必须与SessionToken一起提交SDK 在构造客户端时通过credentials数组的key/secret/token三项完成注入之后该 S3 客户端的所有请求都将以被假设角色所拥有的权限来执行。AwsException的捕获与error_log输出则展示了最小化的异常处理模式——生产代码建议在此处补充重试或告警逻辑。从简单到完整临时凭证的三种获取方式除assumeRole外STS 还提供getSessionToken与getFederationToken两种获取临时凭证的方式仓库在 S3 示例中均有可运行佐证getSessionToken用当前身份换取会话凭证s3-request-with-temp-credentials.php 展示了为当前 AWS 账户身份换取临时会话凭证的写法$sts new StsClient([ version latest, region us-east-1 ]); $sessionToken $sts-getSessionToken(); $s3 new S3Client([ region us-east-1, version latest, credentials [ key $sessionToken[Credentials][AccessKeyId], secret $sessionToken[Credentials][SecretAccessKey], token $sessionToken[Credentials][SessionToken] ] ]);注意该示例将version写为latest与AssumeRole.php的显式版本号风格并存两者都是 SDK 支持的做法。随后它用临时凭证分页列出 S3 桶内对象。getFederationToken为联邦用户下发带限定策略的凭证s3-request-fed-user-with-temp-credentials.php 演示了更贴近真实多端架构的模式受信侧代码用长期凭证调用getFederationToken并通过Policy参数把权限收紧到最小范围再把临时凭证交给低信任侧代码使用$sessionToken $sts-getFederationToken([ Name User1, DurationSeconds 3600, Policy json_encode([ Statement [ Sid randomstatementid . time(), Action [s3:ListBucket], Effect Allow, Resource arn:aws:s3::: . $bucket ] ]) ]);这里DurationSeconds示例为 3600 秒控制凭证有效期Policy则动态收窄权限边界——这是最小权限原则在 STS 场景中的直接落地。文件注释也明确区分了受信代码与较少受信代码两部分为理解临时凭证的信任边界提供了很好的参考。完整链路验证IAM 场景中的 assumeRole临时凭证的价值必须放在真实调用链中验证。GettingStartedWithIAM.php 给出了从创建角色到凭证生效的七步完整场景与AssumeRole.php互为印证创建一个无任何权限的 IAM 用户创建一个角色并附加允许s3:ListAllMyBuckets的策略通过信任策略AssumeRolePolicyDocument和用户内联策略Action: sts:AssumeRole把允许该用户假设该角色的权限授予用户用该用户自己的长期凭证创建 S3 客户端尝试listBuckets——预期失败调用assumeRole换取临时凭证见源码 第 105-110 行用临时凭证重建 S3 客户端再次listBuckets——预期成功清理所有资源。其中第 4 步与第 6 步的先失败、后成功对比实验正是对 STS 工作机制最直观的验证权限不挂在用户身上而是通过角色 临时凭证的提权路径授予。这也解释了为什么assumeRole需要同时满足两个条件角色信任策略允许该主体Principal且主体自身拥有sts:AssumeRole权限。从实现细节看IAM 示例中的信任策略文档形如{ Version: 2012-10-17, Statement: [{ Effect: Allow, Principal: {AWS: user-arn}, Action: sts:AssumeRole }] }这里的Action: sts:AssumeRole是角色能否被假设的开关与 STS 侧 APIassumeRole一一对应。运行示例与测试运行 STS 示例本仓库 PHP 示例的通用运行方式为先在php目录执行composer install然后在示例所在目录直接执行 PHP 文件。STS 示例没有额外的Runner.php因此直接运行cd php/example_code/sts php AssumeRole.php运行前请务必把文件中的arn:aws:iam::123456789012:role/RoleName替换为你账户中真实存在的、且信任你当前凭证主体的角色 ARN否则将抛出权限拒绝类AwsException。运行测试STS 目录本身未附带测试文件STS README 与 php 目录 README 指出测试的通用指引遵循php目录约定测试文件以Test.php结尾、通常位于示例旁的tests目录并通过 PHPUnit 执行。整个 PHP 示例集可以按如下方式过滤运行cd php/example_code phpunit --testsuite testsuite-name # 按服务过滤 phpunit --group integ # 只跑集成测试 phpunit --group unit # 只跑单元测试与 STS 强相关的可验证测试位于 IAM 场景IAMServiceTest.php 与 IAMBasicsTest.php 中通过构造包含sts:AssumeRole动作的信任策略文档来创建角色并断言返回值可以作为 STS 相关代码行为回归的参考。注意运行这些测试同样会产生 AWS 费用。安全与成本注意事项原 README 的 Important 部分对运行此类示例提出了明确警示这里结合代码补充说明费用运行示例尤其是真实调用assumeRole并访问 S3可能产生 AWS 账户费用运行测试同样如此最小权限建议只授予任务所需的最低权限。实践中体现在两个层面角色应只挂载必要策略若走getFederationToken还应通过Policy参数进一步收窄正如 s3-request-fed-user-with-temp-credentials.php 所做区域可用性示例代码并未在每个 AWS 区域验证不同区域的服务可用性存在差异生产部署前应确认目标区域是否支持所需功能凭证安全长期凭证应保存在共享凭证文件或环境变量中避免写入代码临时凭证虽然生命周期短同样不应泄露到日志或版本控制中。进一步探索唯一 STS 示例文件AssumeRole.phpSTS 示例 READMEphp/example_code/sts/README.mdPHP 示例总入口前置条件、安装、测试约定php/README.mdSDK 版本基线配置php/composer.json临时凭证在 S3 中的两种用法s3-request-with-temp-credentials.php、s3-request-fed-user-with-temp-credentials.phpassumeRole 完整调用链场景GettingStartedWithIAM.php。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点击查看免费下载相关推荐使用 AWS SDK for Go 实现 STS AssumeRole获取临时安全凭证的完整实战指南使用 AWS SDK for Go 实现 STS AssumeRole获取临时安全凭证的完整实战指南 导读 本文以 go/sts https://link.g示例工程教程后端AWS STS 临时凭证实战指南使用 AWS SDK for JavaScript (v3) 实现 AssumeRole 角色扮演AWS STS 临时凭证实战指南使用 AWS SDK for JavaScript v3 实现 AssumeRole 角色扮演 导读 本文以 AWS Code示例工程教程后端AWS SDK for .NET 使用 STS AssumeRole 获取临时安全凭证完整示例与单元测试解析AWS SDK for .NET 使用 STS AssumeRole 获取临时安全凭证完整示例与单元测试解析 导读 本文基于 aws doc sdk exam示例工程教程后端上一篇XXMI启动器把多款游戏的模组管理装进同一个窗口下一篇QQ空间说说导出完整指南用GetQzonehistory一键备份你的全部历史说说创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/27 11:01:19

嵌入式开发实操指南:从学习路线到C674X缓存优化

干嵌入式这行,最不缺的就是劝退贴和学习资料,但最缺的其实是那种"一篇文章能把全局讲清楚、把弯路标出来"的实操总结。我在这个领域摸爬滚打了十几年,从裸机写LED驱动到上手C6748 DSP,中间踩过的坑比很多人写过的代码都…

2026/9/27 11:01:19

CH32L103工业低功耗设计:双域电源与RISC-V唤醒精度实战

1. 为什么CH32L103正在成为工业级低功耗设计的新锚点最近三个月,我在三个不同行业的工业项目里反复遇到同一个问题:客户拿着旧款STM32L0系列MCU的BOM清单来找我,说“电池供电的现场传感器节点,标称续航6个月,实测撑不过…

2026/9/27 11:41:21

什么是 OpenClacky:一个精打细算的低成本 AI Agent 的配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 11:41:21

网站页面怎么做:5个关键注意事项避开域名服务器坑

网站页面怎么做:5个关键注意事项避开域名服务器坑 很多新手刚入行,一听到做网站就头大。域名怎么买?服务器选哪家的?SSL证书又是个啥?这“域名服务器搞不懂”的痛点,卡住了80%想自己搞官网的人。别急,今天咱们不聊虚的,直接拆解…

2026/9/27 11:41:21

为什么都用dw做网站:3年老兵的对比评测与避坑指南

为什么都用dw做网站:3年老兵的对比评测与避坑指南 域名服务器搞不懂,是无数建站小白的第一道坎。很多人以为买个服务器就能跑网站,结果配置半天报错,心态崩了。其实,从“为什么都用dw做网站”这个老生常谈的话题切入,我们能看到的是前端开发工具与…

2026/9/27 11:36:21

微信公众号怎么做网站避坑指南:域名服务器哪家强

微信公众号怎么做网站避坑指南:域名服务器哪家强 “域名服务器搞不懂,找谁做微信公众号怎么做网站才靠谱?” 这是去年咨询量最大的问题,没有之一。 很多老板觉得,我有个公众号,发发文章,怎么就要搞域名和服务器了? 误区就在这。…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

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

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

2026/9/26 19:58:38

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

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

2026/9/25 18:34:56

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

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

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

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

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