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

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

자습서: 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 LambdaLambda 시작하기를 검토하여 해당 용어와 개념을 알아봅니다.

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

  2. 함수 생성(Create function)을 선택합니다.

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

  4. 기본 정보에서

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

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

  5. 함수 생성(Create function)을 선택합니다.

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

  6. AWS Cloud9 편집기에서 함수의 코드와 구성을 보려면 디자이너 창에서 custom-auth-function를 선택한 다음 편집기의 탐색 창에서 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단계: 사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어 생성

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

사용자 지정 권한 부여자를 위한 퍼블릭 및 프라이빗 키 페어를 생성하려면
  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또는를 사용하여 사용자 지정 권한 부여자 리소스를 생성할 수 있습니다 AWS API.

이 자습서에서는 사용자 지정 권한 부여자를 하나만 생성하면 됩니다. 이 섹션에서는 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

      여기에는 Lambda 함수에 액세스를 허용하는 정책 문서를 반환하도록 지시하는 actionToken=allow 쿼리 파라미터가 URL 포함됩니다 AWS IoT. 를 입력하면 Postman의 파라미터 탭에도 URL쿼리 파라미터가 나타납니다.

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

    4. 헤더(Headers) 탭에서:

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

      2. 헤더 목록의 맨 아래에 이러한 새 헤더를 추가하고 새 헤더가 선택되었는지 확인합니다. Host 값을 로 바꾸device_data_endpoint_addressx-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=
    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 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 때를 가져올 수 있습니다.

사용자 지정 권한 부여자를 제거하려면(콘솔)
  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