AWS CDK: Grant

김기현·2026년 1월 31일

AWS

목록 보기
31/44

AWS CDK에서 Grant는 IAM 정책을 객체 지향 프로그래밍의 메서드 호출 방식으로 추상화한 패턴이다. 리소스가 자신에 대한 접근 권한을 다른 객체에게 부여하는 형식을 취한다.

1. Grant의 핵심 개념과 철학

리소스 중심의 권한 부여

기존의 방식이 “누가(Principal) 무엇을(Resource) 할 수 있는가”라는 정책 문서를 작성하는 방식이었다면 Grant는 리소스(Resource)가 누구(Principal)에게 권한을 허용한다는 관점을 가진다. 이는 객체자 자신의 상태와 행동을 스스로 관리하는 객체 지향의 캡슐화(Encapsulation) 원칙과 같다.

최소 권한 원칙(Least Privilege)의 자동화

grantRead(), grantWrite()와 같은 메서드를 호출하면 CDK는 내부적으로 해당 작업에 필요한 최소한의 IAM 액션들을 자동으로 계산한다. 예를 들어 S3 버킷에서 grantRead()를 호출하면 s3:GetObject뿐만 아니라 폴더 목록을 조회하기 위한 s3:ListBucket등의 권한이 적절하게 조합되어 나온다.


2. Java 코드로 보는 Grant

기존 방식 (PolicyStatement 사용)

직접 JSON 구조를 생각하며 코드를 작성해야 하므로 오타에 취약하고 가독성이 떨어진다.

table.addToRolePolicy(PolicyStatement.Builder.create()
        .actions(List.of("dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query"))
        .resources(List.of(table.getTableArn()))
        .effect(Effect.ALLOW)
        .build());

Grant 방식

메서드 한 줄로 의도가 명확히 드어나며 컴파일 타임에 타입 체크가 이루어진다.

table.grantReadData(myLambda);

3. Grant 메서드의 주요 특징

표준화된 메서드 명명규칙

대부분의 L2 Construct(고수준 객체)는 다음과 같이 표준화된 Grant 메서드를 제공한다.

  • grantRead(grantee): 읽기 전용 권한을 부여한다.
  • grantWrite(grantee): 쓰기 전용 권한을 부여한다.
  • grantReadWrite(grantee): 읽기와 쓰기 권한을 모두 부여한다.
  • grant(grantee, actions...): 표준 메서드 외에 특정 액션들만 골라서 부여할 때 사용한다.

Grant 객체의 반환

Grant 메서드는 호출 결과로 Grant 타입의 객체를 반환한다. 이 객체를 통해 권한 부여가 성공적으로 이루어졌는지 확인하거나 추가적인 조건(Condition)을 덧붙이는 작업이 가능하다.

Grant readGrant = table.grantReadData(myLambda);

4. Grant의 장점 요약

  1. 가독성 향상: 인프라 코드 내에서 권한 관계가 한눈에 들어온다.
  2. 보안성 유지: 개발자가 실수로 너무 많은 권한(*, Wildcard)을 부여하는 것을 방지한다.
  3. 유지보수 용이: AWS 서비스의 액션명이 변경되거나 추가되어도, CDK 라이브러리 업데이트만으로 최신 보안 모범 사례를 유지할 수 있다.

Grant를 통해 리소스 간의 관계를 정의하면 수백 줄의 IAM 정책 문서 관리에서 자유로워질 수 있다.

profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글