拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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