기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Lambda 권한 부여자 문제 해결
이 주제에서는 사용자 지정 인증 워크플로에서 문제를 일으킬 수 있는 일반적인 문제와 이를 해결하기 위한 단계를 안내합니다. 문제를 가장 효과적으로 해결하려면 에 대한 CloudWatch 로그를 AWS IoT Core 활성화하고 로그 수준을 로 설정하십시오. DEBUG AWS IoT Core 콘솔 (https://console.aws.amazon.com/iot/
참고
로그 수준을 DEBUG오랫동안 그대로 두면 대량의 로깅 데이터가 CloudWatch 저장될 수 있습니다. 이로 인해 CloudWatch 요금이 인상될 수 있습니다. 특정 사물 그룹의 디바이스에 대해서만 상세도를 높이도록 리소스 기반 로깅을 사용하는 것이 좋습니다. 리소스 기반 로깅에 대한 자세한 내용은 로깅을 구성합니다 AWS IoT . 단원을 참조하세요. 또한 문제 해결이 완료되면 로그 수준의 상세도를 낮추세요.
문제 해결을 시작하기 전에 사용자 지정 인증 프로세스를 자세히 볼 수 있도록 사용자 지정 인증 워크플로 이해을(를) 검토합니다. 이렇게 하면 문제의 원인을 찾을 위치를 파악하는 데 도움이 됩니다.
이 주제에서는 다음과 같은 두 가지 조사 영역에 대해 설명합니다.
-
권한 부여자의 Lambda 함수와 관련된 문제.
-
디바이스와 관련된 문제.
권한 부여자의 Lambda 함수에서 문제 확인
장치의 연결 시도가 Lambda 함수를 호출하는지 확인하려면 다음 단계를 수행하세요.
-
권한 부여자와 연결된 Lambda 함수를 확인합니다.
를 DescribeAuthorizerAPI호출하거나 AWS IoT Core 콘솔의 보안 섹션에서 원하는 권한 부여자를 클릭하여 이 작업을 수행할 수 있습니다.
-
Lambda 함수의 호출 지표를 확인합니다. 이렇게 하려면 다음 단계를 수행하세요.
-
AWS Lambda 콘솔 (https://console.aws.amazon.com/lambda/
) 을 열고 권한 부여자와 연결된 함수를 선택합니다. -
모니터링 탭을 선택하고 문제와 관련된 시간 프레임에 대한 지표를 봅니다.
-
-
호출이 보이지 않는 경우 Lambda 함수를 호출할 AWS IoT Core 권한이 있는지 확인하십시오. 호출이 표시되면 다음 단계로 건너뜁니다. Lambda 함수에 필요한 권한이 있는지 확인하려면 다음 단계를 수행하세요.
-
콘솔에서 함수의 권한 탭을 선택합니다. AWS Lambda
-
페이지 하단에서 리소스 기반 정책 단원을 찾습니다. Lambda 함수에 필요한 권한이 있는 경우 정책은 다음 예와 같습니다.
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "Id123", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName" }, "StringEquals": { "AWS:SourceAccount": "111111111111" } } } ] }
-
이 정책은 주체에게 기능에 대한
InvokeFunction
권한을 부여합니다. AWS IoT Core 표시되지 않으면 를 사용하여 추가해야 합니다 AddPermissionAPI. 다음 예에서는 AWS CLI을(를) 사용하여 이 작업을 수행하는 방법을 보여줍니다.aws lambda add-permission --function-name
FunctionName
--principal iot.amazonaws.com --source-arnAuthorizerARn
--statement-id Id-123 --action "lambda:InvokeFunction"
-
-
호출이 표시되면 오류가 없는지 확인합니다. 오류는 Lambda 함수가 해당 함수로 전송하는 연결 이벤트를 AWS IoT Core 제대로 처리하지 않고 있음을 나타낼 수 있습니다.
Lambda 함수에서 이벤트를 처리하는 방법에 대한 자세한 내용은 Lambda 함수 정의 단원을 참조하세요. AWS Lambda console (https://console.aws.amazon.com/lambda/
) 의 테스트 기능을 사용하여 함수의 테스트 값을 하드 코딩하여 함수가 이벤트를 올바르게 처리하는지 확인할 수 있습니다. -
오류 없이 호출이 표시되지만 디바이스가 연결할 수 없거나 메시지를 게시, 구독 및 수신할 수 없는 경우 Lambda 함수가 반환하는 정책이 디바이스가 수행하려는 작업에 대한 권한을 부여하지 않는 문제일 수 있습니다. 함수가 반환하는 정책에 문제가 있는지 확인하려면 다음 단계를 수행하세요.
-
Amazon CloudWatch Logs Insights 쿼리를 사용하여 짧은 시간 동안 로그를 스캔하여 실패 여부를 확인합니다. 다음 예제 쿼리는 타임스탬프별로 이벤트를 정렬하고 실패를 찾습니다.
display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"
-
Lambda 함수를 업데이트하여 반환되는 데이터와 함수를 AWS IoT Core 트리거하는 이벤트를 기록하십시오. 이러한 로그를 사용하여 함수가 만드는 정책을 검사할 수 있습니다.
-
-
오류 없이 호출이 표시되지만 디바이스가 연결할 수 없거나 메시지를 게시, 구독 및 수신할 수 없는 경우 Lambda 함수가 제한 시간을 초과했기 때문일 수 있습니다. 사용자 지정 권한 부여자에 대한 Lambda 함수 제한 시간은 5초입니다. CloudWatch 로그 또는 지표에서 함수 지속 시간을 확인할 수 있습니다.
디바이스 문제 조사
Lambda 함수를 호출하거나 함수가 반환하는 정책에 문제가 없으면 디바이스의 연결 시도에 문제가 있는지 확인합니다. 잘못된 연결 요청으로 인해 권한 부여자가 AWS IoT Core 트리거되지 않을 수 있습니다. 연결 문제는 응용 프로그램 TLS 계층과 응용 프로그램 계층 모두에서 발생할 수 있습니다.
가능한 TLS 레이어 문제:
-
고객은 모든 사용자 지정 인증 요청에서 호스트 이름 헤더 (HTTP, MQTT over WebSockets) 또는 서버 이름 표시 TLS 확장자 (HTTP, MQTT over WebSockets,MQTT) 를 전달해야 합니다. 두 경우 모두 전달된 값은 계정의 AWS IoT Core 데이터 엔드포인트 중 하나와 일치해야 합니다. 다음 CLI 명령을 수행할 때 반환되는 엔드포인트입니다.
-
aws iot describe-endpoint --endpoint-type iot:Data-ATS
-
aws iot describe-endpoint --endpoint-type iot:Data
(레거시 VeriSign 엔드포인트용)
-
-
MQTT연결에 사용자 지정 인증을 사용하는 장치는 값이 인 애플리케이션 계층 프로토콜 협상 (ALPN) TLS 확장도 통과해야 합니다.
mqtt
-
사용자 지정 인증은 현재 포트 443에서만 사용할 수 있습니다.
가능한 애플리케이션 계층 문제:
-
서명이 활성화된 경우(
signingDisabled
필드가 false인 경우) 다음 서명 문제를 찾습니다.-
토큰 서명을
x-amz-customauthorizer-signature
헤더 또는 쿼리 문자열 파라미터로 전달하고 있는지 확인합니다. -
서비스가 토큰이 아닌 다른 값에 서명하고 있지 않은지 확인합니다.
-
권한 지정자의
token-key-name
필드에 지정한 헤더 또는 쿼리 파라미터로 토큰을 전달하는지 확인합니다.
-
-
x-amz-customauthorizer-name
헤더 또는 쿼리 문자열 파라미터로 전달한 권한 부여자 이름이 유효하거나 계정에 대해 기본 권한 부여자가 정의되어 있어야 합니다.