기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: AWS IoT Core에 대한 사용자 지정 권한 부여자 생성
이 자습서에서는 AWS CLI을(를) 사용하여 사용자 지정 인증을 만들고 유효성을 검사하고 사용하는 단계를 보여 줍니다. 선택적으로 이 자습서를 사용하여 HTTP 게시 API를 통해 AWS IoT Core 에 데이터를 전송할 수 있도록 Postman을 사용할 수 있습니다.
이 자습서에서는 권한 부여 및 인증 논리를 구현하는 샘플 Lambda 함수와 토큰 서명이 활성화된 상태에서 create-authorizer 호출을 사용하는 사용자 지정 권한 부여자를 생성하는 방법을 보여줍니다. 그런 다음 를 사용하여 권한 부여자의 유효성을 검사하고test-invoke-authorizer, 마지막으로 HTTP Publish API를 사용하여 테스트 AWS IoT Core MQTT 주제에 데이터를 보낼 수 있습니다. 샘플 요청은 헤더를 사용하여 호출할 권한 부여자를 지정하고 요청 x-amz-customauthorizer-name
헤더에 및 in을 전달합니다. token-key-name x-amz-customauthorizer-signature
이 자습서에서 배울 내용:
Lambda 함수를 사용자 지정 권한 부여 처리기로 만드는 방법
토큰 서명이 활성화된 상태에서 사용자 지정 권한 부여자를 AWS CLI 만드는 방법
test-invoke-authorizer 명령을 사용하여 사용자 지정 권한 부여자를 테스트 하는 방법
Postman
을 사용하여 MQTT 항목을 게시하는 방법 및 사용자 정의 권한 부여자로 요청을 검증하는 방법
이 자습서는 완료하는 데 약 60분이 소요됩니다.
이 자습서에서 배울 내용은 다음과 같습니다.
이 자습서를 시작하기 전에 다음 사항을 확인해야 합니다.
-
설정 AWS 계정
이 튜토리얼을 완료하려면 사용자 AWS 계정 및 AWS IoT 콘솔이 필요합니다.
이 자습서에 사용하는 계정은 적어도 이러한 AWS 관리형 정책을 포함 할 때 가장 잘 작동합니다.
중요
이 자습서에서 사용된 IAM 정책은 프로덕션 구현에서 따라야 하는 것보다 권한이 많습니다. 프로덕션 환경에서는 계정 및 리소스 정책이 필요한 권한만 부여하도록 해야 합니다.
프로덕션용 IAM 정책을 생성할 때는 사용자 및 역할이 필요로 하는 액세스 수준을 결정한 다음 사용자들이 이러한 작업만 수행할 수 있도록 허용하는 정책을 설계합니다.
자세한 내용은 IAM의 보안 모범 사례를 참조하세요.
-
설치했습니다. AWS CLI
설치 방법에 대한 자세한 내용은 AWS CLI 설치를 참조하십시오. AWS CLI이 자습서에는 AWS CLI 버전
aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/x86_64
이상이 필요합니다. -
OpenSSL 도구
이 자습서의 예제에서는 LibreSSL 2.6.5
를 사용합니다. 이 자습서를 위해서는 OpenSSL v1.1.1i 도구도 사용할 수 있습니다. -
AWS Lambda 개요 검토
AWS Lambda 이전에 Lambda를 사용해 본 적이 없다면 Lambda 시작하기를 AWS Lambda검토하여 Lambda의 용어와 개념을 알아보십시오.
-
Postman에서 요청을 빌드하는 방법 검토
자세한 내용은 요청 빌드
단원을 참조하세요. -
이전 자습서의 사용자 지정 권한 부여자 제거
한 AWS 계정 번에 구성할 수 있는 사용자 지정 권한 부여자 수는 제한되어 있습니다. 사용자 지정 권한 부여자를 제거하는 방법에 대한 자세한 내용은 8단계: 정리 단원을 참조하세요.
1단계: 사용자 지정 권한 부여자를 위한 Lambda 함수 생성
의 사용자 지정 인증은 클라이언트를 인증하고 권한을 부여하기 위해 생성한 권한 부여자 리소스를 AWS IoT Core 사용합니다. 이 섹션에서 생성할 함수는 클라이언트가 리소스에 연결하고 리소스에 액세스할 때 클라이언트를 인증하고 권한을 부여합니다. AWS IoT Core AWS IoT
Lambda 함수는 다음 작업을 수행합니다.
-
test-invoke-authorizer에서 요청이 오는 경우
Deny
작업과 함께 IAM 정책을 반환합니다. -
Postman에서 HTTP를 사용하여 요청을 보내고
actionToken
파라미터 값이 이면 작업이allow
포함된 IAM 정책이 반환됩니다.Allow
그렇지 않은 경우Deny
작업과 함께 IAM 정책을 반환합니다.
사용자 지정 권한 부여자에 대한 Lambda 함수를 생성하려면
-
함수 생성을 선택합니다.
-
처음부터 작성(Author from scratch)이 선택되어 있는지 확인합니다.
-
기본 정보에서
-
함수 이름에
custom-auth-function
을(를) 입력합니다. -
런타임에서 Node.js 18.x를 확인합니다.
-
-
함수 생성을 선택합니다.
Lambda는 Node.js 함수와 로그 업로드 권한을 함수에 부여하는 실행 역할을 생성합니다. Lambda 함수는 함수를 호출할 때 실행 역할을 맡고 실행 역할을 사용하여 SDK에 대한 자격 증명을 생성하고 이벤트 소스에서 AWS 데이터를 읽습니다.
-
편집기에서 함수의 코드와 구성을 보려면 디자이너 창에서 선택한 custom-auth-function다음 AWS Cloud9편집기의 탐색 창에서 index.js 를 선택하십시오.
Node.js 같은 스크립트 언어의 경우 Lambda는 성공 응답을 반환하는 기본 함수를 포함합니다. 소스 코드가 3MB를 초과하지 않는 한 AWS Cloud9 편집기를 사용하여 함수를 편집할 수 있습니다.
-
다음 코드를 사용하여 편집기에서 index.js 코드를 대체합니다.
// A simple Lambda function for an authorizer. It demonstrates // How to parse a CLI and Http password to generate a response. export const handler = async (event, context, callback) => { //Http parameter to initiate allow/deny request const HTTP_PARAM_NAME='actionToken'; const ALLOW_ACTION = 'Allow'; const DENY_ACTION = 'Deny'; //Event data passed to Lambda function var event_str = JSON.stringify(event); console.log('Complete event :'+ event_str); //Read protocolData from the event json passed to Lambda function var protocolData = event.protocolData; console.log('protocolData value---> ' + protocolData); //Get the dynamic account ID from function's ARN to be used // as full resource for IAM policy var ACCOUNT_ID = context.invokedFunctionArn.split(":")[4]; console.log("ACCOUNT_ID---"+ACCOUNT_ID); //Get the dynamic region from function's ARN to be used // as full resource for IAM policy var REGION = context.invokedFunctionArn.split(":")[3]; console.log("REGION---"+REGION); //protocolData data will be undefined if testing is done via CLI. // This will help to test the set up. if (protocolData === undefined) { //If CLI testing, pass deny action as this is for testing purpose only. console.log('Using the test-invoke-authorizer cli for testing only'); callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } else{ //Http Testing from Postman //Get the query string from the request var queryString = event.protocolData.http.queryString; console.log('queryString values -- ' + queryString); /* global URLSearchParams */ const params = new URLSearchParams(queryString); var action = params.get(HTTP_PARAM_NAME); if(action!=null && action.toLowerCase() === 'allow'){ callback(null, generateAuthResponse(ALLOW_ACTION,ACCOUNT_ID,REGION)); }else{ callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } } }; // Helper function to generate the authorization IAM response. var generateAuthResponse = function(effect,ACCOUNT_ID,REGION) { var full_resource = "arn:aws:iot:"+ REGION + ":" + ACCOUNT_ID + ":*"; console.log("full_resource---"+full_resource); var authResponse = {}; authResponse.isAuthenticated = true; authResponse.principalId = 'principalId'; var policyDocument = {}; policyDocument.Version = '2012-10-17'; policyDocument.Statement = []; var statement = {}; statement.Action = 'iot:*'; statement.Effect = effect; statement.Resource = full_resource; policyDocument.Statement[0] = statement; authResponse.policyDocuments = [policyDocument]; authResponse.disconnectAfterInSeconds = 3600; authResponse.refreshAfterInSeconds = 600; console.log('custom auth policy function called from http'); console.log('authResponse --> ' + JSON.stringify(authResponse)); console.log(authResponse.policyDocuments[0]); return authResponse; }
-
배포를 선택합니다.
-
편집기 위에 변경 사항 배포됨(Changes deployed)이 나타나면
-
편집기 위의 함수 개요(Function overview) 섹션으로 스크롤합니다.
-
이 자습서의 후반부에서 사용할 수 있도록 함수 ARN을 복사하여 저장해 둡니다.
-
-
함수를 테스트합니다.
-
테스트 탭을 선택합니다.
-
기본 테스트 설정을 사용하여 호출(Invoke)을 선택합니다.
-
테스트가 성공한 경우 실행 결과(Execution results)에서 세부 정보(Details) 보기를 엽니다. 함수가 반환한 정책 문서가 표시되어야 합니다.
테스트에 실패했거나 정책 문서가 표시되지 않으면 코드를 검토하여 오류를 찾아 수정합니다.
-
2단계: 사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어 생성
사용자 지정 권한 부여자를 인증하려면 퍼블릭 및 프라이빗 키가 필요합니다. 이 섹션의 명령은 OpenSSL 도구를 사용하여 이 키 페어를 생성합니다.
사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어를 생성하려면
-
프라이빗 키 파일을 생성합니다.
openssl genrsa -out private-key.pem 4096
-
방금 생성한 프라이빗 키 파일을 확인합니다.
openssl rsa -check -in private-key.pem -noout
명령에 오류가 표시되지 않으면 프라이빗 키 파일이 유효합니다.
-
퍼블릭 키 파일을 생성합니다.
openssl rsa -in private-key.pem -pubout -out public-key.pem
-
퍼블릭 키 파일을 확인합니다.
openssl pkey -inform PEM -pubin -in public-key.pem -noout
명령에 오류가 표시되지 않으면 퍼블릭 키 파일이 유효합니다.
3단계: 사용자 지정 권한 부여 리소스 및 권한 부여 만들기
AWS IoT 사용자 지정 권한 부여자는 이전 단계에서 만든 모든 요소를 하나로 묶는 리소스입니다. 이 단원에서는 사용자 지정 권한 부여자 리소스를 만들고 이전에 만든 Lambda 함수를 실행할 수 있는 권한을 부여합니다. AWS IoT 콘솔 AWS CLI, 또는 API를 사용하여 사용자 지정 권한 부여자 리소스를 만들 수 있습니다. AWS
이 자습서에서는 사용자 지정 권한 부여자를 하나만 생성하면 됩니다. 이 섹션에서는 가장 편리한 방법을 사용할 수 있도록 AWS IoT 콘솔과 를 사용하여 생성하는 방법을 설명합니다. AWS CLI두 가지 방법으로 생성된 사용자 지정 권한 부여자 리소스 간에는 차이가 없습니다.
사용자 지정 권한 부여 리소스 만들기
다음 옵션 중 하나를 선택하여 사용자 지정 권한 부여자 리소스를 생성합니다.
사용자 지정 권한 부여자를 생성하려면(콘솔)
-
AWS IoT 콘솔의 사용자 지정 권한 부여 페이지를
열고 권한 부여자 생성을 선택합니다. -
권한 부여자에서 다음 작업을 수행합니다.
-
권한 부여자 이름에
my-new-authorizer
를 입력합니다. -
권한 부여자 상태에서 활성을 선택합니다.
-
권한 부여자 함수에서 앞서 생성한 Lambda 함수를 선택합니다.
-
토큰 검증 - 선택 사항에서
-
토큰 검증을 활성화합니다.
-
토큰 키 이름에
tokenKeyName
을 입력합니다. -
키 추가를 선택합니다.
-
키 이름에
FirstKey
를 입력합니다. -
퍼블릭 키에
public-key.pem
파일의 내용을 입력합니다. 파일로부터-----BEGIN PUBLIC KEY-----
및-----END PUBLIC KEY-----
이(가) 있는 행을 포함해야 하며, 파일 내용에서 줄 바꿈, 캐리지 리턴 또는 기타 문자를 추가하거나 제거하지 마세요. 입력한 문자열은 이 예제와 유사해야 합니다.-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----
-
-
-
권한 부여자 생성을 선택합니다.
-
사용자 지정 권한 부여자 리소스가 생성된 경우 사용자 지정 권한 부여자 목록이 표시되고 새 사용자 지정 권한 부여자가 목록에 나타나며 다음 섹션으로 이동하여 테스트할 수 있습니다.
오류가 표시되면 오류를 검토하고 사용자 지정 권한 부여자를 다시 만들고 항목을 다시 확인합니다. 각 사용자 지정 권한 부여자 리소스에는 고유한 이름이 있어야 합니다.
사용자 지정 권한 부여자를 생성하려면(AWS CLI)
-
값을
authorizer-function-arn
및token-signing-public-keys
(으)로 대체한 후 다음 명령을 실행합니다.aws iot create-authorizer \ --authorizer-name "my-new-authorizer" \ --token-key-name "tokenKeyName" \ --status ACTIVE \ --no-signing-disabled \ --authorizer-function-arn "
arn:aws:lambda:
" \ --token-signing-public-keys FirstKey="Region
:57EXAMPLE833:function:custom-auth-function-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----
"위치:
-
authorizer-function-arn
값은 사용자 지정 권한 부여자에 대해 생성한 Lambda 함수의 Amazon 리소스 이름(ARN)입니다. -
token-signing-public-keys
값은 키 이름,FirstKey
및public-key.pem
파일의 내용을 포함합니다. 파일로부터-----BEGIN PUBLIC KEY-----
및-----END PUBLIC KEY-----
이(가) 있는 행을 포함해야 하며, 파일 내용에서 줄 바꿈, 캐리지 리턴 또는 기타 문자를 추가하거나 제거하지 마세요.참고: 퍼블릭 키 값을 변경하면 퍼블릭 키를 사용할 수 없게 되므로 퍼블릭 키를 입력하는 것은 주의해야 합니다.
-
-
사용자 지정 권한 부여자가 생성되면 명령은 다음과 같은 새 리소스의 이름 및 ARN을 반환합니다.
{ "authorizerName": "my-new-authorizer", "authorizerArn": "arn:aws:iot:
Region
:57EXAMPLE833:authorizer/my-new-authorizer" }다음 단계에서 사용하도록
authorizerArn
값을 저장합니다.각 사용자 지정 권한 부여자 리소스에는 고유한 이름이 있어야 합니다.
사용자 지정 권한 부여자 리소스 권한 부여하기
이 섹션에서는 방금 생성한 사용자 지정 권한 부여자 리소스에 Lambda 함수를 실행할 수 있는 권한을 부여합니다. 권한을 부여하려면 add-permission CLI 명령을 사용할 수 있습니다.
다음을 사용하여 Lambda 함수에 권한을 부여하십시오. AWS CLI
-
값을 삽입한 후 다음 명령을 입력합니다. 참고:
statement-id
값은 고유해야 합니다. 이전에 이 자습서를 실행한 적이 있거나ResourceConflictException
오류가 발생하면
을(를) 다른 값으로 대체합니다.Id-1234
aws lambda add-permission \ --function-name "custom-auth-function" \ --principal "iot.amazonaws.com" \ --action "lambda:InvokeFunction" \ --statement-id "
Id-1234
" \ --source-arnauthorizerArn
-
명령이 성공하면 이 예제와 같은 권한 문이 반환됩니다. 다음 단원을 계속하여 사용자 지정 권한 부여자를 테스트할 수 있습니다.
{ "Statement": "{\"Sid\":\"
Id-1234
\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region
:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region
:57EXAMPLE833:function:custom-auth-function\"}}}" }명령이 성공하지 못하면 이 예제와 같은 오류가 반환됩니다. 계속하기 전에 오류를 검토하고 수정해야 합니다.
An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer mission on resource: arn:aws:lambda:
Region
:57EXAMPLE833:function:custom-auth-function
4단계: 를 호출하여 권한 부여자를 테스트합니다. test-invoke-authorizer
이 섹션에서는 모든 리소스가 정의된 상태에서 test-invoke-authorizer 명령줄에서 호출하여 권한 부여 패스를 테스트합니다.
명령줄에서 권한 부여자를 호출할 때 protocolData
이(가) 정의되지 않았으므로 권한 부여자는 항상 DENY 문서를 반환합니다. 그러나 이 테스트는 Lambda 함수를 완전히 테스트하지 않더라도 사용자 지정 권한 부여자와 Lambda 함수가 올바르게 구성되었는지 확인합니다.
다음을 사용하여 사용자 지정 권한 부여자와 Lambda 함수를 테스트하려면 AWS CLI
-
이전 단계에서 생성한
private-key.pem
파일이 있는 디렉터리에서 다음 명령을 실행합니다.echo -n "tokenKeyValue" | openssl dgst -sha256 -sign private-key.pem | openssl base64 -A
이 명령은 다음 단계에서 사용할 서명 문자열을 만듭니다. 서명 문자열은 다음과 같은 형태입니다.
dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mn VB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeeh bQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjj szEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29V QJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuX f3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+K EWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFH xRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=
이 서명 문자열을 복사하여 다음 단계에서 사용합니다. 여분의 문자를 포함하거나 남겨 두지 않도록 합니다.
-
이 명령에서
token-signature
값을 이전 단계의 서명 문자열로 바꾸고 이 명령을 실행하여 권한 부여자를 테스트합니다.aws iot test-invoke-authorizer \ --authorizer-name my-new-authorizer \ --token tokenKeyValue \ --token-signature
dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=
명령이 성공하면 사용자 지정 권한 부여 함수에서 생성된 정보 (예: 이 예제) 를 반환합니다.
{ "isAuthenticated": true, "principalId": "principalId", "policyDocuments": [ "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"iot:*\",\"Effect\":\"Deny\",\"Resource\":\"arn:aws:iot:
Region
:57EXAMPLE833:*\"}]}" ], "refreshAfterInSeconds": 600, "disconnectAfterInSeconds": 3600 }명령이 오류를 반환하면 오류를 검토하고 이 단원에서 사용한 명령을 다시 확인합니다.
5단계: Postman을 사용하여 MQTT 메시지 게시 테스트
-
명령줄에서 디바이스 데이터 엔드포인트를 가져오려면 여기에 표시된 대로 describe-endpoint
를 호출합니다. aws iot describe-endpoint --output text --endpoint-type iot:Data-ATS
이후 단계에서
device_data_endpoint_address
로 사용할 수 있도록 이 주소를 저장합니다. -
새 Postman 창을 열고 새 HTTP POST 요청을 만듭니다.
-
컴퓨터에서 Postman 앱을 엽니다.
-
Postman의 파일 메뉴에서 새로 만들기…를 선택합니다.
-
새로 만들기(New) 대화 상자에서 요청(Request)을 선택합니다.
-
저장 요청에서
-
요청 이름에서
Custom authorizer test request
을(를) 입력합니다. -
저장할 컬렉션 또는 폴더 선택:에서 이 요청을 저장할 컬렉션을 선택하거나 만듭니다.
-
collection_name
에 저장을 선택합니다.
-
-
-
POST 요청을 생성하여 사용자 지정 권한 부여자를 테스트합니다.
-
URL 필드 옆의 요청 메소드 선택기에서 POST를 선택합니다.
-
URL 필드에서 이전 단계의 describe-endpoint
명령의 device_data_endpoint_address
와 함께 다음 URL을 사용하여 요청에 대한 URL을 생성합니다.https://
device_data_endpoint_address
:443/topics/test/cust-auth/topic?qos=0&actionToken=allow이 URL에는 AWS IoT에 대한 액세스를 허용하는 정책 문서를 반환하도록 Lambda 함수에 지시하는
actionToken=allow
쿼리 파라미터가 포함됩니다. URL을 입력한 후 쿼리 파라미터가 Postman의 Params 탭에도 나타납니다. -
Auth 탭의 유형(Type) 필드에서 No Auth를 선택합니다.
-
헤더(Headers) 탭에서:
-
호스트 키가 선택되어 있으면 이 키를 선택 취소하세요.
-
헤더 목록의 맨 아래에 이러한 새 헤더를 추가하고 새 헤더가 선택되었는지 확인합니다.
Host
값을device_data_endpoint_address
로 바꾸고,x-amz-customauthorizer-signature
값을 이전 단원에서 test-invoke-authorize 명령과 함께 사용한 서명 문자열로 바꿉니다.키 값 x-amz-customauthorizer-name
my-new-authorizer
Host
device_data_endpoint_address
tokenKeyName
tokenKeyValue
x-amz-customauthorizer-signature
DBWYKZLB+FO+JMS GdwoGr 8DYC2QB/ IyLef JJR+RBCVMUMU9JL4KHAA9DG+V+MMWU09YSA86+64y3GT4 9mnVB1WyxP+0bdzh8Hmquauh3fwi3 ca4cwnulqnqb 7i2I +CPY0ZZ RWT1JR9 BIKGP QHHTO357 9PP30 UF4 A5K7QIC01N4 BIYRTM90OYZ94R4BDJSHNIG 1 OBVMGCEF09JJSZEHFGGO GUAQIWXIVGQJ16 BU1xkPtgSitahelkujto Expleck3ahky+dkYKY+DD 1 YHBQ8MJHZJ0KGBT29VQJCB8RILN/P5+VCVNISXWPPLYB5JKYS9UVG08Reoy64 /R/F3VV8i 3 aci6ca+ 3 QQF/Ysuy02U5 tOykpZqn +Sto6K fPjBv ZzbCvsluv MjEg DxWkjaeehb TegKs TrxypNmFsw JePgnu vTvdthKt AtizfUhvSul TtQp aXiUtcsp tsDuXf LzCw XkWnCkpNlkD0WU 8GL3+kozxrthNQ 8geajd5iylx230iQCXO3OSJPHA7JDYWM5O+KE 91i1Mokdr5SJ4jxixvnjtvsx1li49ialw4en1dakc1a0s2u2unm236ExlotyH7H+ AWQF VKS1 ZiuclazwPRH/Ord WckTe BiogokjidGP9GWXiK7
WPMK9o= flFeloZl HxRlXsPqi JplpiWfBg zWrGm
-
-
본문(Body) 탭에서:
-
데이터 형식 옵션 상자에서 원시(Raw)를 선택합니다.
-
데이터 유형 목록에서 을 선택합니다 JavaScript.
-
텍스트 필드에서 테스트 메시지에 대해 다음 JSON 메시지 페이로드를 입력합니다.
{ "data_mode": "test", "vibration": 200, "temperature": 40 }
-
-
-
전송(Send)을 선택하여 요청을 전송합니다.
요청이 성공적이면 다음을 반환합니다.
{ "message": "OK", "traceId": "ff35c33f-409a-ea90-b06f-fbEXAMPLE25c" }
응답이 성공하면 사용자 지정 권한 부여자가 연결을 AWS IoT 허용했으며 테스트 메시지가 브로커에게 전달되었음을 나타냅니다. AWS IoT Core
오류가 반환되면 오류 메시지
device_data_endpoint_address
, 서명 문자열 및 기타 헤더 값이 포함됩니다.
다음 단원에서 사용하도록 이 요청을 Postman에 유지합니다.
6단계: MQTT 테스트 클라이언트에서 메시지 보기
이전 단계에서는 Postman을 사용하여 시뮬레이션된 장치 메시지를 AWS IoT 에 보냈습니다. 성공 응답은 사용자 지정 권한 부여자가 AWS IoT 에 대한 연결을 허용했으며 서 테스트 메시지가 AWS IoT Core의 브로커에게 전달되었음을 나타냅니다. 이 섹션에서는 다른 기기 및 서비스와 마찬가지로 AWS IoT 콘솔의 MQTT 테스트 클라이언트를 사용하여 해당 메시지의 메시지 콘텐츠를 확인합니다.
사용자 지정 권한 부여자가 승인한 테스트 메시지를 보려면
-
AWS IoT 콘솔에서 MQTT 테스트 클라이언트를
엽니다. -
주제 구독(Subscribe to topic) 탭의 주제 필터(Topic filter)에
test/cust-auth/topic
을(를) 입력합니다. 이는 이전 단원의 Postman 예제에서 사용된 메시지 주제입니다. -
구독을 선택합니다.
이 창은 다음 단계를 위해 계속 표시되도록 합니다.
-
Postman에서 이전 섹션에 대해 만든 요청에서 전송(Send)을 선택합니다.
응답을 검토하여 성공했는지 확인합니다. 그렇지 않은 경우 이전 단원에서 설명한 대로 오류 문제를 해결하세요.
-
MQTT 테스트 클라이언트에서 메시지 주제를 표시하는 새 항목이 표시되고, 확장되면 Postman에서 전송한 요청의 메시지 페이로드가 표시됩니다.
MQTT 테스트 클라이언트에서 메시지가 표시되지 않으면 다음 몇 가지를 확인해야 합니다.
-
Postman 요청이 성공적으로 반환되었는지 확인하세요. 연결을 AWS IoT 거부하고 오류를 반환하면 요청의 메시지가 메시지 브로커로 전달되지 않습니다.
-
AWS 계정 AWS IoT 콘솔을 여는 AWS 리전 데 사용되는 AND가 Postman URL에서 사용하는 것과 동일한지 확인하십시오.
-
MQTT 테스트 클라이언트에서 주제를 올바르게 입력했는지 확인하세요. 주제 필터는 대소문자를 구분하지 않습니다. 확실하지 않은 경우 주제를 구독할 수도 있습니다. 이
#
주제를 구독하면 메시지 브로커를 통해 콘솔을 여는 AWS 리전 데 사용되는 모든 MQTT 메시지를 구독할 수 있습니다. AWS 계정 AWS IoT
-
7단계: 결과 및 다음 단계 검토
이 자습서에서는:
-
Lambda 함수를 사용자 지정 권한 부여자 처리기로 만들었습니다.
-
토큰 서명이 활성화된 상태에서 사용자 지정 권한 부여자를 만들었습니다.
-
test-invoke-authorizer 명령을 사용하여 사용자 지정 권한 부여자를 테스트했습니다.
-
Postman
을 사용하여 MQTT 주제를 게시했고 사용자 지정 권한 부여자로 요청을 검증합니다. -
MQTT 테스트 클라이언트를 사용하여 Postman 테스트에서 전송한 메시지를 보았습니다.
다음 단계
Postman에서 일부 메시지를 전송해 사용자 지정 권한 부여자가 작동하는지 확인한 후 이 자습서의 다양한 측면을 변경하면 결과에 어떤 영향을 미치는지 실험해 보세요. 다음은 시작하는 데 도움이 될 몇 가지 예제입니다.
-
더 이상 유효하지 않게 서명 문자열을 변경하여 무단 연결 시도가 어떻게 처리되는지 확인합니다. 이 오류 응답과 같은 오류 응답이 나타나야 하며 MQTT 테스트 클라이언트에 메시지가 나타나지 않아야 합니다.
{ "message": "Forbidden", "traceId": "15969756-a4a4-917c-b47a-5433e25b1356" }
-
AWS IoT 규칙을 개발하고 사용하는 동안 발생할 수 있는 오류를 찾는 방법에 대한 자세한 내용은 을 참조하십시오. 모니터링 AWS IoT
8단계: 정리
이 자습서를 반복하려면 일부 사용자 지정 권한 부여자를 제거해야 할 수도 있습니다. 한 번에 구성할 AWS 계정 수 있는 사용자 지정 권한 부여자 수는 제한되어 있으며 기존 사용자 지정 권한 부여자를 제거하지 않고도 새 사용자 지정 권한 부여자를 추가하려고 LimitExceededException
하면 승인될 수 있습니다.
사용자 지정 권한 부여자를 제거하려면(콘솔)
-
AWS IoT 콘솔의 사용자 지정 권한 부여자 페이지를
열고 사용자 지정 권한 부여자 목록에서 제거할 사용자 지정 권한 부여자를 찾습니다. -
사용자 지정 권한 부여자 세부 정보 페이지를 열고 작업 메뉴에서 편집을 선택합니다.
-
권한 부여자 활성화의 선택을 취소한 다음 업데이트를 선택합니다.
활성 상태인 동안에는 사용자 지정 권한 부여자를 삭제할 수 없습니다.
-
사용자 지정 권한 부여자 세부 정보 페이지에서 작업 메뉴를 열고 삭제를 선택합니다.
사용자 지정 권한 부여자를 제거하려면(AWS CLI)
-
설치한 사용자 지정 권한 부여자를 나열하고 삭제할 사용자 지정 권한 부여자의 이름을 찾습니다.
aws iot list-authorizers
-
을(를) 삭제할 사용자 지정 권한 부여자의Custom_Auth_Name
authorizerName
(으)로 바꾼 후 이 명령을 실행하여 사용자 지정 권한 부여자를inactive
(으)로 설정합니다.aws iot update-authorizer --status INACTIVE --authorizer-name
Custom_Auth_Name
-
을(를) 삭제할 사용자 지정 권한 부여자의Custom_Auth_Name
authorizerName
(으)로 바꾼 후 이 명령을 실행하여 사용자 지정 권한 부여자를 삭제합니다.aws iot delete-authorizer --authorizer-name
Custom_Auth_Name