Amazon SNS 주제에 Lambda 함수를 구독하려고 할 때 권한 부여 오류가 발생하는 이유는 무엇입니까?

4분 분량
0

Amazon Simple Notification Service(Amazon SNS) 주제에 AWS Lambda 함수를 구독하려고 할 때 권한 부여 오류가 발생합니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

Lambda 함수를 SNS 주제에 구독하면 다음과 같은 이유로 권한 부여 오류가 발생할 수 있습니다.

  • Lambda 함수가 속한 계정이 아닌 다른 AWS 계정에서 구독을 생성하려고 했습니다.
    -또는-
  • 구독을 생성하는 데 사용한 AWS Identity and Access Management(IAM) 자격 증명에 다음의 API 작업을 실행할 권한이 없습니다.
    (Lambda) AddPermission
    (Amazon SNS) Subscribe

이 문제를 해결하려면 오류의 원인에 따라 다음 중 하나를 수행해야 합니다.

  • 함수가 위치한 AWS 계정에서 Lambda 함수를 SNS 주제에 구독해야 합니다.
    -또는-
  • 사용 중인 IAM 자격 증명에 Lambda AddPermission 및 SNS Subscribe API 작업을 실행할 수 있는 권한이 둘 다 있는지 확인합니다.

해결 방법

Lambda가 반환하는 오류 메시지를 기반으로 오류의 원인을 확인합니다.

함수가 있는 계정이 아닌 다른 AWS 계정에서 구독을 생성하는 경우 Lambda는 다음 오류 중 하나를 반환합니다.

AWS CLI 오류 예시: Lambda 함수가 속한 계정이 아닌 다른 계정에서 구독을 생성하려고 한 경우

An error occurred (AuthorizationError) when calling the Subscribe operation: The account YOUR_AWS_ACCOUNT_ID_1 is not the owner of the endpoint arn:aws:lambda:us-east-1:YOUR_AWS_ACCOUNT_ID_2:function: your_Lambda_function_ARN

AWS 관리 콘솔 오류 예시: Lambda 함수가 속한 계정이 아닌 다른 계정에서 구독을 생성하려고 한 경우

Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:us-west-2:XXXXXXX:function:XXXXXXX

올바른 계정을 사용하고 있지만 IAM 자격 증명에 필요한 권한이 없는 경우 Lambda 또는 SNS에서 다음 오류 중 하나를 반환합니다.

AWS CLI 오류 예시: 구독을 생성하는 데 사용한 IAM 자격 증명에 Lambda AddPermission 작업을 실행할 권한이 없는 경우

An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::XXXXXXX:user/XXXXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:us-west-2:XXXXXX:function:XXXXXXX because no identity-based policy allows the lambda:AddPermission action

AWS 관리 콘솔 오류 예시: 구독을 생성하는 데 사용한 IAM 자격 증명에 Lambda AddPermission 작업을 실행할 권한이 없는 경우

Error code: AccessDeniedException - Error message: User: arn:aws:sts:XXXXXXXX:assumed-role/XXXXXXXX/XXXXX-XXXXXX is not 
authorized to perform: lambda:AddPermission on resource: 
arn:aws:lambda:us-west-2:XXXXXXXXX:function:XXXXXXX because no 
identity-based policy allows the lambda:AddPermission action

AWS CLI 오류 예시: SNS 구독 작업을 실행할 권한이 없는 IAM 자격 증명을 사용하려고 한 경우

An error occurred (AuthorizationError) when calling the Subscribe operation: User: arn:aws:iam::XXXXXXX:user/XXXXXXXX is not authorized to perform: SNS:Subscribe on resource: arn:aws:sns:us-west-2:XXXXXXXX:XXXXXXX because no resource-based policy allows the SNS:Subscribe action

함수가 위치한 AWS 계정에서 Lambda 함수를 SNS 주제에 구독해야 합니다.

Lambda 콘솔 또는 AWS CLI를 사용하여 Lambda 함수를 SNS 주제에 구독할 수 있습니다.

Lambda 콘솔을 사용하여 SNS 주제에 함수 구독하기

참고: Lambda 콘솔을 사용하여 SNS 트리거를 추가하면 콘솔은 보안 주체 service:sns.amazonaws.com에서 lambda:InvokeFunction 권한을 자동으로 허용합니다.

1.    Lambda 콘솔의 함수 페이지에서 함수를 선택합니다.

2.    개요에서 트리거 추가를 선택합니다.

3.    트리거 구성에서 트리거 선택을 선택한 다음 SNS를 선택합니다.

4.    SNS 주제의경우 다른 AWS 계정의 SNS 주제 Amazon 리소스 이름(ARN)을 붙여 넣습니다.

5.    트리거 활성화 확인란을 선택합니다.

6.    추가를 선택합니다.

자세한 내용은 Lambda 함수 옵션 구성을 참조하세요.

참고: 다음 오류가 발생하면 사용 중인 IAM 자격 증명에 구독 API 작업 권한을 부여해야 합니다. 문제 해결 지침은 Amazon SNS 주제에 구독자를 추가하려고 할 때 발생하는 권한 부여 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: SNS:Subscribe on resource: your_SNS_topic_ARN

AWS CLI를 사용하여 SNS 주제에 함수 구독하기

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인합니다.

1.    Lambda 함수가 위치한 AWS 계정에 속한 IAM 사용자를 사용하여 AWS CLI를 구성합니다.

aws configure --profile-name your_profile_name

중요: IAM 사용자의 AWS 액세스 키 ID보안 키를 전달해야 합니다.

2.    보안 주체 service:sns.amazonaws.com로부터 lambda:InvokeFunction 권한을 추가하여 SNS 주제에서의 Lambda 호출을 허용합니다.

aws lambda add-permission --function-name your_lambda_function_name --statement-id sns_invoke_permission --action lambda:InvokeFunction --principal sns.amazonaws.com --source-arn your_sns_topic_arn

3.    Lambda 함수를 SNS 주제에 구독합니다.

aws sns subscribe --topic-arn your_sns_topic_ARN --protocol lambda --notification-endpoint your_lambda_function_arn --profile your_profile_name_passed_on_#1

참고: 다음 오류가 발생하면 사용 중인 IAM 자격 증명에 구독 API 작업 권한을 부여해야 합니다. 문제 해결 지침은 Amazon SNS 주제에 구독자를 추가하려고 할 때 발생하는 권한 부여 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: SNS:Subscribe on resource: your_SNS_topic_ARN

사용 중인 IAM 자격 증명에 Lambda AddPermission 및 SNS Subscribe API 작업을 실행할 수 있는 권한이 있는지 확인합니다.

IAM 자격 증명의 자격 증명 기반 정책을 검토합니다. IAM 자격 증명이 다음의 두 작업을 모두 실행할 수 있도록 정책에서 명시적으로 허용되어 있는지 확인합니다.
lambda:AddPermission
SNS:Subscribe

자격 증명 기반 정책이 필요한 권한을 부여하지 않는 경우 정책에 필요한 권한을 추가합니다. 그런 다음 함수가 속한 AWS 계정에서 Lambda 함수를 SNS 주제에 구독합니다.