AWS 서비스에 대한 액세스 권한을 Lambda 함수에 부여 - AWS Lambda

AWS 서비스에 대한 액세스 권한을 Lambda 함수에 부여

AWS 서비스를 사용해 함수를 간접 호출하는 경우 리소스 기반 정책의 문에서 권한을 부여하십시오. 전체 함수에 문을 적용하거나, 문을 단일 버전 또는 별칭으로 제한할 수 있습니다.

참고

Lambda 콘솔을 사용하여 함수에 트리거를 추가하는 경우, 콘솔은 함수의 리소스 기반 정책을 업데이트하여 서비스가 함수를 간접 호출할 수 있도록 합니다. Lambda 콘솔에서 사용할 수 없는 다른 계정이나 서비스에 권한을 부여하기 위해 AWS CLI를 사용할 수 있습니다.

add-permission 명령을 사용하여 문을 추가합니다. 가장 간단한 리소스 기반 정책 구문은 서비스가 함수를 간접 호출할 수 있도록 허용합니다. 다음 명령은 my-function이라는 함수를 간접 호출할 수 있는 권한을 Amazon Simple Notification Service에 부여합니다.

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns \ --principal sns.amazonaws.com \ --output text

다음 결과가 표시됩니다.

{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}

이렇게 하면 Amazon SNS가 함수에 대한 간접 호출 API 작업을 간접 호출하지만, 간접 호출을 트리거하는 Amazon SNS 주제를 제한하지는 않습니다. 함수를 특정 리소스에서만 간접 호출하도록 하려면, source-arn 옵션을 사용하여 리소스의 Amazon 리소스 이름(ARN)을 지정합니다. 다음 명령은 Amazon SNS가 my-topic이라는 주제 구독에 대해서만 함수를 간접 호출할 수 있도록 허용합니다.

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns-my-topic \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:us-east-2:123456789012:my-topic

일부 서비스는 다른 계정의 함수를 간접 호출할 수 있습니다. 해당 계정 ID를 소유하는 소스 ARN을 지정하면 문제가 되지 않습니다. 하지만 Amazon S3의 경우 소스는 ARN에 버킷의 계정 ID가 포함되지 않은 버킷입니다. 버킷을 삭제하고, 다른 계정에서 동일한 이름으로 버킷을 생성할 수 있습니다. 계정의 리소스만 함수를 간접 호출할 수 있게 하려면 계정 ID와 함께 source-account 옵션을 사용합니다.

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id s3-account \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::amzn-s3-demo-bucket \ --source-account 123456789012