Ir para o conteúdo

Como faço para enviar cabeçalhos de segurança personalizados por meio do API Gateway para integrações de proxy ou não proxy do Lambda?

4 minuto de leitura
0

Quero enviar cabeçalhos de segurança personalizados por meio do Amazon API Gateway para integrações de proxy ou não proxy com o AWS Lambda.

Resolução

Para adicionar cabeçalhos de segurança personalizados nas respostas do API Gateway, siga o método do seu tipo de integração.

Observação: a resolução a seguir se aplica somente às APIs REST do API Gateway. As APIs HTTP não oferecem suporte a mapeamentos de resposta de método ou de resposta de integração.

Integrações de proxy do Lambda

Em integrações de proxy do Lambda, o API Gateway envia a solicitação e a resposta entre o cliente e a função do Lambda integrada sem modificações. Para enviar cabeçalhos de segurança personalizados de uma API do API Gateway para uma função do Lambda, você deve modificar o código-fonte da função.

Conclua as etapas a seguir:

  1. Abra o console do API Gateway.

  2. No painel de navegação, escolha APIs e selecione sua API REST.

  3. Clique em Criar método.

  4. No painel Criar método, execute as seguintes ações:
    Em Tipo de método, selecione seu tipo de método.
    Em Tipo de integração, clique em Função do Lambda.
    Confirme se você ativou a integração de proxy do Lambda.
    Em Função do Lambda, selecione sua função do Lambda.
    Clique em Criar método.

  5. No painel Solicitação de integração, selecione sua função do Lambda.

  6. Em Origem do código, substitua o código da função pelo código Python a seguir ou pelo código Node.js no editor de código.
    Python 3.14 e versões posteriores:

    def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'headers': {
            "Strict-Transport-Security": "max-age=100000",
            "X-Frame-Options": "DENY",
            "X-Content-Type-Options": "nosniff",
            "Content-Security-Policy": "default-src 'self'"
         },
        'body': json.dumps("Hello from Lambda with security headers!")
    }

    Node.js 14 e versões posteriores:

    exports.handler = async (event) => {
        const response = {
            statusCode: 200,
            headers: {
                'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
                'Content-Security-Policy': "default-src 'self'",
                'X-Frame-Options': 'DENY',
                'X-Content-Type-Options': 'nosniff'
            },
            body: JSON.stringify('Hello from Lambda with security headers!')
        };
        return response;
    };
  7. Selecione Implantar.

Integrações não proxy

Para enviar cabeçalhos de segurança personalizados por meio de integrações não proxy ou personalizadas, como serviços da AWS e tipos de integração HTTP, crie um modelo de mapeamento ou resposta de método.

Crie um modelo de mapeamento

Conclua as etapas a seguir:

  1. Abra o console do API Gateway.

  2. No painel de navegação, escolha APIs e selecione sua API REST.

  3. No painel Criar método, insira o seu tipo de método e o tipo de integração e selecione Criar método.

  4. No painel Solicitação de integração, selecione Editar.

  5. Expanda Modelos de mapeamento e selecione Adicionar modelo de mapeamento.

  6. Em Tipo de conteúdo, insira seu tipo de conteúdo. Por exemplo, application/json.

  7. No editor Corpo do modelo, insira o seguinte modelo de mapeamento:

    #set($headersToReturn = {  
      "Strict-Transport-Security": "max-age=31536000; includeSubDomains"  
    })#foreach($header in $headersToReturn.keySet())  #set($context.responseOverride.header[$header] = $headersToReturn[$header])#end
  8. Escolha Salvar.

  9. Escolha Implantar API.

Crie uma resposta de método

Conclua as etapas a seguir:

  1. Abra o console do API Gateway.
  2. No painel de navegação, escolha APIs e depois escolha sua API REST.
  3. No painel Resposta de método, selecione Editar.
  4. Em Nome do cabeçalho, clique em Adicionar cabeçalho.
  5. Insira o nome do cabeçalho personalizado que você deseja retornar, por exemplo, Strict-Transport-Security.
  6. Clique em Adicionar cabeçalho para adicionar outro cabeçalho que você deseja retornar, por exemplo, Content-Security-Policy.
  7. Escolha Salvar.
  8. No painel Solicitação de integração, selecione Editar.
  9. Em Mapeamentos de cabeçalho, insira os valores de mapeamento para seus cabeçalhos, por exemplo, max-age=100000 e self.
  10. Clique em Salvar e, em seguida, em Implantar API.

Teste sua configuração

Para confirmar se os cabeçalhos de segurança personalizados estão incluídos na resposta, execute o seguinte comando curl para invocar sua API REST:

curl -v https://your-api-id.execute-api.your-region.amazonaws.com/your-stage-name

Observação: substitua your-api-id pela sua API REST, your-region pela sua região da AWS e your-stage-name pelo nome do seu estágio.

Informações relacionadas

Como faço para passar cabeçalhos personalizados por meio do API Gateway para uma função do Lambda com integração personalizada do Lambda (sem proxy)?

Transformações de modelo de mapeamento para APIs REST no API Gateway

Como faço para resolver erros HTTP 502 das APIs REST do API Gateway com integração de proxy do Lambda?

Tutorial: Crie uma API REST com uma integração de não proxy do Lambda

Sem comentários

Conteúdo relevante