Tutorial: criar um autorizador personalizado para o AWS IoT Core - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial: criar um autorizador personalizado para o AWS IoT Core

Este tutorial demonstra as etapas para criar, validar e usar a autenticação personalizada usando a AWS CLI. Opcionalmente, usando este tutorial, você pode usar o Postman para enviar dados ao AWS IoT Core usando a API de publicação HTTP.

Este tutorial mostra como criar um exemplo de função do Lambda que implementa a lógica de autorização e autenticação e um autorizador personalizado usando a chamada create-authorizer com a assinatura de token ativada. O autorizador é então validado usando o. Etest-invoke-authorizer, finalmente, você pode enviar dados AWS IoT Core usando a API HTTP Publish para um tópico de teste do MQTT. A solicitação de amostra especificará o autorizador a ser invocado usando o x-amz-customauthorizer-name cabeçalho e transmitirá os cabeçalhos token-key-name e x-amz-customauthorizer-signature na solicitação.

O que você aprenderá neste tutorial:
  • Como criar uma função do Lambda para ser um manipulador de autorizador personalizado

  • Como criar um autorizador personalizado usando o AWS CLI com a assinatura de token ativada

  • Como testar seu autorizador personalizado usando o comando test-invoke-authorizer

  • Como publicar um tópico do MQTT usando o Postman e validar a solicitação com seu autorizador personalizado

Este tutorial leva cerca de 60 minutos para ser concluído.

Antes de começar este tutorial, verifique se você tem o seguinte:
  • Configure seu Conta da AWS

    Você precisará do seu AWS IoT console Conta da AWS e do console para concluir este tutorial.

    A conta que você usa para este tutorial funciona melhor quando inclui pelo menos as seguintes políticas gerenciadas da AWS :

    Importante

    As políticas do IAM usadas neste tutorial são mais permissivas do que você deveria seguir em uma implementação de produção. Em um ambiente de produção, certifique-se de que as políticas de sua conta e recursos concedam somente as permissões necessárias.

    Ao criar políticas do IAM para produção, determine qual acesso os usuários e perfis precisam e, em seguida, crie políticas que permitam que eles executem apenas essas tarefas.

    Para obter mais informações, consulte Práticas recomendadas de segurança no IAM.

  • Instalou o AWS CLI

    Para obter informações sobre como instalar o AWS CLI, consulte Instalando a AWS CLI. Este tutorial requer uma AWS CLI versão aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/x86_64 ou posterior.

  • Ferramentas do OpenSSL

    Os exemplos neste tutorial usam o LibreSSL 2.6.5. Você também pode usar as ferramentas OpenSSL v1.1.1i para este tutorial.

  • Revisou a visão geral do AWS Lambda

    Se você nunca usou AWS Lambda antes, revise AWS Lambdae Comece a usar o Lambda para aprender seus termos e conceitos.

  • Consultar como criar solicitações no Postman

    Para obter mais informações, consulte Solicitações de criação.

  • Remover autorizadores personalizados do tutorial anterior

    Você só Conta da AWS pode ter um número limitado de autorizadores personalizados configurados ao mesmo tempo. Para ver informações sobre como remover um autorizador personalizado, consulte Etapa 8: Limpeza.

Etapa 1: criar uma função do Lambda para seu autorizador personalizado

A autenticação personalizada AWS IoT Core usa recursos do autorizador que você cria para autenticar e autorizar clientes. A função que você criará nesta seção autentica e autoriza os clientes à medida que eles se conectam AWS IoT Core e AWS IoT acessam os recursos.

A função do Lambda faz o seguinte:

  • Se uma solicitação vier do test-invoke-authorizer, ela retornará uma política do IAM com uma ação Deny.

  • Se uma solicitação vier do Postman usando HTTP e o actionToken parâmetro tiver um valor deallow, ela retornará uma política do IAM com uma Allow ação. Caso contrário, ele retornará uma política do IAM com uma ação Deny.

Para criar uma função do Lambda para seu autorizador personalizado
  1. No console do Lambda, abra Funções.

  2. Escolha a opção Criar função.

  3. Confirme se Criar do zero está selecionado.

  4. Em Basic information:

    1. Em Nome do perfil, insira custom-auth-function.

    2. Em Runtime, confirme Node.js 18.x

  5. Escolha a opção Criar função.

    O Lambda cria uma função Node.js e uma função de execução que concede à função permissão para fazer upload de logs. A função Lambda assume a função de execução quando você invoca sua função e usa a função de execução para criar credenciais para o AWS SDK e ler dados de fontes de eventos.

  6. Para ver o código e a configuração da função no AWS Cloud9editor, escolha custom-auth-functionna janela do designer e escolha index.js no painel de navegação do editor.

    Para linguagens de script, como o Node.js, o Lambda inclui uma função básica que retorna uma resposta de sucesso. Você pode usar o editor do AWS Cloud9 para editar sua função, desde que seu código-fonte não exceda 3 MB.

  7. Substitua o código index.js no editor pelo código a seguir:

    // 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. Escolha Implantar.

  9. Depois que Alterações implantadas aparecer acima do editor:

    1. Role até a seção Visão geral da função acima do editor.

    2. Copie o ARN da função e salve-o para usar posteriormente neste tutorial.

  10. Teste a função do .

    1. Selecione a guia Testar.

    2. Usando as configurações de teste padrão, escolha Invocar.

    3. Se o teste for concluído com êxito, nos Resultados da execução, abra a visualização Detalhes. Você deve ver o documento de política que a função retornou.

      Se o teste falhou ou você não vê um documento de política, analise o código para encontrar e corrigir os erros.

Etapa 2: criar um par de chaves pública e privada do autorizador privado

Seu autorizador personalizado requer uma chave pública e privada para autenticá-lo. Os comandos nesta seção usam ferramentas OpenSSL para criar esse par de chaves.

Parar criar o par de chaves pública e privada do autorizador privado
  1. Crie o arquivo da chave privada.

    openssl genrsa -out private-key.pem 4096
  2. Verifique o arquivo da chave privada criado.

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

    Se o comando não exibir nenhum erro, o arquivo de chave privada é válido.

  3. Crie o arquivo da chave pública.

    openssl rsa -in private-key.pem -pubout -out public-key.pem
  4. Verifique o arquivo da chave pública.

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

    Se o comando não exibir nenhum erro, o arquivo de chave pública é válido.

Etapa 3: criar um recurso de autorização personalizado e sua autorização

O autorizador AWS IoT personalizado é o recurso que une todos os elementos criados nas etapas anteriores. Nesta seção, você criará um recurso de autorizador personalizado e concederá a ele permissão para executar a função do Lambda criada anteriormente. Você pode criar um recurso de autorização personalizado usando o AWS IoT console AWS CLI, o ou a AWS API.

Para este tutorial, você só precisa criar um autorizador personalizado. Esta seção descreve como criar usando o AWS IoT console e o AWS CLI, para que você possa usar o método mais conveniente para você. Não há diferença entre os recursos de autorizador personalizado criados por nenhum dos métodos.

Crie um recurso de autorização personalizado

Escolha uma destas opções para criar seu recurso de autorizador personalizado
Para criar um autorizador personalizado (console)
  1. Abra a página do autorizador personalizado do AWS IoT console e escolha Criar autorizador.

  2. Em Criar autorizador:

    1. Em Nome do autorizador, insira my-new-authorizer.

    2. Em Status do autorizador, marque Ativo.

    3. Em Função do autorizador, escolha a função do Lambda criada anteriormente.

    4. Em Validação de token - opcional:

      1. Ative a Validação do token.

      2. Em Nome da chave do token, insira tokenKeyName.

      3. Escolha Adicionar chave.

      4. Em Nome da chave, insira FirstKey.

      5. Em Chave pública, insira o conteúdo do arquivo public-key.pem. Certifique-se de incluir as linhas do arquivo com -----BEGIN PUBLIC KEY----- e -----END PUBLIC KEY----- e não adicionar ou remover nenhum avanço de linha, retornos de carro ou outros caracteres do conteúdo do arquivo. A string inserida deve ser semelhante a este exemplo.

        -----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. Selecione Criar autorizador.

  4. Se o recurso do autorizador personalizado tiver sido criado, você verá a lista de autorizadores personalizados, onde deve aparecer o seu novo autorizador personalizado, e você poderá continuar na próxima seção para testá-lo.

    Se você vir um erro, analise-o, tente criar seu autorizador personalizado novamente e verifique as entradas. Observe que cada recurso de autorizador personalizado deve ter um nome exclusivo.

Para criar um autorizador personalizado (AWS CLI)
  1. Substitua seus valores por authorizer-function-arn e token-signing-public-keys e, em seguida, execute o seguinte comando:

    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-----"
    Em que:
    • O valor authorizer-function-arn é o nome do recurso da Amazon (ARN) da função do Lambda que você criou para o seu autorizador personalizado.

    • O valor token-signing-public-keys inclui o nome da chave, FirstKey e o conteúdo do arquivo public-key.pem. Certifique-se de incluir as linhas do arquivo com -----BEGIN PUBLIC KEY----- e -----END PUBLIC KEY----- e não adicionar ou remover nenhum avanço de linha, retornos de carro ou outros caracteres do conteúdo do arquivo.

      Nota: tome cuidado ao inserir a chave pública, pois qualquer alteração em seu valor a tornará inutilizável.

  2. Se o autorizador personalizado for criado, o comando retornará o nome e o ARN do novo recurso, como o seguinte.

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

    Salve o valor authorizerArn para uso na próxima etapa.

    Lembre-se de que cada recurso de autorizador personalizado deve ter um nome exclusivo.

Autorizar o recurso de autorizador personalizado

Nesta seção, você concederá permissão ao recurso de autorizador personalizado que acabou de criar para executar a função do Lambda. Para conceder a permissão, você pode usar o comando da CLI add-permission.

Conceda permissão para sua função Lambda usando o AWS CLI
  1. Depois de inserir os valores, digite o seguinte comando. Observe que o valor statement-id deve ser exclusivo. Substitua Id-1234 por outro valor se você já tiver executado esse tutorial antes ou se receber um erro ResourceConflictException.

    aws lambda add-permission \ --function-name "custom-auth-function" \ --principal "iot.amazonaws.com" \ --action "lambda:InvokeFunction" \ --statement-id "Id-1234" \ --source-arn authorizerArn
  2. Se o comando for executado com êxito, ele retornará uma declaração de permissão, como neste exemplo. Você pode continuar na próxima seção para testar o autorizador personalizado.

    { "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\"}}}" }

    Se o comando não for executado com êxito, ele retornará um erro, como neste exemplo. Será necessário verificar e corrigir o erro antes de continuar.

    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

Etapa 4: testar o autorizador ligando test-invoke-authorizer

Com todos os recursos definidos, nesta seção, você ligará test-invoke-authorizer da linha de comando para testar o passe de autorização.

Observe que, ao invocar o autorizador a partir da linha de comando, protocolData não está definido; portanto, o autorizador sempre retornará um documento DENY. No entanto, esse teste confirma que seu autorizador personalizado e a função do Lambda estão configurados corretamente, mesmo que não teste totalmente a função do Lambda.

Para testar seu autorizador personalizado e sua função Lambda usando o AWS CLI
  1. No diretório que contém o arquivo private-key.pem criado na etapa anterior, execute o seguinte comando.

    echo -n "tokenKeyValue" | openssl dgst -sha256 -sign private-key.pem | openssl base64 -A

    Esse comando cria uma string de assinatura para ser usada na próxima etapa. A string de assinatura é semelhante a esta:

    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=

    Copie essa string de assinatura para usá-la na próxima etapa. Tome cuidado para não incluir caracteres extras nem omitir nenhum.

  2. Nesse comando, substitua o valor token-signature pela string de assinatura da etapa anterior e execute esse comando para testar seu autorizador.

    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=

    Se o comando for bem-sucedido, ele retornará as informações geradas pela sua função autorizadora personalizada, como neste exemplo.

    { "isAuthenticated": true, "principalId": "principalId", "policyDocuments": [ "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"iot:*\",\"Effect\":\"Deny\",\"Resource\":\"arn:aws:iot:Region:57EXAMPLE833:*\"}]}" ], "refreshAfterInSeconds": 600, "disconnectAfterInSeconds": 3600 }

    Se o comando retornar um erro, analise-o e verifique novamente os comandos usados nesta seção.

Etapa 5: testar a publicação da mensagem MQTT usando o Postman

  1. Para obter o endpoint de dados do dispositivo a partir da linha de comando, chame describe-endpoint conforme mostrado aqui

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

    Salve esse endereço para uso como device_data_endpoint_address em uma etapa posterior.

  2. Abra uma nova janela do Postman e crie uma nova solicitação HTTP POST.

    1. No seu computador, abra o aplicativo Postman.

    2. No Postman, no menu Arquivo, escolha Novo….

    3. Na caixa de diálogo Novo, selecione Solicitação.

    4. Em Salvar solicitação,

      1. Em Nome da solicitação, insira Custom authorizer test request.

      2. Em Selecionar uma coleção ou pasta para salvar: escolha ou crie uma coleção na qual salvar essa solicitação.

      3. Escolha Salvar em collection_name.

  3. Crie a solicitação do POST para testar seu autorizador personalizado.

    1. No seletor do método de solicitação ao lado do campo URL, escolha POST.

    2. No campo URL, crie o URL para sua solicitação usando o seguinte URL com o device_data_endpoint_address do comando describe-endpoint em uma etapa anterior.

      https://device_data_endpoint_address:443/topics/test/cust-auth/topic?qos=0&actionToken=allow

      Observe que esse URL inclui o parâmetro de consulta actionToken=allow que fará com que a função do Lambda retorne um documento de política que permita acesso à AWS IoT. Depois de inserir o URL, os parâmetros de consulta também serão exibidos na guia Parâmetros do Postman.

    3. Na guia Autenticação, no campo Tipo, escolha Sem autenticação.

    4. Na guia Cabeçalhos:

      1. Se houver uma chave de host marcada, desmarque-a.

      2. Na parte inferior da lista de cabeçalhos, adicione estes novos cabeçalhos e confirme se estão marcados. Substitua o valor Host pelo seu device_data_endpoint_address e o valor x-amz-customauthorizer-signature pela string de assinatura usada com o comando test-invoke-authorize na seção anterior.

        Chave Valor
        x-amz-customauthorizer-name my-new-authorizer
        Host device_data_endpoint_address
        tokenKeyName tokenKeyValue
        x-amz-customauthorizer-signature dbwykzlb+fo+jms GdwoGr 8dYc2qb/jjr+rbcvmu9jl4khaa9dg+v+mmwu09ysa86+64y3gt4 9mnvb1wyxp+0bdzh8hmquauh3fwi3 ca4cWnULqnqb 7i2i +cPy0zRwT1jr9i+cPy0zRwt1jr9fwi3 BikGGP Qhhto357 9pp30uf4 a5k7qic01n4biyrtm90oyz94r4bdjshnig1 obvmgcefe09jgjjszehfgauaqiwxivgqj16bu1xkptgsitawhelkujito Exemplo k3ahkyky+d1 yhbq8mjhjitoExemplo k3ahkyky+d1 yhbq8mjhjhIto zj0kggbt29vqjcb8riLn/p5+VCvnisXwPPLyB5JKYS9UVG08REoy64 /r/F3VV8i 3 Aci6ca+ 3 IyLef QQF/YsUY02U5 +STo6k tOykpZqn fPjBv ZzbCvsluv MjEg DxWkjaeehb TegKs TrxypNmFsw JePgnu vTvdthKt AtizfUhvSul TtQp aXiUtcsp tsDuXf LzCw XkWn CkpNlkd0wu8gl3+kozxrthnq8geajd5iylx230iqcxo3osjpha7jdywm5o+KE 91i1mokdr5sj4jxixvnjtvsx1li49ialw4en1DAKC1A0S2U2UNM236 Exemplo de OtyH7H+ AWQF VKS1ZiuClAzWPrH/ORD WckTe BiogoKjidGP9GWhXIIK7 WPmK9O= flFeloZl HxRlXsPqi JplpiWfBg zWrGm
    5. Na guia Corpo:

      1. Na caixa de opção de formato de dados, escolha Bruto.

      2. Na lista de tipos de dados, escolha JavaScript.

      3. No campo de texto, insira esta carga de mensagem JSON para sua mensagem de teste:

        { "data_mode": "test", "vibration": 200, "temperature": 40 }
  4. Escolha Enviar para enviar a solicitação.

    Se a solicitação for concluída com êxito, ela retornará:

    { "message": "OK", "traceId": "ff35c33f-409a-ea90-b06f-fbEXAMPLE25c" }

    A resposta bem-sucedida indica que seu autorizador personalizado permitiu a conexão AWS IoT e que a mensagem de teste foi entregue ao broker in AWS IoT Core.

    Se ele retornar um erro, verifique a mensagem de erro, o device_data_endpoint_address, a string de assinatura e os outros valores do cabeçalho.

Mantenha essa solicitação no Postman para uso na próxima seção.

Etapa 6: visualizar mensagens no cliente de teste MQTT

Na etapa anterior, você enviou mensagens simuladas do dispositivo AWS IoT usando o Postman. A resposta bem-sucedida indicou que seu autorizador personalizado permitiu a conexão à AWS IoT e que a mensagem de teste foi entregue ao agente no AWS IoT Core. Nesta seção, você usará o cliente de teste MQTT no AWS IoT console para ver o conteúdo da mensagem da mesma forma que outros dispositivos e serviços.

Para ver as mensagens de teste autorizadas pelo seu autorizador personalizado
  1. No AWS IoT console, abra o cliente de teste MQTT.

  2. Na guia Assinar um tópico, em Filtro de tópicos, insira test/cust-auth/topic, que é o tópico da mensagem usado no exemplo do Postman da seção anterior.

  3. Escolha Assinar.

    Mantenha essa janela visível para a próxima etapa.

  4. No Postman, na solicitação criada na seção anterior, escolha Enviar.

    Analise a resposta para verificar se ela foi concluída com êxito. Caso contrário, solucione o erro conforme descrito na seção anterior.

  5. No cliente de teste do MQTT, deve ser possível ver uma nova entrada que mostra o tópico da mensagem e, se expandida, a carga da mensagem da solicitação enviada pelo Postman.

    Se você não vir suas mensagens no cliente de teste do MQTT, aqui estão alguns itens que você deve verificar:

    • Certifique-se de que sua solicitação do Postman tenha sido retornada com êxito. Se AWS IoT rejeitar a conexão e retornar um erro, a mensagem na solicitação não será passada para o agente de mensagens.

    • Verifique se o Conta da AWS e Região da AWS usado para abrir o AWS IoT console é o mesmo que você está usando no URL do Postman.

    • Verifique se você inseriu o tópico corretamente no cliente de teste do MQTT. O filtro do tópico diferencia letras maiúsculas de minúsculas. Em caso de dúvida, você também pode se inscrever no # tópico, que assina todas as mensagens MQTT que passam pelo agente de mensagens Conta da AWS e Região da AWS usadas para abrir o AWS IoT console.

Etapa 7: revisar os resultados e as próximas etapas

Neste tutorial:
  • Você criou uma função do Lambda para ser um manipulador de autorizador personalizado

  • Você criou um autorizador personalizado com a assinatura de token ativada

  • Você testou seu autorizador personalizado usando o comando test-invoke-authorizer

  • Você publicou um tópico do MQTT usando o Postman e validou a solicitação com seu autorizador personalizado

  • Você usou o cliente de teste MQTT para visualizar as mensagens enviadas do seu teste do Postman

Próximas etapas

Depois de enviar algumas mensagens do Postman para verificar se o autorizador personalizado está funcionando, experimente analisar como a alteração de diferentes aspectos deste tutorial afeta os resultados. Aqui estão alguns exemplos para você começar.

  • Altere a string da assinatura para que não seja mais válido ver como as tentativas de conexão não autorizadas são processadas. Você deve receber uma resposta de erro, como essa, e a mensagem não deve aparecer no cliente de teste do MQTT.

    { "message": "Forbidden", "traceId": "15969756-a4a4-917c-b47a-5433e25b1356" }
  • Para saber mais sobre como encontrar erros que possam ocorrer durante o desenvolvimento e o uso de AWS IoT regras, consulteMonitoramento AWS IoT.

Etapa 8: Limpeza

Se quiser repetir este tutorial, talvez seja necessário remover alguns dos autorizadores personalizados. Você Conta da AWS pode ter apenas um número limitado de autorizadores personalizados configurados ao mesmo tempo e você pode obter um LimitExceededException ao tentar adicionar um novo sem remover um autorizador personalizado existente.

Para remover um autorizador personalizado (console)
  1. Abra a página do autorizador personalizado do AWS IoT console e, na lista de autorizadores personalizados, encontre o autorizador personalizado a ser removido.

  2. Abra a página de detalhes do autorizador personalizado e, no menu Ações, escolha Editar.

  3. Desmarque a opção Ativar autorizador e, em seguida, selecione Atualizar.

    Não é possível excluir um autorizador personalizado enquanto ele estiver ativo.

  4. Na página de detalhes do autorizador personalizado, abra o menu Ações e selecione Excluir.

Para remover um autorizador personalizado (AWS CLI)
  1. Liste os autorizadores personalizados que você instalou e localize o nome do autorizador personalizado que deseja excluir.

    aws iot list-authorizers
  2. Defina o autorizador personalizado como inactive executando esse comando após substituir Custom_Auth_Name pelo authorizerName do autorizador personalizado a ser excluído.

    aws iot update-authorizer --status INACTIVE --authorizer-name Custom_Auth_Name
  3. Exclua o autorizador personalizado executando esse comando após substituir Custom_Auth_Name pelo authorizerName do autorizador personalizado a ser excluído.

    aws iot delete-authorizer --authorizer-name Custom_Auth_Name