You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:53:18