설명
AWS::Lambda::Permission의 Principal이 *이면 Principal 자체로 함수를 호출할 수 있는 주체를 제한하지 않습니다. 실제 접근 범위에는 SourceArn, SourceAccount 같은 조건도 적용됩니다.
잠재적 영향
조건까지 과도하게 열려 있으면 의도하지 않은 호출로 비용이 늘거나 함수의 데이터·동작이 악용될 수 있습니다.
해결 방법
실제 호출할 서비스나 계정을 지정하세요. AWS 서비스에 권한을 부여할 때는 해당 서비스가 지원하는 원본 ARN과 계정 제한도 함께 적용하세요.
예시
예시는 원본 계정과 버킷 제한을 유지하면서 호출 주체를 S3로 명시합니다. function과 bucket은 별도로 정의된 리소스입니다.
변경 전
yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Grants S3 permission to invoke Lambda
Resources:
s3Permission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt function.Arn
Action: lambda:InvokeFunction
Principal: "*"
SourceAccount: !Ref "AWS::AccountId"
SourceArn: !GetAtt bucket.Arn
변경 후
yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Grants S3 permission to invoke Lambda
Resources:
s3Permission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt function.Arn
Action: lambda:InvokeFunction
Principal: s3.amazonaws.com
SourceAccount: !Ref "AWS::AccountId"
SourceArn: !GetAtt bucket.Arn