IAM 정책 빌더 API를 버전 1에서 버전 2로 변경 - AWS SDK for Java 2.x

IAM 정책 빌더 API를 버전 1에서 버전 2로 변경

이 주제에서는 버전 1(v1)에서 버전 2(v2)로의 IAM 정책 빌더 API의 변경 사항에 대해 자세히 설명합니다.

높은 수준의 변경 사항

변경 사항 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.27.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
클래스 이름

정책

IamPolicy

IamStatement

1 최신 버전. 2 최신 버전.

API 변경 사항

설정 v1 v2

정책 인스턴스화
Policy policy = new Policy();
IamPolicy.Builder policyBuilder = IamPolicy.builder(); ... IamPolicy policy = policyBuilder.build();

세트 ID

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

세트 버전

해당 사항 없음 - 2012-10-17의 기본 버전을 사용합니다.
policyBuilder.version(...);

CREATE 문

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()

SET 문

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

문 구축에서의 차이점

작업

v1

v1 SDK에는 정책 문의 Action 요소를 나타내는 서비스 작업에 대한 enum 유형이 포함됩니다. 다음 enum 유형은 몇 가지 예제입니다.

다음 예제에서는 SQSActions에 대한 SendMessage 상수를 보여줍니다.

Action action = SQSActions.SendMessage;

v1의 문에 대해 NotAction 요소를 지정할 수 없습니다.

v2

v2에서 IamAction 인터페이스는 모든 작업을 나타냅니다. 서비스별 작업 요소를 지정하려면 다음 코드와 같이 문자열을 create 메서드에 전달합니다.

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을 사용하여 정책 설명에 대한 조건을 구축하고 모든 유형에 대해 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);