설명
권한 요구 사항이 다른 Lambda 함수가 같은 실행 역할을 사용하면, 한 함수에 필요한 권한이 다른 함수에도 부여될 수 있습니다. 실행 역할은 함수 코드가 AWS 서비스에 접근할 때 사용하는 권한을 제공합니다.
같은 작업과 신뢰 경계를 가진 함수의 역할 공유가 항상 과도한 권한을 의미하지는 않습니다. 역할 이름이 아니라 연결된 정책과 실제 접근 범위를 검토하세요.
잠재적 영향
- 한 함수의 코드나 입력이 악용되면 그 함수에 필요 없는 데이터나 작업까지 접근할 수 있습니다.
- 공유 역할의 권한 변경이 이를 사용하는 다른 함수에도 영향을 줄 수 있습니다.
해결 방법
- 각 함수에 필요한 API와 리소스를 정리하고, 권한이나 신뢰 경계가 다른 함수의 실행 역할을 분리하세요.
- 각 역할에 필요한 권한만 부여하고 Lambda 서비스가 역할을 수임할 수 있도록 신뢰 정책을 구성하세요. 공통 정책을 재사용할 때도 전체 권한을 확인하세요.
- 변경 후 함수 실행, 로그 기록과 필요한 서비스 호출이 정상적으로 동작하는지 검증하세요.
예시
두 함수의 역할 연결을 비교하는 예시입니다. ARN은 실제 존재하며 Lambda를 신뢰하는 역할로 바꾸세요. 간단한 응답 코드 대신 실제 애플리케이션을 배포할 때는 해당 코드의 권한도 구성해야 합니다.
변경 전
yaml
Resources:
Primer01:
Type: AWS::Lambda::Function
Properties:
Runtime: nodejs22.x
Role: arn:aws:iam::123456789012:role/lambda-role
Handler: index.handler
Code:
ZipFile: |
exports.handler = async () => ({ statusCode: 200, body: "ok" });
Primer02:
Type: AWS::Lambda::Function
Properties:
Runtime: nodejs22.x
Role: arn:aws:iam::123456789012:role/lambda-role
Handler: index.handler
Code:
ZipFile: |
exports.handler = async () => ({ statusCode: 200, body: "ok" });
두 함수가 같은 역할을 사용하므로 그 역할에 부여한 권한을 공유합니다.
변경 후
yaml
Resources:
Primer01:
Type: AWS::Lambda::Function
Properties:
Runtime: nodejs22.x
Role: arn:aws:iam::123456789012:role/lambda-role-primer01
Handler: index.handler
Code:
ZipFile: |
exports.handler = async () => ({ statusCode: 200, body: "ok" });
Primer02:
Type: AWS::Lambda::Function
Properties:
Runtime: nodejs22.x
Role: arn:aws:iam::123456789012:role/lambda-role-primer02
Handler: index.handler
Code:
ZipFile: |
exports.handler = async () => ({ statusCode: 200, body: "ok" });
함수별로 다른 역할을 연결합니다. 각 역할의 정책까지 최소 권한으로 구성해야 권한 분리가 효과를 냅니다.