와일드카드 주체를 사용하는 Lambda 권한

Lambda 리소스 정책의 호출 주체와 서비스 요청의 출처를 필요한 대상으로 제한하세요.

설명

Lambda 리소스 정책에서 principal: "*"를 사용하면 허용 대상이 넓어질 수 있습니다. 실제 접근은 부여한 작업과 조건, 호출 방식 및 다른 권한 통제에 달려 있습니다. 와일드카드만으로 모든 요청이 허용된다고 단정할 수는 없습니다.

AWS 서비스 연동에는 필요한 서비스 주체를 지정하고, 지원되는 source_arn과 source_account로 실제 이벤트 출처를 제한하세요. 직접 호출하는 계정이나 역할은 해당 호출 방식에 맞게 별도로 제한해야 합니다.

잠재적 영향

  • 불필요한 호출이 허용되면 실행 비용이나 후속 처리 부하가 늘어날 수 있습니다.
  • 함수의 입력 검증이 부족하거나 권한이 과도하면 의도하지 않은 데이터 처리와 변경으로 이어질 수 있습니다.

해결 방법

  1. 실제 호출이 필요한 계정·역할·서비스만 허용하고 작업을 필요한 범위로 제한하세요.
  2. 서비스 호출은 지원되는 출처 조건을 적용하고 버킷·계정 등의 실제 값과 일치하는지 확인하세요.
  3. 기존 함수 정책의 불필요한 허용 문을 제거하고 정상 이벤트와 승인하지 않은 호출을 시험하세요. 새 문을 추가하는 것만으로 기존 공개 권한이 제거되지는 않습니다.

예시

기존 함수와 Dev 별칭에 S3 호출 권한을 설정하는 예시입니다. 버킷 이름과 소유 계정을 실제 값으로 바꾸고 S3 이벤트 알림은 별도로 구성하세요. 기존 문을 바꾸려면 설치한 모듈의 동작을 확인하고 이전 허용 문을 제거·교체하세요.

변경 전

yaml
- name: Lambda 권한 설정
  community.aws.lambda_policy:
    state: present
    function_name: functionName
    alias: Dev
    statement_id: lambda-s3-myBucket-create-data-log
    action: lambda:InvokeFunction
    principal: "*"
    source_arn: arn:aws:s3:::example-trigger-bucket
    source_account: "123456789012"

호출 주체는 와일드카드지만 출처 ARN과 계정 조건이 있습니다. 이 조건을 충족하지 않는 임의의 요청까지 허용하는 예시는 아닙니다.

변경 후

yaml
- name: Lambda 권한 설정
  community.aws.lambda_policy:
    state: present
    function_name: functionName
    alias: Dev
    statement_id: lambda-s3-myBucket-create-data-log
    action: lambda:InvokeFunction
    principal: s3.amazonaws.com
    source_arn: arn:aws:s3:::example-trigger-bucket
    source_account: "123456789012"

호출 주체를 S3로 한정하면서 같은 버킷·소유 계정 조건을 유지합니다. lambda:InvokeFunction은 함수 호출 권한이며 정책을 추가하는 관리 작업과는 다릅니다.

참조