기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: AWS IoT Core에 대한 사용자 지정 권한 부여자 생성
이 자습서에서는 AWS CLI을(를) 사용하여 사용자 지정 인증을 만들고 유효성을 검사하고 사용하는 단계를 보여 줍니다. 선택적으로이 자습서를 사용하여 게시를 사용하여 Postman을 사용하여 HTTP AWS IoT Core 로 데이터를 전송할 수 있습니다API.
이 자습서에서는 권한 부여 및 인증 논리를 구현하는 샘플 Lambda 함수와 토큰 서명이 활성화된 상태에서 create-authorizer 호출을 사용하는 사용자 지정 권한 부여자를 생성하는 방법을 보여줍니다. 그런 다음 권한 부여자는를 사용하여 검증되며test-invoke-authorizer, 마지막으로 테스트 MQTT 주제에 게시를 AWS IoT Core 사용하여 HTTP API로 데이터를 전송할 수 있습니다. 샘플 요청은 x-amz-customauthorizer-name
헤더를 사용하여 호출할 권한 부여자를 지정하고 요청 헤더x-amz-customauthorizer-signature
에서 및를 token-key-name 전달합니다.
이 자습서에서 배울 내용:
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
이상이 필요합니다. -
도구 열기SSL
이 자습서의 예제에서는 LibreSSL 2.6.5
를 사용합니다. 이 자습서에서는 OpenSSL v1.1.1i 도구를 사용할 수도 있습니다. -
AWS Lambda 개요 검토
AWS Lambda 이전에를 사용한 적이 없는 경우 AWS Lambda 및 Lambda 시작하기를 검토하여 해당 용어와 개념을 알아봅니다.
-
Postman에서 요청을 빌드하는 방법 검토
자세한 내용은 요청 빌드
단원을 참조하세요. -
이전 자습서의 사용자 지정 권한 부여자 제거
한 번에 제한된 수의 사용자 지정 권한 부여자만 구성할 AWS 계정 수 있습니다. 사용자 지정 권한 부여자를 제거하는 방법에 대한 자세한 내용은 8단계: 정리 단원을 참조하세요.
1단계: 사용자 지정 권한 부여자를 위한 Lambda 함수 생성
의 사용자 지정 인증 AWS IoT Core 은 사용자가 생성한 권한 부여자 리소스를 사용하여 클라이언트를 인증하고 승인합니다. 이 섹션에서 생성할 함수는 클라이언트가 AWS IoT 리소스에 연결하고 액세스할 때 클라이언트를 인증 AWS IoT Core 하고 승인합니다.
Lambda 함수는 다음 작업을 수행합니다.
-
요청이에서 온 경우
Deny
작업이 포함된 IAM 정책을 test-invoke-authorizer반환합니다. -
요청이를 사용하여 Postman에서 왔HTTP고
actionToken
파라미터의 값이 인 경우Allow
작업이 포함된 IAM 정책을allow
반환합니다. 그렇지 않으면Deny
작업과 함께 IAM 정책을 반환합니다.
사용자 지정 권한 부여자에 대한 Lambda 함수를 생성하려면
-
함수 생성(Create function)을 선택합니다.
-
처음부터 작성(Author from scratch)이 선택되어 있는지 확인합니다.
-
기본 정보에서
-
함수 이름에
custom-auth-function
을(를) 입력합니다. -
런타임에서 Node.js 18.x를 확인합니다.
-
-
함수 생성(Create function)을 선택합니다.
Lambda는 Node.js 함수와 로그 업로드 권한을 함수에 부여하는 실행 역할을 생성합니다. Lambda 함수는 함수를 호출할 때 실행 역할을 수임하고 실행 역할을 사용하여 AWS SDK에 대한 자격 증명을 생성하고 이벤트 소스에서 데이터를 읽습니다.
-
AWS Cloud9 편집기에서 함수의 코드와 구성을 보려면 디자이너 창에서 custom-auth-function를 선택한 다음 편집기의 탐색 창에서 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단계: 사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어 생성
사용자 지정 권한 부여자를 인증하려면 퍼블릭 및 프라이빗 키가 필요합니다. 이 섹션의 명령은 도구 열기SSL를 사용하여이 키 페어를 생성합니다.
사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어를 생성하려면
-
프라이빗 키 파일을 생성합니다.
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또는를 사용하여 사용자 지정 권한 부여자 리소스를 생성할 수 있습니다 AWS API.
이 자습서에서는 사용자 지정 권한 부여자를 하나만 생성하면 됩니다. 이 섹션에서는 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여기에는 Lambda 함수에 액세스를 허용하는 정책 문서를 반환하도록 지시하는
actionToken=allow
쿼리 파라미터가 URL 포함됩니다 AWS IoT. 를 입력하면 Postman의 파라미터 탭에도 URL쿼리 파라미터가 나타납니다. -
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+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=
-
-
본문(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 IoT 콘솔을 여는 데 AWS 리전 사용되는 AWS 계정 및가 Postman에서 사용하는 것과 동일한지 확인합니다URL.
-
사용자 지정 권한 부여자에 적절한 엔드포인트를 사용하고 있는지 확인합니다. 기본 IoT 엔드포인트는 Lambda 함수와 함께 사용자 지정 권한 부여자 사용을 지원하지 않을 수 있습니다. 대신 도메인 구성을 사용하여 새 엔드포인트를 정의한 다음 사용자 지정 권한 부여자에 대해 해당 엔드포인트를 지정할 수 있습니다.
-
MQTT 테스트 클라이언트에 주제를 올바르게 입력했는지 확인합니다. 주제 필터는 대소문자를 구분하지 않습니다. 확실하지 않은 경우 주제를 구독할 수도 있습니다.이
#
주제는 MQTT 메시지 브로커를 통과 AWS 계정 하고 콘솔을 여는 데 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