如何在AWS SDK for Java v2.x中构建带资源与语句的Policy POJO?
AWS SDK v2 替代v1风格构建Policy的方案
你完全不用局限于IAM客户端的Policy.Builder,AWS SDK v2提供了和v1风格高度一致的Policy构建类,位于aws-auth模块中,用法和v1几乎没差别:
1. 引入依赖
如果用Gradle,在build.gradle中添加:
implementation 'software.amazon.awssdk:aws-auth'
Maven则添加到pom.xml:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-auth</artifactId> </dependency>
2. 用v2 auth包构建Policy
代码写法和v1逻辑一致,只是把v1的withXxx链式调用换成了Builder模式的xxx()方法:
import software.amazon.awssdk.auth.policy.Policy import software.amazon.awssdk.auth.policy.Resource import software.amazon.awssdk.auth.policy.Statement import software.amazon.awssdk.auth.policy.actions.S3Actions fun createGetPolicy(getResourceStrings: Collection<String>): Policy { return Policy.builder() .statements( Statement.builder() .effect(Statement.Effect.ALLOW) .actions(S3Actions.GET_OBJECT) .resources(*getResourceStrings.map { Resource.fromArn(it) }.toTypedArray()) .build() ) .build() }
3. 转换为IAM服务的Policy对象(如果需要)
如果要和IAM服务交互(比如创建IAM策略),可以把上面构建的Policy序列化为JSON字符串,再用IAM的Policy.Builder生成服务所需的对象:
import software.amazon.awssdk.services.iam.model.Policy as IamPolicy // 生成策略文档JSON val policyDocumentJson = createGetPolicy(listOf("arn:aws:s3:::my-bucket/*")).toJson() // 构建IAM服务要求的Policy对象 val iamPolicy = IamPolicy.builder() .policyName("S3GetObjectPolicy") .policyDocument(policyDocumentJson) .build()
补充说明
software.amazon.awssdk.services.iam.model.Policy是IAM服务API对应的模型类,仅用于和IAM服务的请求/响应交互;而software.amazon.awssdk.auth.policy.Policy才是和v1功能匹配的策略构建工具,专门用来面向对象生成IAM策略文档。
内容的提问来源于stack exchange,提问作者Novaterata
相关产品推荐
相关产品推荐

