IAM 策略生成器 API 从版本 1 到版本 2 的更改 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

IAM 策略生成器 API 从版本 1 到版本 2 的更改

本主题详细介绍了 IAM 策略生成器 API 从版本 1 (v1) 到版本 2 (v2) 的变化。

高级别更改

更改 v1 v2

Maven 依赖项

<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.12.5871</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.21.212</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>iam-policy-builder</artifactId> </dependency> </dependencies>
软件包名称 com.amazonaws.auth.policy software.amazon.awssdk.policybuilder.iam
类名

Policy

Statement

IamPolicy

IamStatement

1 最新版本2 最新版本

API 变更

设置 v1 v2

实例化策略
Policy policy = new Policy();
IamPolicy.Builder policyBuilder = IamPolicy.builder(); ... IamPolicy policy = policyBuilder.build();

设置标识

policy.withtId(...); policy.setId(...);
policyBuilder.id(...);

设置版本

不适用-使用默认版本的 2012-10-17
policyBuilder.version(...);

创建声明

Statement statement = new Statement(Effect.Allow) .withActions(...) .withConditions(...) .withId(...) .withPrincipals(...) .withResources(...);
IamStatement statement = IamStatement.builder() .effect(IamEffect.ALLOW) .actions(...) .notActions(...) .conditions(...) .sid(...) .principals(...) .notPrincipals(...) .resources(...) .notResources(...) .build()

设置陈述

policy.withStatements(statement); policy.setStatements(statement);
policyBuilder.addStatement(statement);

建立陈述的差异

操作

v1

v1 SDK 具有代表政策声明中Action元素的服务操作enum类型。以下enum类型是一些示例。

以下示例显示了的SendMessage常量SQSActions

Action action = SQSActions.SendMessage;

在 v1 中,您无法为语句指定NotAction元素。

v2

在 v2 中,IamAction接口代表所有操作。要指定特定于服务的操作元素,请向create方法传递一个字符串,如以下代码所示。

IamAction action = IamAction.create("sqs:SendMessage");

您可以使用 v2 为 NotAction for 语句指定,如以下代码所示。

IamAction action = IamAction.create("sqs:SendMessage"); IamStatement.builder().addNotAction(action);

Conditions

v1

为了表示语句条件,v1 SDK 使用了的子类。Condition

每个Condition子类都定义一个比较enum类型来帮助定义条件。例如,下面显示了条件的不相似字符串比较

Condition condition = new StringCondition(StringComparisonType.StringNotLike, "key", "value");

v2

在 v2 中,您可以使用策略声明创建条件IamConditionOperatorIamCondition并提供包含所有类型的enums条件。

IamCondition condition = IamCondition.create(IamConditionOperator.STRING_NOT_LIKE, "key", "value");

资源

v1

策略声明的Resource元素由 SDK 的Resource类表示。在构造函数中将 ARN 作为字符串提供。以下子类提供了便捷的构造函数。

在 v1 中,您可以Resource通过调用withIsNotType方法为指定NotResource元素,如以下语句所示。

Resource resource = new Resource("arn:aws:s3:::mybucket").withIsNotType(true);

v2

在 v2 中,您可以通过将 ARN 传递给方法来IamResource.create创建Resource元素。

IamResource resource = IamResource.create("arn:aws:s3:::mybucket");

IamResource可以将设置为NotResource元素,如以下代码段所示。

IamResource resource = IamResource.create("arn:aws:s3:::mybucket"); IamStatement.builder().addNotResource(resource);

IamResource.ALL代表所有资源。

主体

v1

v1 SDK 提供以下Principal类来表示包含所有成员的主体类型:

  • AllUsers

  • AllServices

  • AllWebProviders

  • All

不能在语句中添加NotPrincipal元素。

v2

在 v2 中,IamPrincipal.ALL代表所有主体:

要表示其他类型的委托人中的所有成员,请在创建IamPrincipal时使用这些IamPrincipalType类。

  • IamPrincipal.create(IamPrincipalType.AWS,"*")适用于所有用户。

  • IamPrincipal.create(IamPrincipalType.SERVICE,"*")适用于所有服务。

  • IamPrincipal.create(IamPrincipalType.FEDERATED,"*")适用于所有网络提供商。

  • IamPrincipal.create(IamPrincipalType.CANONICAL_USER,"*")适用于所有规范用户。

在创建策略声明时,您可以使用addNotPrincipal方法来表示NotPrincipal元素,如以下语句所示。

IamPrincipal principal = IamPrincipal.create(IamPrincipalType.AWS, "arn:aws:iam::444455556666:root"); IamStatement.builder().addNotPrincipal(principal);