Proteger o tráfego de um serviço com o console do Google Cloud

Nesta página, mostramos como implantar uma API no gateway de API para proteger o tráfego em um serviço de back-end.

Siga as etapas para implantar uma nova API e acessar um serviço de back-end no Cloud Run functions usando o console do Google Cloud. Neste guia de início rápido, também descrevemos como usar uma chave de API para proteger o back-end contra acessos não autorizados.

Antes de começar

  1. No console do Google Cloud, acesse a página API Gateway.

    Acessar o API Gateway

  2. A API Gateway requer a ativação dos seguintes serviços do Google:

    Nome Nome
    apigateway.googleapis.com API Gateway
    servicemanagement.googleapis.com Service Management API
    servicecontrol.googleapis.com API Service Control

    Caso ainda não tenha ativado esses serviços para o projeto selecionado, você receberá uma solicitação para fazer isso.

  3. Confirme se o faturamento está ativado no projeto.

    Saiba como ativar o faturamento

Como implantar um back-end de API

O gateway de API fica na frente de um serviço de back-end implantado e processa todas as solicitações recebidas. Neste guia de início rápido, o API Gateway encaminha as chamadas recebidas para um back-end de função do Cloud Run chamado helloGET, que contém a função mostrada da seguinte maneira:

/**
 * HTTP Cloud Function.
 * This function is exported by index.js, and is executed when
 * you make an HTTP request to the deployed function's endpoint.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */

exports.helloGET = (req, res) => {
  res.send('Hello World!');
};

Siga as etapas no Guia de início rápido: como usar a Google Cloud CLI para fazer o download do código de amostra das funções do Cloud Run e implantar o serviço de back-end da função do Cloud Run.

Como criar uma definição de API

A API Gateway usa uma definição de API para rotear chamadas para o serviço de back-end. É possível usar uma especificação OpenAPI que contenha anotações especializadas para definir o comportamento escolhido do gateway de API. A especificação OpenAPI para este guia de início rápido contém instruções de roteamento para o back-end da função do Cloud Run:

# openapi2-functions.yaml
swagger: '2.0'
info:
  title: API_ID optional-string
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /hello:
    get:
      summary: Greet a user
      operationId: hello
      x-google-backend:
        address: https://us-central1-PROJECT_ID.cloudfunctions.net/helloGET
      responses:
        '200':
          description: A successful response
          schema:
            type: string

Para usar a especificação OpenAPI mostrada no exemplo anterior para definir sua API:

  1. Na linha de comando, crie um novo arquivo chamado openapi2-functions.yaml.

  2. Copie e cole o conteúdo da especificação OpenAPI mostrada no exemplo anterior no arquivo recém-criado.

  3. Edite o arquivo da seguinte forma:

    1. No campo title, substitua API_ID pelo nome da API (que será criado na próxima etapa) e optional-string por uma breve descrição da sua escolha. O valor desse campo é usado ao produzir chaves de API que concedem acesso a essa API. Consulte os requisitos de ID da API para ver as diretrizes de nomenclatura.
    2. No campo address, substitua PROJECT_ID pelo nome do seu projeto do Google Cloud.

Como criar um gateway

Agora você já pode criar e implantar um gateway no gateway de API.

  1. Abra a página "API Gateway" no console do Google Cloud.

    Acessar o API Gateway

  2. Clique em Criar gateway.

  3. Na seção API:

    1. É possível criar uma nova API ou selecionar uma atual na lista suspensa Selecionar uma API. Para este tutorial, selecione Criar uma nova API.
    2. Insira o Nome de exibição da sua API.
    3. Digite o ID da API.
    4. (Opcional) Adicione rótulos à API usando um formato de chave-valor. Para adicionar mais de um rótulo, clique em Adicionar rótulo e insira valores adicionais.
  4. Na seção Configuração da API:

    1. É possível criar uma nova configuração de API ou selecionar uma existente na lista suspensa Selecionar uma configuração. Para este tutorial, selecione Criar uma nova configuração de API.
    2. Use o navegador de arquivos para fazer upload do openapi2-functions.yaml usado para definir a API.
    3. Insira um nome de exibição para sua configuração de API.
    4. Selecione uma conta de serviço na lista suspensa. A conta de serviço selecionada será usada como identidade para o gateway de API.

    5. (Opcional) Adicione rótulos à configuração da API usando um formato de chave-valor. Para adicionar mais de um rótulo, clique em Adicionar rótulo e insira valores adicionais.

  5. Na seção Detalhes do gateway:

    1. Insira o nome de exibição do stream. O URL do gateway é gerado automaticamente.
    2. Selecione o local do gateway no menu suspenso.
    3. (Opcional) Adicione rótulos ao gateway usando um formato de chave-valor. Para adicionar mais de um rótulo, clique em Adicionar rótulo e insira valores adicionais.
  6. Clique em Criar gateway.

Isso implanta a configuração da API em um gateway recém-criado. A implantação de uma configuração de API em um gateway define um URL externo que os clientes da API podem usar para acessar sua API.

Isso pode levar vários minutos. Para verificar o status do processo de criação e implantação, clique no ícone Notificação na barra de navegação principal para exibir uma notificação de status, conforme mostrado na imagem a seguir:

Painel de notificações de status

Após a conclusão, você poderá ver os detalhes sobre o gateway na página de destino dos gateways.

Acessar o API Gateway

Anote o URL do gateway. Isso é usado para testar sua implantação na próxima etapa.

Como testar sua implantação de API

Agora é possível enviar solicitações para a API usando o URL gerado durante a implantação do gateway.

No navegador, digite o seguinte URL:

  • GATEWAY_URL especifica o URL do gateway implantado.
  • hello é o caminho especificado nas configurações da API;
https://GATEWAY_URL/hello

Exemplo:

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

A mensagem Hello World! será exibida no navegador.

Você criou e implantou um gateway de API.

Como proteger o acesso usando uma chave de API

Para proteger o acesso ao back-end da API, gere uma chave associada ao seu projeto e conceda acesso para chamar a API. Consulte Como restringir o acesso à API com chaves de API para mais informações.

Se você ainda não tiver uma chave de API associada ao projeto do Google Cloud que está usando neste guia de início rápido, adicione uma seguindo as etapas em Criar uma chave de API.

Para proteger o acesso ao gateway usando uma chave de API:

  1. Ative o suporte à chave de API para seu serviço:
    1. No console do Google Cloud, acesse APIs e serviços > Biblioteca.
    2. Na barra de pesquisa, digite o nome do serviço gerenciado da API que você acabou de criar. Esse valor pode ser encontrado na coluna Serviço gerenciado da API na página de destino das APIs. Exemplo:
      my-api-123abc456def1.apigateway.my-project.cloud.goog
    3. Na página de destino do serviço, clique em Ativar
  2. Modifique a especificação OpenAPI usada para criar a configuração da API e inclua instruções para aplicar uma política de segurança de validação de chave de API a todo o tráfego. Adicione o tipo security e securityDefinitions, conforme mostrado:
        # openapi2-functions.yaml
        swagger: '2.0'
        info:
          title: API_ID optional-string
          description: Sample API on API Gateway with a Google Cloud Functions backend
          version: 1.0.0
        schemes:
          - https
        produces:
          - application/json
        paths:
          /hello:
            get:
              summary: Greet a user
              operationId: hello
              x-google-backend:
                address:https://us-central1.PROJECT_ID.cloudfunctions.net/helloGET
              security:
              - api_key: []
              responses:
                '200':
                  description: A successful response
                  schema:
                    type: string
        securityDefinitions:
          # This section configures basic authentication with an API key.
          api_key:
            type: "apiKey"
            name: "key"
            in: "query"
        
    O securityDefinition configura a API para exigir que uma chave de API seja passada como um parâmetro de consulta chamado key ao solicitar acesso a todos os caminhos definidos na especificação.
  3. Crie e implante uma nova configuração de API no gateway atual:
    1. Acesse a página de destino "Gateways".

      Acessar o API Gateway

    2. Selecione o gateway na lista para conferir os detalhes.
    3. Clique em Edit para abrir o painel de configuração do gateway.
    4. Na seção Configuração da API:
      1. Selecione Criar uma configuração de API no menu suspenso disponível.
      2. Faça upload da especificação OpenAPI modificada usando o navegador de arquivos.
      3. Insira o nome de exibição da sua nova configuração de API.
      4. Selecione uma conta de serviço na lista suspensa. A conta de serviço selecionada será usada como a identidade do API Gateway.
      5. (Opcional) Adicione rótulos à configuração da API usando um formato de chave-valor. Para adicionar mais de um rótulo, clique em Adicionar rótulo e insira valores adicionais.
    5. Clique em Atualizar.

Como testar sua chave de API

Depois de criar e implantar a API modificada, faça uma solicitação a ela.

No navegador, digite o seguinte URL:

  • GATEWAY_URL especifica o URL do gateway implantado.
  • hello é o caminho especificado nas configurações da API;
https://GATEWAY_URL/hello

Exemplo:

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

Isso deverá resultar no seguinte erro:

UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.

No navegador, digite o seguinte URL, em que:

https://GATEWAY_URL/hello?key=API_KEY

Agora você verá Hello World! no navegador.

Parabéns! Você protegeu seu back-end da API com um gateway de API. Agora você pode começar a integrar novos clientes de API gerando chaves de API adicionais.

Rastrear a atividade da API

  1. Confira os gráficos de atividades da API na página Gateway de API no Console do Google Cloud. Clique na sua API para conferir os gráficos de atividade na página Visão geral. Talvez leve alguns instantes para a solicitação aparecer nos gráficos.

  2. Verifique os registros de solicitações da API na página "Visualizador de registros". O link para a página do Explorador de registros pode ser encontrado na página do Gateway de API no console do Google Cloud.

    Acessar o API Gateway

    Na página "API Gateway", faça o seguinte

    1. Selecione a API a ser visualizada.
    2. Clique na guia Details.
    3. Clique no link em Registros.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste guia de início rápido, faça o seguinte:

Se preferir, exclua o projeto do Google Cloud usado neste tutorial.

A seguir