설명
Lambda 리소스 정책의 action은 허용할 작업을 지정합니다. S3 같은 서비스의 일반 함수 호출에는 lambda:InvokeFunction이 필요합니다. 다른 목적의 작업을 지정하면 필요한 호출 권한을 부여하지 못하거나 불필요한 권한을 허용할 수 있습니다.
다른 action이 항상 잘못된 것은 아니므로 함수 URL 등 실제 접근 방식에 필요한 권한을 확인해야 합니다.
잠재적 영향
- 이벤트 소스가 함수를 호출하지 못해 처리가 지연되거나 실패할 수 있습니다.
- 필요 이상으로 넓은 작업이나 호출 주체를 허용하면 함수 접근 범위가 커질 수 있습니다.
해결 방법
- 일반 함수 호출에는 action: lambda:InvokeFunction을 사용하고 해당 접근 방식에 필요한 작업만 허용하세요.
- principal을 필요한 주체로 제한하고 AWS 서비스 호출은 지원되는 source_arn과 source_account 조건으로 좁히세요. 정책과 이벤트 소스 설정을 함께 확인하고 실제 호출을 시험하세요.
예시
함수와 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:CreateFunction
principal: s3.amazonaws.com
source_arn: arn:aws:s3:::example-bucket
source_account: "123456789012"
변경 후
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-bucket
source_account: "123456789012"
설명:
- 변경 전: lambda:CreateFunction은 S3가 기존 함수를 호출하도록 허용하는 작업이 아닙니다.
- 변경 후: lambda:InvokeFunction으로 지정 버킷·계정의 S3 호출을 허용합니다. 실제 이벤트 연결도 필요합니다.