新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用 AWS SDK for Java 2.x 操作 IAM 的完整实践指南

发布时间:2026/9/25 5:59:27来源:尧图网络
使用 AWS SDK for Java 2.x 操作 IAM 的完整实践指南
示例工程教程后端【免费下载链接】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 Identity and Access ManagementIAM是 AWS 中用于安全控制账户内资源访问的核心服务通过它你可以集中管理用户、角色、策略与权限。本指南以javav2/example_code/iam目录下的官方示例文档为骨架系统梳理了如何使用 AWS SDK for Java 2.x 完成 IAM 的用户创建、角色扮演、策略管理、访问密钥管理等核心操作并深入讲解 IAM Policy Builder API 的对象化策略构建方式。读完本文你将能够独立运行 Hello 示例、完整的基础入门场景创建用户并假设角色以及全部 16 个单动作示例理解其底层实现原理与测试验证方式。示例概览与代码组织IAM 示例位于 javav2/example_code/iam 目录这是一个标准的 Maven 工程源码集中在src/main/java/com/example/iam包下。该目录的 README.md 按功能把示例划分为四大类类别说明对应源码Get startedHello展示如何开始使用 IAM调用ListPoliciesHelloIAM.javaBasics基础场景演示服务内的核心操作流程创建用户并假设角色IAMScenario.javaSingle actions单动作逐条调用单个服务函数的代码片段16 个独立 Java 类见下文Scenarios多函数场景调用同一服务的多个函数完成具体任务IamPolicyBuilderExamples.java、Main.java此外示例还配套了 Makefile、run_example.sh、checkstyle.xml 与 pom.xml覆盖构建、运行与代码风格检查的完整开发链路。环境准备Prerequisites在运行任何示例之前需要先完成环境配置。整体前置要求记录在 javav2 目录的 README 中核心要点如下本地获取本仓库代码克隆、Fork 或下载 zip。安装 Apache Maven版本高于 3.0。所有 Java v2 示例均依赖 Java SDK 的默认凭证提供链default credentials provider chain获取 AWS 凭证。你可以通过以下任一方式配置在~/.aws/config中配置 IAM Identity Center SSO 设置在~/.aws/credentials中配置临时凭证。默认区域配置若未设置区域SDK 默认使用us-east-1。值得注意的是IAM 客户端在示例中普遍显式指定Region.AWS_GLOBAL因为 IAM 是全局服务。IAM 工程自身的 pom.xml 基于 AWS SDK BOMsoftware.amazon.awssdk:bom:2.35.10统一管理依赖版本编译目标为 Java 21并显式引入iam、iam-policy-builder、s3、sts、secretsmanager、dynamodb、accessanalyzer等模块同时以 JUnit 5 作为测试框架。快速开始Hello IAM 示例HelloIAM.java 是最简单的入门示例它通过IamClient.listPolicies()列出当前账户下的全部托管策略展示 SDK 客户端构建与调用的最小模式Region region Region.AWS_GLOBAL; IamClient iam IamClient.builder() .region(region) .build(); ListPoliciesResponse response iam.listPolicies(); ListPolicy polList response.policies(); polList.forEach(policy - { System.out.println(Policy Name: policy.policyName()); });代码要点IamClient通过 Builder 模式构建区域固定为Region.AWS_GLOBALIAM 为全局服务无区域维度。listPolicies()是无参调用返回的ListPoliciesResponse通过policies()取出策略列表再用forEach逐个打印策略名称。客户端构建的凭证来源由 SDK 默认凭证链自动解析无需在代码中硬编码凭证。基础场景创建用户并假设角色Learn the basicsIAMScenario.java 是本文档标注的 Basics 示例完整演示了 IAM 中最具代表性的权限流转链路。它需要 5 个命令行参数Usage: username policyName roleName roleSessionName bucketName Where: username - The name of the IAM user to create. policyName - The name of the policy to create. roleName - The name of the role to create. roleSessionName - The name of the session required for the assumeRole operation. bucketName - The name of the Amazon S3 bucket from which objects are read.该场景按以下 6 步推进创建一个无任何权限的 IAM 用户调用createUser创建用户随后借助IamWaiter轮询等待用户就绪见createIAMUser方法中iamWaiter.waitUntilUserExists的用法。创建授予 S3 权限的策略策略文档PolicyDocument以 JSON 字符串形式内嵌在源码中内容为允许s3:*作用于所有资源Resource: *。创建后同样通过IamWaiter.waitUntilPolicyExists等待策略生效。创建角色角色的assumeRolePolicyDocument信任策略以 JSON 声明sts:AssumeRole动作并将上一步创建的用户的 ARN 填入Principal.AWS从而允许该用户扮演此角色。源码中在创建角色前有 30 秒的TimeUnit.SECONDS.sleep(30)等待用于应对 IAM 的最终一致性。授予用户权限通过attachRolePolicy将策略附加到角色实现中会先调用listAttachedRolePolicies检查策略是否已附加避免重复绑定见attachIAMRolePolicy方法。通过 STS 获取临时凭证并访问 S3核心方法assumeRole展示了两段凭证链先用新创建用户的AwsBasicCredentials构建StsClient调用stsClient.assumeRole(roleRequest)换取临时凭证再用返回的临时凭证AwsSessionCredentials含 accessKeyId、secretAccessKey、sessionToken构建S3Client执行listObjects列出指定 bucket 的对象。清理资源依次调用deleteAccessKey、detachRolePolicydeletePolicydeleteRole、deleteUser删除全部临时资源。源码注释强调先分离策略、再删除策略、最后删除角色。这一场景揭示了 IAM 权限体系的完整闭环用户身份→ 策略权限定义→ 角色权限载体→ 信任策略谁可以扮演→ STS 临时凭证安全交付对理解跨账号授权与最小权限原则极具参考价值。单动作示例16 个独立函数调用文档列出以下 16 个单动作示例每个文件对应一个 IAM API 调用均位于 src/main/java/com/example/iam 下示例文件对应 IAM API说明AttachRolePolicy.javaattachRolePolicy将托管策略附加到角色CreateAccessKey.javacreateAccessKey为 IAM 用户创建访问密钥CreateAccountAlias.javacreateAccountAlias创建账户别名CreatePolicy.javacreatePolicy创建自定义策略CreateRole.javacreateRole创建角色CreateUser.javacreateUser创建 IAM 用户DeleteAccessKey.javadeleteAccessKey删除访问密钥DeleteAccountAlias.javadeleteAccountAlias删除账户别名DeletePolicy.javadeletePolicy删除策略DeleteUser.javadeleteUser删除 IAM 用户DetachRolePolicy.javadetachRolePolicy从角色分离策略ListAccessKeys.javalistAccessKeys列出用户的访问密钥ListAccountAliases.javalistAccountAliases列出账户别名ListUsers.javalistUsers列出账户内所有用户UpdateAccessKey.javaupdateAccessKey更新访问密钥状态如激活/停用UpdateUser.javaupdateUser重命名用户这些示例遵循一致的编码范式从中可以提炼出三个重要的实现细节1. Waiter 轮询确保资源最终一致。IAM 服务存在最终一致性因此 CreateUser.java 与 CreatePolicy.java 都在创建操作后调用IamWaiter.waitUntilUserExists/waitUntilPolicyExists确保后续操作可安全依赖已创建的资源IamWaiter iamWaiter iam.waiter(); CreateUserResponse response iam.createUser(request); GetUserRequest userRequest GetUserRequest.builder() .userName(response.user().userName()) .build(); WaiterResponseGetUserResponse waitUntilUserExists iamWaiter.waitUntilUserExists(userRequest);2. 列表接口处理分页。ListUsers.java 演示了基于marker的经典分页循环当response.isTruncated()为true时取出response.marker()作为下一页请求的marker参数继续拉取直到遍历完全部用户同时还会打印每个用户的permissionsBoundary信息这是 IAM 权限边界审计的常用手段。3. 幂等与防御性检查。AttachRolePolicy.java 在附加策略前先调用listAttachedRolePolicies遍历已附加策略若目标策略已存在则直接返回避免重复绑定导致的不一致。场景示例IAM Policy Builder APIIamPolicyBuilderExamples.java 是文档指定的第二个场景示例核心价值在于展示 AWS SDK for Java 2.x 提供的对象化策略构建器software.amazon.awssdk.policybuilder.iam包。相比手工拼接 JSON 字符串该 API 用类型安全的对象模型构建 IAM 策略编译期即可发现结构错误。该示例共演示 5 种策略构建方式1. 创建并上传策略createAndUploadPolicyExample用 Builder 构建允许dynamodb:PutItem的策略并调用iam.createPolicy上传然后通过IamPolicyWriter输出美化后的 JSONIamPolicy policy IamPolicy.builder() // version defaults to 2012-10-17. .addStatement(IamStatement.builder() .effect(IamEffect.ALLOW) .addAction(dynamodb:PutItem) .addResource(arn:aws:dynamodb:us-east-1: accountID :table/exampleTableName) .build()) .build(); iam.createPolicy(r - r.policyName(policyName).policyDocument(policy.toJson())); return policy.toJson(IamPolicyWriter.builder().prettyPrint(true).build());2. 基于现有策略派生新策略createNewBasedOnExistingPolicyExample先从 IAM 拉取已有策略的默认版本getPolicy→defaultVersionId→getPolicyVersion对 JSON 文档 URL 解码后用IamPolicy.fromJson解析回对象由于IamPolicy的组件均为不可变immutable再通过copy方法生成新实例并追加dynamodb:GetItem动作最终上传为新策略。这是在既有策略上增量扩展权限的推荐做法。3. 多条件策略multipleConditionsExample对一张 DynamoDB 表配置 7 个数据面动作并叠加两类条件运算符IamConditionOperator.STRING_EQUALS.addPrefix(ForAllValues:)结合dynamodb:Attributes限制只能访问指定列集合IamConditionOperator.STRING_EQUALS.addSuffix(IfExists)结合dynamodb:Select当请求携带该键时要求值必须为SPECIFIC_ATTRIBUTES。4. 时间窗口策略timeBasedPolicyExample用DATE_GREATER_THAN与DATE_LESS_THAN两个条件限定aws:CurrentTime实现仅在 2020-04-01 至 2020-06-30 期间允许读取 DynamoDB 数据的访问控制窗口。5. 指定 Principal 与跨账户授权specifyPrincipalsExample / allowCrossAccountAccessExamplespecifyPrincipalsExample构建一个资源策略默认对所有人DENY访问 S3 存储桶但通过ARN_NOT_EQUALS条件排除指定用户 ARNallowCrossAccountAccessExample通过IamPrincipalType.AWS指定账号111122223333为 Principal允许其对桶执行s3:PutObject并配合s3:x-amz-acl条件要求bucket-owner-full-control这是典型的跨账号写入授权模式。此外示例中获取当前账号 ID 的方式值得借鉴——通过StsClient.getCallerIdentity().account()动态解析避免硬编码账号号。测试验证Access Analyzer 校验策略合法性工程在 src/test/java/com/example/iam/IamPolicyBuilderExamplesTest.java 中为上述 5 个构建方法提供了 JUnit 5 集成测试Tag(IntegrationTest)。测试的亮点是对生成的身份策略PolicyType.IDENTITY_POLICY与资源策略PolicyType.RESOURCE_POLICY调用AWS Access Analyzer 的validatePolicy做语法与语义校验断言findings().size()为 0即策略必须通过权威校验才算测试通过createAndUploadPolicyExample/createNewBasedOnExisingPolicyExample测试会真实上传策略到 IAM 服务由服务端在createPolicy时检查语法随后删除策略完成清理。这从测试层面印证了 Policy Builder 生成 JSON 的合法性与可部署性。场景示例构建并管理弹性服务Build and manage a resilient service文档列出的另一场景是跨服务用例 resilient_service 的 Main.java它展示如何构建一个返回图书、电影、歌曲推荐的负载均衡 Web 服务并演示服务在故障下的响应与重构过程。该场景的主要操作包括使用 Amazon EC2 Auto Scaling 组基于启动模板创建 EC2 实例并将实例数维持在指定范围内使用 Elastic Load Balancing 处理与分发 HTTP 请求监控 Auto Scaling 组中实例的健康状态仅向健康实例转发请求在每个 EC2 实例上运行 Python Web 服务器处理 HTTP 请求返回推荐结果并响应健康检查用 DynamoDB 表模拟推荐服务通过更新 AWS Systems Manager 参数控制 Web 服务器对请求与健康检查的响应行为。该用例展示了 IAM 角色与权限在实际生产架构弹性伸缩 负载均衡 故障注入中的落地方式可作为研究 IAM 在真实系统集成场景的延伸参考。构建与运行方式使用 Maven 构建在 javav2/example_code/iam 目录下执行mvn packageMaven 会自动下载 AWS SDK for Java 的依赖并完成编译打包产物为target/sdk-iam-examples-1.0.jar名称由 pom 与 Makefile 共同约定。若本机安装了make也可直接执行make使用脚本运行示例工程提供了 run_example.sh用法是以类名作为第一个参数后续参数作为该类的命令行参数用引号包裹./run_example.sh CreateUser my-test-user ./run_example.sh IAMScenario scenario-user scenario-policy scenario-role scenario-session my-bucket脚本内部通过mvn exec:java -Dexec.mainClasscom.example.iam.$className -Dexec.args$执行指定的主类。运行 JUnit 测试测试整体说明见 javav2 目录 README 的 Tests 章节在 IAM 工程目录执行mvn test测试类使用 JUnit 5运行时会真实操作 AWS 资源上传、删除策略调用 Access Analyzer可能产生账户费用建议在测试专用账户中运行。安全与成本提示IAM 示例的 README.md 明确给出了以下注意事项实践时应严格遵守运行示例可能产生 AWS 账户费用具体见 AWS 定价与免费套餐说明运行测试同样可能产生费用遵循最小权限原则grant least privilege授予的权限应以完成任务所需的最小集合为上限本仓库代码未在所有 AWS 区域经过测试请以 AWS 区域服务清单为准。额外资源文档末尾为开发者列出了三类官方参考资料均为 AWS 官方文档非仓库链接IAM 用户指南IAM User GuideIAM API 参考IAM API ReferenceSDK for Java 2.x 的 IAM 包参考software.amazon.awssdk.services.iam这些资料可与本文的源码示例相互印证帮助理解每个 API 的完整请求/响应模型与权限边界。赞分享示例工程教程后端【免费下载链接】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 Java 2.x 操作 Amazon WorkDocsaws-doc-sdk-examples 中的完整示例实践指南AWS SDK for Java 2.x 操作 Amazon WorkDocsaws doc sdk examples 中的完整示例实践指南 本文基于 aws示例工程教程后端AWS SDK for Java 2.x 操作 Amazon S3 完全指南AWS SDK for Java 2.x 操作 Amazon S3 完全指南 概述 Amazon Simple Storage Service Amazon S示例工程教程后端aws-doc-sdk-examples使用 AWS SDK for Java 2.x 操作 Amazon Timestream 的完整示例与测试指南aws doc sdk examples使用 AWS SDK for Java 2.x 操作 Amazon Timestream 的完整示例与测试指南 Ama示例工程教程后端上一篇Hyper-Extract与Obsidian集成将知识图谱转换为智能笔记系统下一篇DBeaver自定义图表组件开发实战三步把第三方可视化库接入数据库工作台创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

高延迟膜彩虹mura仿真:从相位延迟波动到工艺容差分析 2026/9/25 6:27:54

高延迟膜彩虹mura仿真:从相位延迟波动到工艺容差分析

1. 彩虹mura的来源:高延迟膜的相位延迟波动前段时间一个做偏光板的朋友找我说,他们导入的一批高延迟补偿膜在模组厂出现了彩虹mura,整面屏在亮态下能看到从蓝紫到黄绿的渐变斑块,贴屏看反而不明显,退到半米外看得清清楚…

阅读更多 →
OpenClaw VS 研究生:谁才是更好用的“小龙虾”?TaoToken 统一 Key 接入实测 2026/9/25 6:27:54

OpenClaw VS 研究生:谁才是更好用的“小龙虾”?TaoToken 统一 Key 接入实测

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

阅读更多 →
RM65示教器与二指夹爪在线编程实战指南 2026/9/25 6:27:54

RM65示教器与二指夹爪在线编程实战指南

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

阅读更多 →
Vivado版本实战选型:2018.3到2025.1编译效率深度评测 2026/9/25 6:27:48

Vivado版本实战选型:2018.3到2025.1编译效率深度评测

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

阅读更多 →
Katalon Recorder实战:脚本录制、导出与自动化测试落地指南 2026/9/25 6:27:48

Katalon Recorder实战:脚本录制、导出与自动化测试落地指南

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

阅读更多 →
Oracle 11.2.0.4 PSU p36575425安装与回滚指南 2026/9/25 6:27:48

Oracle 11.2.0.4 PSU p36575425安装与回滚指南

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉