IAM 策略生成器 API 从版本 1 到版本 2 的变化
本主题详细说明了 IAM 策略生成器 API 从版本 1(v1)到版本 2(v2)发生的变化。
高级别更改
| 更改 | v1 | v2 |
|---|---|---|
|
Maven 依赖项 |
|
|
| 软件包名称 | com.amazonaws.auth.policy |
software.amazon.awssdk.policybuilder.iam |
| 类名 |
API 更改
| 设置 | v1 | v2 |
|---|---|---|
实例化策略 |
|
|
|
设置 ID |
|
|
|
设置版本 |
不适用 - 使用默认版本 2012-10-17 |
|
|
创建语句 |
|
|
|
设置语句 |
|
|
构建语句时的差异
操作
v1
v1 SDK 为服务操作使用 enum 类型,表示策略语句中的 Action 元素。以下 enum 类型是一些示例。
以下示例显示 SQSActions 的 SendMessage 常量。
Action action = SQSActions.SendMessage;
在 v1 中,您无法为语句指定 NotAction 元素。
v2
在 v2 中,所有操作均由 IamActioncreate 方法传递一个字符串,如以下代码所示。
IamAction action = IamAction.create("sqs:SendMessage");
如以下代码所示,使用 v2 时,您可为语句指定 NotAction。
IamAction action = IamAction.create("sqs:SendMessage"); IamStatement.builder().addNotAction(action);
条件
v1
为了表示语句条件,v1 SDK 使用 Condition 的子类。
每个 Condition 子类都定义一个比较 enum 类型来帮助定义条件。例如,下面显示了条件的不相似字符串比较。
Condition condition = new StringCondition(StringComparisonType.StringNotLike, "key", "value");
v2
在 v2 中,您可以使用 IamCondition 并提供 IamConditionOperator(包含所有类型的 enums 条件)来为策略语句构建条件。
IamCondition condition = IamCondition.create(IamConditionOperator.STRING_NOT_LIKE, "key", "value");
资源
v1
策略语句的 Resource 元素用 SDK 的 Resource 类表示。在构造函数中以字符串形式提供 ARN。以下子类提供了便捷的构造函数。
在 v1 中,您可以通过调用 withIsNotType 方法为 Resource 指定 NotResource 元素,如以下语句所示。
Resource resource = new Resource("arn:aws:s3:::amzn-s3-demo-bucket").withIsNotType(true);
v2
在 v2 中,您可以通过将 ARN 传递给 IamResource.create 方法来创建 Resource 元素。
IamResource resource = IamResource.create("arn:aws:s3:::amzn-s3-demo-bucket");
IamResource 可以设置为 NotResource 元素,如以下代码段所示。
IamResource resource = IamResource.create("arn:aws:s3:::amzn-s3-demo-bucket"); 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,"*")适用于所有 Web 提供程序。 -
IamPrincipal.create(IamPrincipalType.CANONICAL_USER,"*")适用于所有规范用户。
在创建策略语句时,您可以使用 addNotPrincipal 方法来表示 NotPrincipal 元素,如以下语句所示。
IamPrincipal principal = IamPrincipal.create(IamPrincipalType.AWS, "arn:aws:iam::444455556666:root"); IamStatement.builder().addNotPrincipal(principal);