자습서: AWS IoT Core에 대한 사용자 지정 권한 부여자 생성 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

자습서: 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 함수를 생성하려면
  1. Lambda 콘솔에서 함수를 엽니다.

  2. 함수 생성을 선택합니다.

  3. 처음부터 작성(Author from scratch)이 선택되어 있는지 확인합니다.

  4. 기본 정보에서

    1. 함수 이름custom-auth-function을(를) 입력합니다.

    2. 런타임에서 Node.js 18.x를 확인합니다.

  5. 함수 생성을 선택합니다.

    Lambda는 Node.js 함수와 로그 업로드 권한을 함수에 부여하는 실행 역할을 생성합니다. Lambda 함수는 함수를 호출할 때 실행 역할을 맡고 실행 역할을 사용하여 SDK에 대한 자격 증명을 생성하고 이벤트 소스에서 AWS 데이터를 읽습니다.

  6. 편집기에서 함수의 코드와 구성을 보려면 디자이너 창에서 선택한 custom-auth-function다음 AWS Cloud9편집기의 탐색 창에서 index.js 를 선택하십시오.

    Node.js 같은 스크립트 언어의 경우 Lambda는 성공 응답을 반환하는 기본 함수를 포함합니다. 소스 코드가 3MB를 초과하지 않는 한 AWS Cloud9 편집기를 사용하여 함수를 편집할 수 있습니다.

  7. 다음 코드를 사용하여 편집기에서 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; }
  8. 배포를 선택합니다.

  9. 편집기 위에 변경 사항 배포됨(Changes deployed)이 나타나면

    1. 편집기 위의 함수 개요(Function overview) 섹션으로 스크롤합니다.

    2. 이 자습서의 후반부에서 사용할 수 있도록 함수 ARN을 복사하여 저장해 둡니다.

  10. 함수를 테스트합니다.

    1. 테스트 탭을 선택합니다.

    2. 기본 테스트 설정을 사용하여 호출(Invoke)을 선택합니다.

    3. 테스트가 성공한 경우 실행 결과(Execution results)에서 세부 정보(Details) 보기를 엽니다. 함수가 반환한 정책 문서가 표시되어야 합니다.

      테스트에 실패했거나 정책 문서가 표시되지 않으면 코드를 검토하여 오류를 찾아 수정합니다.

2단계: 사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어 생성

사용자 지정 권한 부여자를 인증하려면 퍼블릭 및 프라이빗 키가 필요합니다. 이 섹션의 명령은 OpenSSL 도구를 사용하여 이 키 페어를 생성합니다.

사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어를 생성하려면
  1. 프라이빗 키 파일을 생성합니다.

    openssl genrsa -out private-key.pem 4096
  2. 방금 생성한 프라이빗 키 파일을 확인합니다.

    openssl rsa -check -in private-key.pem -noout

    명령에 오류가 표시되지 않으면 프라이빗 키 파일이 유효합니다.

  3. 퍼블릭 키 파일을 생성합니다.

    openssl rsa -in private-key.pem -pubout -out public-key.pem
  4. 퍼블릭 키 파일을 확인합니다.

    openssl pkey -inform PEM -pubin -in public-key.pem -noout

    명령에 오류가 표시되지 않으면 퍼블릭 키 파일이 유효합니다.

3단계: 사용자 지정 권한 부여 리소스 및 권한 부여 만들기

AWS IoT 사용자 지정 권한 부여자는 이전 단계에서 만든 모든 요소를 하나로 묶는 리소스입니다. 이 단원에서는 사용자 지정 권한 부여자 리소스를 만들고 이전에 만든 Lambda 함수를 실행할 수 있는 권한을 부여합니다. AWS IoT 콘솔 AWS CLI, 또는 API를 사용하여 사용자 지정 권한 부여자 리소스를 만들 수 있습니다. AWS

이 자습서에서는 사용자 지정 권한 부여자를 하나만 생성하면 됩니다. 이 섹션에서는 가장 편리한 방법을 사용할 수 있도록 AWS IoT 콘솔과 를 사용하여 생성하는 방법을 설명합니다. AWS CLI두 가지 방법으로 생성된 사용자 지정 권한 부여자 리소스 간에는 차이가 없습니다.

사용자 지정 권한 부여 리소스 만들기

다음 옵션 중 하나를 선택하여 사용자 지정 권한 부여자 리소스를 생성합니다.
사용자 지정 권한 부여자를 생성하려면(콘솔)
  1. AWS IoT 콘솔의 사용자 지정 권한 부여 페이지를 열고 권한 부여자 생성을 선택합니다.

  2. 권한 부여자에서 다음 작업을 수행합니다.

    1. 권한 부여자 이름my-new-authorizer를 입력합니다.

    2. 권한 부여자 상태에서 활성을 선택합니다.

    3. 권한 부여자 함수에서 앞서 생성한 Lambda 함수를 선택합니다.

    4. 토큰 검증 - 선택 사항에서

      1. 토큰 검증을 활성화합니다.

      2. 토큰 키 이름tokenKeyName을 입력합니다.

      3. 키 추가를 선택합니다.

      4. 키 이름FirstKey를 입력합니다.

      5. 퍼블릭 키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-----
  3. 권한 부여자 생성을 선택합니다.

  4. 사용자 지정 권한 부여자 리소스가 생성된 경우 사용자 지정 권한 부여자 목록이 표시되고 새 사용자 지정 권한 부여자가 목록에 나타나며 다음 섹션으로 이동하여 테스트할 수 있습니다.

    오류가 표시되면 오류를 검토하고 사용자 지정 권한 부여자를 다시 만들고 항목을 다시 확인합니다. 각 사용자 지정 권한 부여자 리소스에는 고유한 이름이 있어야 합니다.

사용자 지정 권한 부여자를 생성하려면(AWS CLI)
  1. 값을 authorizer-function-arntoken-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:Region:57EXAMPLE833:function:custom-auth-function" \ --token-signing-public-keys FirstKey="-----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 값은 키 이름, FirstKeypublic-key.pem 파일의 내용을 포함합니다. 파일로부터 -----BEGIN PUBLIC KEY----------END PUBLIC KEY-----이(가) 있는 행을 포함해야 하며, 파일 내용에서 줄 바꿈, 캐리지 리턴 또는 기타 문자를 추가하거나 제거하지 마세요.

      참고: 퍼블릭 키 값을 변경하면 퍼블릭 키를 사용할 수 없게 되므로 퍼블릭 키를 입력하는 것은 주의해야 합니다.

  2. 사용자 지정 권한 부여자가 생성되면 명령은 다음과 같은 새 리소스의 이름 및 ARN을 반환합니다.

    { "authorizerName": "my-new-authorizer", "authorizerArn": "arn:aws:iot:Region:57EXAMPLE833:authorizer/my-new-authorizer" }

    다음 단계에서 사용하도록 authorizerArn 값을 저장합니다.

    각 사용자 지정 권한 부여자 리소스에는 고유한 이름이 있어야 합니다.

사용자 지정 권한 부여자 리소스 권한 부여하기

이 섹션에서는 방금 생성한 사용자 지정 권한 부여자 리소스에 Lambda 함수를 실행할 수 있는 권한을 부여합니다. 권한을 부여하려면 add-permission CLI 명령을 사용할 수 있습니다.

다음을 사용하여 Lambda 함수에 권한을 부여하십시오. AWS CLI
  1. 값을 삽입한 후 다음 명령을 입력합니다. 참고: 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-arn authorizerArn
  2. 명령이 성공하면 이 예제와 같은 권한 문이 반환됩니다. 다음 단원을 계속하여 사용자 지정 권한 부여자를 테스트할 수 있습니다.

    { "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
  1. 이전 단계에서 생성한 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=

    이 서명 문자열을 복사하여 다음 단계에서 사용합니다. 여분의 문자를 포함하거나 남겨 두지 않도록 합니다.

  2. 이 명령에서 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 메시지 게시 테스트

  1. 명령줄에서 디바이스 데이터 엔드포인트를 가져오려면 여기에 표시된 대로 describe-endpoint를 호출합니다.

    aws iot describe-endpoint --output text --endpoint-type iot:Data-ATS

    이후 단계에서 device_data_endpoint_address로 사용할 수 있도록 이 주소를 저장합니다.

  2. 새 Postman 창을 열고 새 HTTP POST 요청을 만듭니다.

    1. 컴퓨터에서 Postman 앱을 엽니다.

    2. Postman의 파일 메뉴에서 새로 만들기…를 선택합니다.

    3. 새로 만들기(New) 대화 상자에서 요청(Request)을 선택합니다.

    4. 저장 요청에서

      1. 요청 이름에서 Custom authorizer test request을(를) 입력합니다.

      2. 저장할 컬렉션 또는 폴더 선택:에서 이 요청을 저장할 컬렉션을 선택하거나 만듭니다.

      3. collection_name에 저장을 선택합니다.

  3. POST 요청을 생성하여 사용자 지정 권한 부여자를 테스트합니다.

    1. URL 필드 옆의 요청 메소드 선택기에서 POST를 선택합니다.

    2. 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 탭에도 나타납니다.

    3. Auth 탭의 유형(Type) 필드에서 No Auth를 선택합니다.

    4. 헤더(Headers) 탭에서:

      1. 호스트 키가 선택되어 있으면 이 키를 선택 취소하세요.

      2. 헤더 목록의 맨 아래에 이러한 새 헤더를 추가하고 새 헤더가 선택되었는지 확인합니다. 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
    5. 본문(Body) 탭에서:

      1. 데이터 형식 옵션 상자에서 원시(Raw)를 선택합니다.

      2. 데이터 유형 목록에서 을 선택합니다 JavaScript.

      3. 텍스트 필드에서 테스트 메시지에 대해 다음 JSON 메시지 페이로드를 입력합니다.

        { "data_mode": "test", "vibration": 200, "temperature": 40 }
  4. 전송(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 테스트 클라이언트를 사용하여 해당 메시지의 메시지 콘텐츠를 확인합니다.

사용자 지정 권한 부여자가 승인한 테스트 메시지를 보려면
  1. AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 엽니다.

  2. 주제 구독(Subscribe to topic) 탭의 주제 필터(Topic filter)test/cust-auth/topic을(를) 입력합니다. 이는 이전 단원의 Postman 예제에서 사용된 메시지 주제입니다.

  3. 구독을 선택합니다.

    이 창은 다음 단계를 위해 계속 표시되도록 합니다.

  4. Postman에서 이전 섹션에 대해 만든 요청에서 전송(Send)을 선택합니다.

    응답을 검토하여 성공했는지 확인합니다. 그렇지 않은 경우 이전 단원에서 설명한 대로 오류 문제를 해결하세요.

  5. 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 하면 승인될 수 있습니다.

사용자 지정 권한 부여자를 제거하려면(콘솔)
  1. AWS IoT 콘솔의 사용자 지정 권한 부여자 페이지를 열고 사용자 지정 권한 부여자 목록에서 제거할 사용자 지정 권한 부여자를 찾습니다.

  2. 사용자 지정 권한 부여자 세부 정보 페이지를 열고 작업 메뉴에서 편집을 선택합니다.

  3. 권한 부여자 활성화의 선택을 취소한 다음 업데이트를 선택합니다.

    활성 상태인 동안에는 사용자 지정 권한 부여자를 삭제할 수 없습니다.

  4. 사용자 지정 권한 부여자 세부 정보 페이지에서 작업 메뉴를 열고 삭제를 선택합니다.

사용자 지정 권한 부여자를 제거하려면(AWS CLI)
  1. 설치한 사용자 지정 권한 부여자를 나열하고 삭제할 사용자 지정 권한 부여자의 이름을 찾습니다.

    aws iot list-authorizers
  2. Custom_Auth_Name을(를) 삭제할 사용자 지정 권한 부여자의 authorizerName(으)로 바꾼 후 이 명령을 실행하여 사용자 지정 권한 부여자를 inactive(으)로 설정합니다.

    aws iot update-authorizer --status INACTIVE --authorizer-name Custom_Auth_Name
  3. Custom_Auth_Name을(를) 삭제할 사용자 지정 권한 부여자의 authorizerName(으)로 바꾼 후 이 명령을 실행하여 사용자 지정 권한 부여자를 삭제합니다.

    aws iot delete-authorizer --authorizer-name Custom_Auth_Name