示例工程教程后端【免费下载链接】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-doc-sdk-examples 仓库javav2/example_code/sts模块讲解如何使用 AWS SDK for Java 2.x 调用 AWS Security Token ServiceAWS STS获取临时凭证AssumeRole / GetSessionToken、验证调用者身份GetCallerIdentity、查询访问密钥归属GetAccessKeyInfo。读完本文你将掌握 STS 客户端的构建方式、每个示例的命令行用法、Maven 构建与 JUnit 5 集成测试的完整运行流程以及测试参数的配置方式。模块概览STS 与临时凭证AWS STS 为受信任用户创建并提供临时安全凭证用于控制对 AWS 资源的访问。这是临时凭证而非长期 Access Key的典型来源当应用需要跨账户访问、给 IAM 用户发放受限的短时凭证、或验证当前凭证来源时都会调用 STS API。javav2/example_code/sts模块包含四个单操作示例和一套集成测试模块内文件结构如下文件作用AssumeRole.java扮演指定角色获取临时凭证GetSessionToken.java为 IAM 用户获取临时会话令牌GetCallerIdentity.java查询当前凭证对应的用户 ID 与 ARNGetAccessKeyInfo.java根据 Access Key ID 查询其所属账户STSServiceTest.javaJUnit 5 集成测试按序调用上述四个示例pom.xmlMaven 构建与依赖配置config.properties测试参数模板resources 目录每个示例源码中都带有形如// snippet-start:[sts.java2.assume_role.main]的标记注释——该仓库的示例会被抽取到 AWS 官方文档中标记用于界定可发布的代码片段边界。开始前的重要注意事项以下事项继承自模块 READMEjavav2/example_code/sts/README.md在运行任何示例前必须了解可能产生费用运行这些代码以及运行测试都可能对你的 AWS 账户产生计费。最小权限原则建议按最小权限授权——只授予完成任务所需的最小权限集合。区域可用性这些代码并非在每个 AWS 区域都经过测试运行前请确认所用区域支持相应服务。另外根据 javav2/README.md 的通用警告示例会对你配置了凭证的账户和区域执行真实 AWS 操作部分示例执行破坏性操作删除桶、删表等。虽然 STS 本身只涉及查询与换取凭证不直接改动资源但仍建议使用独立的测试账户或测试专用资源。前置条件与依赖配置运行环境参照 javav2/README.md 中的通用前置要求本地拥有该仓库的访问权限克隆、fork 或下载压缩包安装 Apache Maven 3.0所有 Java 2.x 示例都假设 SDK 能通过默认凭证提供程序链default credentials provider chain获取 AWS 凭证。可以在共享 AWS 配置文件的默认 profile 中配置在~/.aws/config中配置 IAM Identity Center SSO在~/.aws/credentials中配置临时凭证默认区域配置。如果未设置区域默认使用us-east-1。pom.xml 依赖解析模块的 pom.xml 关键配置如下Java 版本21java.version、maven.compiler.source/target均为 21编译插件版本 3.1AWS SDK BOM通过dependencyManagement导入software.amazon.awssdk:bom:2.35.10统一管理各服务客户端的版本核心依赖software.amazon.awssdk:sts—— STS 服务客户端software.amazon.awssdk:secretsmanager—— 供集成测试从 Secrets Manager 读取测试参数software.amazon.awssdk:sso与ssooidc—— 支持 IAM Identity CenterSSO凭证链com.google.code.gson:gson:2.10.1—— 测试中用于反序列化 JSON 格式的密钥内容org.junit.jupiter:junit-jupiter:5.11.4test scope—— JUnit 5 测试框架Log4j2log4j-core、log4j-slf4j2-impl、log4j-1.2-apislf4j-api—— 测试日志输出。测试运行插件为maven-surefire-plugin:3.5.2即mvn test时由 Surefire 驱动 JUnit 5 测试。示例一AssumeRole —— 扮演角色获取临时凭证这是模块 README 中列出的核心单操作示例AssumeRole.java。前置准备信任关系Trust Relationship源码注释明确要求在运行该示例前先创建一个想扮演的角色并在 AWS Console 中为其定义信任关系让示例使用的 IAM 用户有权执行sts:AssumeRole。注释中给出的信任策略示例{ Version: 2012-10-17, Statement: [ { Effect: Allow, Principal: { AWS: Specify the ARN of your IAM user you are using in this code example }, Action: sts:AssumeRole } ] }即Principal.AWS需替换为你在本示例中使用的 IAM 用户的 ARN动作限定为sts:AssumeRole。完整代码package com.example.sts; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.model.AssumeRoleRequest; import software.amazon.awssdk.services.sts.model.StsException; import software.amazon.awssdk.services.sts.model.AssumeRoleResponse; import software.amazon.awssdk.services.sts.model.Credentials; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; import java.util.Locale; public class AssumeRole { public static void main(String[] args) { final String usage Usage: roleArn roleSessionName\s Where: roleArn - The Amazon Resource Name (ARN) of the role to assume (for example, arn:aws:iam::000008047983:role/s3role).\s roleSessionName - An identifier for the assumed role session (for example, mysession).\s ; if (args.length ! 2) { System.out.println(usage); System.exit(1); } String roleArn args[0]; String roleSessionName args[1]; Region region Region.US_EAST_1; StsClient stsClient StsClient.builder() .region(region) .build(); assumeGivenRole(stsClient, roleArn, roleSessionName); stsClient.close(); } public static void assumeGivenRole(StsClient stsClient, String roleArn, String roleSessionName) { try { AssumeRoleRequest roleRequest AssumeRoleRequest.builder() .roleArn(roleArn) .roleSessionName(roleSessionName) .build(); AssumeRoleResponse roleResponse stsClient.assumeRole(roleRequest); Credentials myCreds roleResponse.credentials(); // Display the time when the temp creds expire. Instant exTime myCreds.expiration(); String tokenInfo myCreds.sessionToken(); // Convert the Instant to readable date. DateTimeFormatter formatter DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT) .withLocale(Locale.US) .withZone(ZoneId.systemDefault()); formatter.format(exTime); System.out.println(The token tokenInfo expires on exTime); } catch (StsException e) { System.err.println(e.getMessage()); System.exit(1); } } }关键点解析命令行参数程序要求恰好 2 个参数否则打印用法并退出System.exit(1)。roleArn—— 要扮演的角色的 ARN形如arn:aws:iam::000008047983:role/s3roleroleSessionName—— 假设角色会话的标识符形如mysession。会话名会出现在 CloudTrail 日志中便于审计是哪个会话发起的操作。客户端构建通过StsClient.builder().region(region).build()创建同步客户端区域硬编码为Region.US_EAST_1。凭证不在代码中显式传入而是走 SDK 的默认凭证提供程序链见前置条件。调用链AssumeRoleRequest.builder().roleArn(...).roleSessionName(...).build()构造请求 →stsClient.assumeRole(roleRequest)发起调用 → 从AssumeRoleResponse中取出Credentials对象。结果处理Credentials包含expiration()临时凭证过期时间Instant类型与sessionToken()会话令牌。代码用DateTimeFormatterSHORT 风格、美式区域、系统默认时区把过期时间格式化为可读日期并打印令牌与过期信息。错误处理捕获StsExceptionSTS 服务异常的统一类型打印消息后以退出码 1 结束。资源释放main末尾调用stsClient.close()。从源码结构看业务逻辑被抽成静态方法assumeGivenRole(StsClient, String, String)便于集成测试直接复用同一客户端实例见下文测试章节。运行方式构建后以java -cp方式运行构建方式见运行示例一节java -cp target/STSProjectJ2-1.0-SNAPSHOT.jar com.example.sts.AssumeRole arn:aws:iam::123456789012:role/my-role mysession示例二GetSessionToken —— 为 IAM 用户获取会话令牌GetSessionToken.java 演示getSessionToken操作——与 AssumeRole 不同它不扮演角色而是为当前 IAM 用户非角色换取一组临时会话凭证。public class GetSessionToken { public static void main(String[] args) { Region region Region.US_EAST_1; StsClient stsClient StsClient.builder() .region(region) .build(); getToken(stsClient); stsClient.close(); } public static void getToken(StsClient stsClient) { try { GetSessionTokenRequest tokenRequest GetSessionTokenRequest.builder() .durationSeconds(1500) .build(); GetSessionTokenResponse tokenResponse stsClient.getSessionToken(tokenRequest); System.out.println(The token value is tokenResponse.credentials().sessionToken()); } catch (StsException e) { System.err.println(e.getMessage()); System.exit(1); } } }要点请求通过durationSeconds(1500)指定凭证有效期为 1500 秒25 分钟该参数决定了返回凭证的Expiration时刻。响应从tokenResponse.credentials().sessionToken()中取出会话令牌并打印。与 AssumeRole 相同的模式区域US_EAST_1、StsException兜底、stsClient.close()收尾。该操作无需任何命令行参数main方法直接构建客户端并调用getToken。示例三GetCallerIdentity —— 验证当前凭证身份GetCallerIdentity.java 是最常用的凭证体检操作不改变任何状态只回答我当前的凭证是谁。public class GetCallerIdentity { public static void main(String[] args) { Region region Region.US_EAST_1; StsClient stsClient StsClient.builder() .region(region) .build(); getCallerId(stsClient); stsClient.close(); } public static void getCallerId(StsClient stsClient) { try { GetCallerIdentityResponse response stsClient.getCallerIdentity(); System.out.println(The user id is response.userId()); System.out.println(The ARN value is response.arn()); } catch (StsException e) { System.err.println(e.getMessage()); System.exit(1); } } }要点getCallerIdentity()是无参操作不需要任何请求对象响应中userId()返回当前身份的用户 IDarn()返回完整 ARN。若当前凭证来自角色ARN 即为该角色的 ARN若来自 IAM 用户则是用户 ARN——这使得它成为验证凭证来自 AssumeRole 还是长期密钥的实用手段无需命令行参数运行java -cp target/STSProjectJ2-1.0-SNAPSHOT.jar com.example.sts.GetCallerIdentity即可。示例四GetAccessKeyInfo —— 查询访问密钥归属GetAccessKeyInfo.java 演示根据 Access Key ID 反查其所属 AWS 账户常用于排查这个泄露的密钥属于哪个账户之类的安全问题。public class GetAccessKeyInfo { public static void main(String[] args) { final String usage Usage: accessKeyId\s Where: accessKeyId - The identifier of an access key (for example, XXXXX3JWY3BXW7POHDLA).\s ; if (args.length ! 1) { System.out.println(usage); System.exit(1); } String accessKeyId args[0]; Region region Region.US_EAST_1; StsClient stsClient StsClient.builder() .region(region) .build(); getKeyInfo(stsClient, accessKeyId); stsClient.close(); } public static void getKeyInfo(StsClient stsClient, String accessKeyId) { try { GetAccessKeyInfoRequest accessRequest GetAccessKeyInfoRequest.builder() .accessKeyId(accessKeyId) .build(); GetAccessKeyInfoResponse accessResponse stsClient.getAccessKeyInfo(accessRequest); System.out.println(The account associated with the access key is accessResponse.account()); } catch (StsException e) { System.err.println(e.getMessage()); System.exit(1); } } }要点命令行参数恰好 1 个accessKeyId访问密钥的标识符源码注释给出的示例形如XXXXX3JWY3BXW7POHDLAGetAccessKeyInfoRequest.builder().accessKeyId(accessKeyId).build()构造请求响应中account()返回该密钥所属账户的账户 ID运行方式java -cp target/STSProjectJ2-1.0-SNAPSHOT.jar com.example.sts.GetAccessKeyInfo XXXXX3JWY3BXW7POHDLA。运行示例Maven 构建与执行模块 README 的Run the examples章节指向 javav2/README.md 的通用流程具体步骤如下1. 构建进入示例所在目录本模块即javav2/example_code/sts执行mvn packageMaven 会自动下载构建所需的 AWS SDK 依赖。构建产物 JAR 位于target目录。若需把所有依赖打进一个可直接运行的 uber JAR需按 javav2/README.md 的说明在 POM 中加入maven-shade-plugin配置注意本模块的 pom.xml 默认并未包含 shade 插件直接以java -cp方式运行需要依赖已在本地仓库可用或在自己的 POM 中补上 shade 配置。2. 运行javav2/README.md给出的通用运行模式为java -cp target/生成的JAR com.example.sts.示例类名 [参数...]对 STS 模块即java -cp target/STSProjectJ2-1.0-SNAPSHOT.jar com.example.sts.AssumeRole arn:aws:iam::123456789012:role/my-role mysessionpom.xml中artifactId为STSProjectJ2、version为1.0-SNAPSHOT故 JAR 命名为STSProjectJ2-1.0-SNAPSHOT.jar。测试JUnit 5 集成测试与参数配置测试参数模块 README 的 Properties file 章节说明运行 STS 的 JUnit 测试前必须在resources文件夹中的config.properties文件里定义所需取值未定义全部取值时测试会失败。本模块实际模板 config.properties 内容为三个占位项roleArn set the roleArn value accessKeyId set the accessKeyId value roleSessionName set the roleSessionName value各取值含义roleArn—— 要扮演的角色的 Amazon 资源名称ARNaccessKeyId—— 一个访问密钥的标识符roleSessionName—— 假设角色会话的标识符。需要注意的一个实现细节从 STSServiceTest.java 的源码看测试类在setUp中并没有直接解析config.properties而是通过SecretsManagerClient从 AWS Secrets Manager 中名为test/sts的秘密读取一段 JSON 字符串再用 Gson 反序列化为内部类SecretValues含roleArn、accessKeyId、roleSessionName三个字段。也就是说实际运行这套测试的前提是账户中已存在test/sts这条秘密其 JSON 内容包含上述三个键。config.properties则作为参数的取值说明模板保留在 resources 目录中。测试结构STSServiceTest.java 的关键设计类级注解TestInstance(TestInstance.Lifecycle.PER_METHOD)与TestMethodOrder(MethodOrderer.OrderAnnotation.class)每个测试方法一个实例且按Order顺序执行BeforeAll setUp在US_EAST_1区域构建一个共享的StsClient静态实例并拉取测试参数见上节四个测试方法均标注Tag(IntegrationTest)分别以assertDoesNotThrow断言对应示例方法不抛异常顺序测试方法调用的示例方法Order(1)testAssumeRoleAssumeRole.assumeGivenRole(stsClient, roleArn, roleSessionName)Order(2)testGetSessionTokenGetSessionToken.getToken(stsClient)Order(3)testGetCallerIdentityGetCallerIdentity.getCallerId(stsClient)Order(4)testGetAccessKeyInfoGetAccessKeyInfo.getKeyInfo(stsClient, accessKeyId)这正是前文提到的示例类把核心逻辑抽成静态方法的设计动机——测试可直接复用生产示例代码而无需重新构建客户端。运行测试按 javav2/README.md 的说明可在 IntelliJ 等 IDE 或命令行中运行mvn testSurefire 会输出每个测试的结果示例中logger.info(Test N passed)对应控制台中的Test 1 passed等日志最终给出Tests run / Failures / Errors / Skipped汇总与BUILD SUCCESS。警告继承自模块 README 与 javav2 README运行这些测试会操作真实的 AWS 资源并可能产生费用。代码模式小结纵观本模块四个示例可以提炼出该仓库 Java 2.x 示例的通用范式便于你在其他服务模块s3、sqs 等见 javav2/README.md 的服务示例目录中快速套用客户端XxxClient.builder().region(region).build()区域显式指定本模块统一Region.US_EAST_1凭证依赖默认提供程序链不硬编码密钥请求/响应XxxRequest.builder()...build() 同步调用 访问响应 getter如credentials()、arn()错误处理try/catch捕获服务专属异常本模块为StsExceptionSystem.err.printlnSystem.exit(1)生命周期main结尾stsClient.close()可测试性核心逻辑抽为public static方法接收已构建的客户端集成测试直接调用文档标记snippet-start/snippet-end注释界定可发布代码片段。参考模块说明与注意事项javav2/example_code/sts/README.md构建、运行与测试通用指南javav2/README.md本仓库为 AWS 官方文档配套示例仓库aws-doc-sdk-examplesSTS 官方用户指南、STS API 参考及 SDK for Java 2.x 的 STS 参考文档可作为延伸阅读见模块 README 的 Additional resources 章节所列官方资源名称。赞分享示例工程教程后端【免费下载链接】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-doc-sdk-examples用 AWS SDK for Java 2.x 操作 AWS Systems Manager 的完整示例精讲aws doc sdk examples用 AWS SDK for Java 2.x 操作 AWS Systems Manager 的完整示例精讲 本篇技术指示例工程教程后端AWS SDK for Java 2.x 实战在 aws-doc-sdk-examples 中运行与测试 Amazon MQ 的 Java 示例AWS SDK for Java 2.x 实战在 aws doc sdk examples 中运行与测试 Amazon MQ 的 Java 示例 本文基于 j示例工程教程后端aws-doc-sdk-examples基于 AWS SDK for Java 2.x 的 Amazon Neptune 代码示例实战指南aws doc sdk examples基于 AWS SDK for Java 2.x 的 Amazon Neptune 代码示例实战指南 本文以 javav示例工程教程后端上一篇ReClass.NET调试器使用教程10个硬件断点实战技巧下一篇为什么你需要lua-language-server终极Lua开发体验指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
open-code-review 实战:AI 代码审查从部署到落地的一次完整记录 open-code-review 这个项目,起初是我在 GitHub 上翻代码审查工具时偶然看到的。当时我们团队正被一个老问题折磨:每个 MR 都有人 review,但意见大多是 LGTM,偶尔冒出几条关于变量命名的建议,真正能拦住线上故障的反馈几… · 2026/9/25 9:10:03
Atlas 300V Pro实战:AI推理加速卡上部署YOLOv5完整链路 最近搜“atlas 300v 24g 是运算加速卡吗”的人不少,说明很多人拿到这块卡的第一反应就是把它和显卡、加速卡这类词放一起比较。我的答案是:它确实是运算加速卡,但它是一张AI推理加速卡,不是传统意义上的“显卡”,也不是… · 2026/9/25 9:09:56
CATIA CAA Nurbs插件框架:环境搭建、编译与曲面操作 简介:一份名为 CAAKcNurbsPluginFrm 的 CATIA CAA 扩展插件包,发布于2020年4月30日,面向汽车、航空、机械等需要处理复杂自由曲面的 CAD 设计师,以及希望扩展 Nurbs 功能的二次开发工程师。插件聚焦曲线编辑、曲面创建与几何优化&… · 2026/9/25 9:09:56
Skia iOS 设备开发镜像资产(ios-dev-image-14.4)的创建、上传与自动化挂载指南 图形学图像处理 【免费下载链接】skia Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. 项目地址: https://gitcode.com/gh_mirrors/skia1/skia 点击查看 免费下载 本文以 Skia 仓库中 infra/bots/assets/ios-dev-image-14.4/RE… · 2026/9/25 9:42:53
API网关统一Token接入:OpenClaw、Claude Code与n8n部署实践 先说结论:这类“网关给 OpenClaw、Claude、n8n 提供无限免费 token”的说法,本质是把多个合规 token 来源聚合到一个统一 API 入口,再由网关做路由、配额和密钥管理。它不会凭空生成 token,更不能绕过服务商的计费体系;… · 2026/9/25 9:42:35
BACKDOOR2025 CTF题解:PNG隐写、RSA低指数、SQL注入与栈溢出 1. 先说说我为什么只写了这几道题BACKDOOR2025 是某安全社区在年初办的线上CTF,题目难度整体不算变态,但分类很全,MISC、Crypto、Web、Reverse、PWN 都上了。比赛时长 48 小时,周日晚上结束,周一我还要上班,… · 2026/9/25 9:42:16
PCB功率电感底部铺铜还是挖空?EMI与热设计的工程平衡法则 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 9:42:04
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37