IAM Policy Builder API のバージョン 1 からバージョン 2 での変更
このトピックでは、バージョン 1 (v1) からバージョン 2 (v2) での IAM Policy Builder API の変更点について詳しく説明します。
高レベル変更
| 変更 | v1 | v2 |
|---|---|---|
|
Maven の依存関係 |
|
|
| パッケージ名 | com.amazonaws.auth.policy |
software.amazon.awssdk.policybuilder.iam |
| クラス名 |
ポリシー: |
API の変更
| 設定 | v1 | v2 |
|---|---|---|
ポリシーのインスタンス化 |
|
|
|
ID の設定 |
|
|
|
バージョンの設定 |
該当なし - 2012-10-17 のデフォルトバージョンを使用します |
|
|
ステートメントの作成 |
|
|
|
ステートメントの設定 |
|
|
ステートメントの構築における違い
アクション
v1
v1 SDK には、ポリシーステートメントの Action 要素を表すサービスアクションのenum 型があります。次に、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 タイプを定義します。たとえば、次の例は条件に対するNot Like 文字列比較を示しています。
Condition condition = new StringCondition(StringComparisonType.StringNotLike, "key", "value");
v2
v2 では、IamCondition を使用してポリシーステートメントの条件を構築し、すべてのタイプに enums を含む IamConditionOperator を指定します。
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,"*")。 -
すべての正規ユーザーの
IamPrincipal.create(IamPrincipalType.CANONICAL_USER,"*")。
次のステートメントに示すように、ポリシーステートメントを作成するときに addNotPrincipal メソッドを使用して NotPrincipal 要素を表すことができます。
IamPrincipal principal = IamPrincipal.create(IamPrincipalType.AWS, "arn:aws:iam::444455556666:root"); IamStatement.builder().addNotPrincipal(principal);