Configurar coletores de registros com contas de serviço gerenciado pelo usuário

Nesta página, descrevemos como rotear registros criando coletores configurados com contas de serviço gerenciado pelo usuário. Por padrão, o Logging usa uma conta de serviço do Logging para todos os coletores em um recurso. No entanto, se os coletores de registro estiverem em projetos diferentes, será possível criar e gerenciar sua própria conta de serviço gerenciado pelo usuário, o que permite gerenciar centralmente as permissões do Identity and Access Management no projeto que contém a conta de serviço gerenciada pelo usuário.

Só é possível criar um coletor que usa uma conta de serviço gerenciado pelo usuário quando o destino do coletor for umbucket de registroso ou um projeto do Google Cloud. O exemplo neste documento ilustra como configurar um coletor que usa uma conta de serviço gerenciado pelo usuário em que o destino é um bucket de registros.

Antes de começar

  1. Para usar os exemplos de linha de comando neste guia, instale e configure a Google Cloud CLI.

  2. Verifique se você tem uma conta serviço gerenciado pelo usuário. Para informações sobre como criar uma conta de serviço, consulte Criar contas de serviço.

  3. Para usar os comandos neste documento, identifique os seguintes valores:

    • DESTINATION_PROJECT_ID: ID do projeto que contém o bucket de registros.

    • CUSTOM_SA_PROJECT_ID: o ID do projeto que contém sua conta de serviço gerenciado pelo usuário.

    • SINK_PROJECT_ID: ID do projeto em que você planeja criar o coletor de registros.

    • CUSTOM_SA: sua conta de serviço gerenciado pelo usuário. Saiba mais sobre como criar contas de serviço em Criar contas de serviço.

      O formato de uma conta serviço gerenciado pelo usuário é semelhante ao seguinte:

      SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    • LOGGING_SA: a conta de serviço padrão do Logging. Para receber esse e-mail, execute o seguinte comando:

         gcloud logging settings describe --project=SINK_PROJECT_ID
      

      A saída inclui as seguintes informações sobre sua conta de serviço:

      loggingServiceAccountId: serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com

    • BUCKET_NAME: o nome do bucket de registros.

      O caminho de destino do coletor para um bucket de registros é semelhante ao seguinte:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME

  4. No projeto que contém a conta de serviço gerenciado pelo usuário, verifique se a restrição booleana da política da organização iam.disableCrossProjectServiceAccountUsage não está aplicada. Por padrão, essa restrição é aplicada. Para desativar essa restrição para anexar uma conta de serviço a um recurso em outro projeto, execute o seguinte comando:

      gcloud resource-manager org-policies disable-enforce \
      iam.disableCrossProjectServiceAccountUsage \
      --project=CUSTOM_SA_PROJECT_ID
    

    Para mais informações sobre como ativar contas de serviço em projetos, consulte Ativar contas de serviço para serem anexadas em projetos.

Conceder papéis do IAM

Nesta seção, descrevemos os pré-requisitos para criar um coletor que usa uma conta serviço gerenciado pelo usuário.

No projeto que contém o bucket de registros que é o destino dos coletores de registros, faça o seguinte:

  1. Conceda o papel Gravador de bucket de registros (roles/logging.bucketWriter) à conta de serviço gerenciado pelo usuário. Com esse papel, a conta serviço gerenciado pelo usuário pode gravar registros no bucket de registros:

     gcloud projects add-iam-policy-binding DESTINATION_PROJECT_ID \
     --member="serviceAccount:CUSTOM_SA" \
     --role="roles/logging.bucketWriter"
    

No projeto do Google Cloud em que você quer criar coletores de registros que usam a conta de serviço gerenciado pelo usuário, faça o seguinte:

  1. Conceda o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) à conta de serviço do Cloud Logging na conta de serviço gerenciado pelo usuário:

      gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
      --project=CUSTOM_SA_PROJECT_ID \
      --member="serviceAccount:LOGGING_SA" \
      --role="roles/iam.serviceAccountTokenCreator"
    

    O comando anterior permite que a conta de serviço do Logging represente a conta de serviço gerenciado pelo usuário usando o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator).

    A representação da conta de serviço envolve dois principais: a conta de serviço que não tem permissões para acessar um recurso e a conta de serviço com privilégio que tem as permissões para acessar um recurso. Nesse caso, a conta de serviço gerenciado pelo usuário é a que tem privilégios, porque tem a capacidade de gravar registros em um bucket de registros no projeto de destino. A conta de serviço do Logging tem privilégios para rotear registros.

    Para mais informações sobre o papel Criador de token da conta de serviço, consulte Papéis para gerenciar e representar contas de serviço: papel de criador de token da conta de serviço.

    Para mais informações, consulte Sobre a representação de uma conta de serviço de serviço.

  2. Conceda o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) ao principal que está criando os coletores de registros. Especificamente, um principal precisa da permissão iam.serviceAccounts.actAs na conta de serviço:

     gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
     --member 'user:user@example.com' \
     --role "roles/iam.serviceAccountUser"
    

    O comando anterior permite que um usuário execute operações como a conta de serviço gerenciada pelo usuário.

    Para mais informações sobre o papel de usuário da conta de serviço, consulte Papéis para gerenciar e representar contas de serviço: papel de usuário da conta de serviço.

Criar um coletor de registros que usa uma conta serviço gerenciado pelo usuário

gcloud

Para criar um coletor com uma conta serviço gerenciado pelo usuário, substitua as variáveis pelas suas próprias informações e execute o comando gcloud logging sinks create com a sinalização --custom-writer-identity:

    gcloud logging sinks create SINK_NAME logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
    --custom-writer-identity=serviceAccount:CUSTOM_SA \
    --project=SINK_PROJECT_ID

API

  1. Para criar um coletor de registros no projeto do Google Cloud, use projects.sinks.create na API Logging. No objeto LogSink, transmita o parâmetro customWriterIdentity e forneça os valores necessários no corpo da solicitação do método:

    • name: um identificador do coletor. Depois de criar o coletor, não será possível renomear o coletor, mas você poderá excluí-lo e criar um novo coletor.
    • destination: o bucket de registros para onde você quer que os registros sejam roteados. O caminho de destino tem o seguinte formato:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
      
  2. Chame projects.sinks.create para criar o coletor.

Para mais informações sobre como criar coletores usando a API Logging, consulte a documentação de referência do LogSink.

Verifique se o coletor está roteando registros

Nesta seção, você usa a CLI gcloud para gravar e ler uma entrada de registro para verificar se o coletor está roteando os registros corretamente.

Para verificar se o coletor está roteando os registros corretamente, faça o seguinte:

  1. Substitua as variáveis pelas suas próprias informações e grave um exemplo de entrada de registro usando o comando gcloud logging write:

    gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
    

    O comando anterior retorna a seguinte mensagem:

    Created log entry.

  2. Para ler a entrada de registro que você acabou de gravar, execute o seguinte comando:

    gcloud logging read 'textPayload="Test log entry"' \
    --bucket=BUCKET_NAME --location=LOCATION \
    --view=_AllLogs --project=SINK_PROJECT_ID
    

A seguir