AWS CDK: Grant 설계

김기현·2026년 2월 1일

AWS

목록 보기
37/44

AWS CDK에서 IAM 권한을 관리하는 방식은 크게 고수준의 Grant 패턴과 저수준의 Policy 직접 추가 방식으로 나뉜다. 이를 이해하면 보안은 유지하면서도 코드 양을 줄일 수 있다.


1. Grant 패턴: 리소스 중심의 권한 부여

Grant 패턴은 이 리소스가 저 사용자(혹은 서비스)에게 이러한 권한을 준다는 철학을 바탕으로 합니다.

  • 동작 방식: 리소스 객체(S3, DynamoDB 등)가 제공하는 메서드를 호출하여 권한 수혜자(Grantee)를 인자로 넘긴다.
  • 장점: 최소 권한 원칙(Least Privilege)이 자동으로 적용되며, 구체적인 IAM Action 명칭(예: s3:GetObject)을 몰라도 된다.
// S3 버킷과 Lambda 함수가 있다고 가정
Bucket myBucket = Bucket.Builder.create(this, "MyBucket").build();
Function myLambda = Function.Builder.create(this, "MyLambda")
        // 생략
        .build();

// 1. 읽기 권한만 부여
myBucket.grantRead(myLambda);

// 2. 쓰기 권한만 부여
myBucket.grantWrite(myLambda);

// 3. 읽기/쓰기 권한 모두 부여
myBucket.grantReadWrite(myLambda);

이 코드로 CDK 내부적으로 s3:Get*, s3:List* 등 읽기에 필요한 모든 세부 정책을 생성하여 Lambda의 IAM Role 에 연결한다.


2. addToRolePolicy: 세밀하고 자유로운 권한 부여

만약 CDK에서 미리 정의된 grant메서드가 없거나 매우 특정한 조건(Condition)이 포함된 정책이 필요할 때는 addToRolePolicy를 사용한다.

  • 동작 방식: 권한을 받는 주체(Role을 가진 객체)에게 직접 PolicyStatement를 추가한다.
  • 특징: SQL로 치면 grant는 프레임워크의 ORM 메서드이고, addToRolePolicyRaw Query를 직접 작성하는 것과 같다.
Function myLambda = Function.Builder.create(this, "MyLambda")
        // 생략
        .build();

// Lambda 함수에 특정 EC2 설명 권한을 수동으로 추가
myLambda.addToRolePolicy(PolicyStatement.Builder.create()
        .actions(List.of("ec2:DescribeInstances", "ec2:DescribeTags"))
        .resources(List.of("*")) // 특정 리소스로 한정 가능
        .effect(Effect.ALLOW)
        .build());

3. Grant vs addToRolePolicy 비교

구분grantXxx() (Grant 패턴)addToRolePolicy()
추상화 수준높음 (고수준)낮음 (저수준)
보안성매우 높음 (최소 권한 자동 적용)보통 (사용자가 직접 정의해야 함)
가독성매우 좋음 (의도가 명확함)복잡함 (JSON 구조와 유사함)
사용 시점표준적인 읽기/쓰기 권한이 필요할 때커스텀 액션이나 복잡한 조건이 필요할 때

4. 활용 팁

IGrantable 인터페이스

  • grant메서드의 인자로 들어가는 객체는 대부분 IGrantable인터페이스를 구현하고 있다.
  • Lambda, EC2의 Role, ECS Task Definition 등이 여기에 해당한다.
  • 즉, IAM Role을 가질 수 있는 모든 것은 Grant의 대상이 될 수 있다.

연결된 권한 (Granting to Other Accounts)

다른 AWS 계정의 사용자에게 권한을 줄 때도 grant메서드를 사용할 수 있다. 이때 CDK는 자동으로 리소스 기반 정책(Resource-based Policy, 예: S3 Bucket Policy)을 생성하여 크로스 계정 접근을 허용한다.


5. 요약

가장 먼저 grant 메서드가 있는지 확인하고 그것으로 해결되지 않는 특수한 케이스만 addToRolePolicy를 사용하는 것이 CDK의 표준적인 설계 방식이다.

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

0개의 댓글