Configure destinos de registo com contas de serviço geridas pelo utilizador

Esta página descreve como encaminhar entradas de registo criando destinos que são configurados com contas de serviço geridas pelo utilizador. Por predefinição, o Logging usa uma conta de serviço do Logging para todos os destinos num recurso. No entanto, se os seus destinos de registo estiverem em projetos diferentes, pode criar e gerir a sua própria conta de serviço gerida pelo utilizador, o que lhe permite gerir centralmente as autorizações de gestão de identidades e acessos a partir do projeto que contém a sua conta de serviço gerida pelo utilizador.

Só pode criar um destino que use uma conta de serviço gerida pelo utilizador quando o destino do destino for um contentor de registos ou um Google Cloud projeto. O exemplo neste documento ilustra como configurar um destino que usa uma conta de serviço gerida pelo utilizador em que o destino é um contentor de registos.

Antes de começar

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Certifique-se de que tem uma conta de serviço gerida pelo utilizador e, em seguida, defina as seguintes variáveis com os valores adequados para a sua conta de serviço gerida pelo utilizador:

    • CUSTOM_SA_PROJECT_ID: O ID do projeto que contém a sua conta de serviço gerida pelo utilizador.

    • CUSTOM_SA: o endereço de email da sua conta de serviço gerida pelo utilizador.

    Para ver informações sobre como criar uma conta de serviço, consulte o artigo Crie contas de serviço.

  3. Certifique-se de que tem um contentor de registos que possa servir como destino de um coletor de registos e, em seguida, defina as seguintes variáveis para valores adequados para o seu contentor de registos. Se necessário, crie um contentor de registos:

    • LOG_BUCKET_PROJECT_ID: O ID do projeto que contém o seu contentor de registos.

    • LOCATION: a localização do contentor de registos.

    • BUCKET_NAME: o nome do contentor de registos.

  4. Identifique o nome da conta de serviço de registo que existe no projeto no qual planeia criar o destino do registo e, em seguida, defina as seguintes variáveis com os respetivos valores:

    • SINK_PROJECT_ID: O ID do projeto onde planeia criar o coletor de registos.

    • LOGGING_SA: o endereço de email da conta de serviço de registo predefinida. Para obter este endereço, execute o seguinte comando:

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      Na resposta, a linha que começa com loggingServiceAccountId apresenta o endereço de email da sua conta de serviço.

  5. No projeto que contém a sua conta de serviço gerida pelo utilizador, certifique-se de que a restrição booleana da política da organização iam.disableCrossProjectServiceAccountUsage não é aplicada. Por predefinição, esta restrição é aplicada. Para desativar esta restrição para que possa anexar uma conta de serviço a um recurso noutro 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 vários projetos, consulte o artigo Ative a associação de contas de serviço em vários projetos.

  6. Conceda funções de IAM

    Esta secção descreve os pré-requisitos para criar um destino que use uma conta de serviço gerida pelo utilizador.

    Permitir que a conta de serviço gerida pelo utilizador escreva entradas de registo no destino do contentor

    Conceda à conta de serviço gerida pelo utilizador as autorizações necessárias para escrever entradas de registo no destino do coletor que vai criar num passo subsequente. O destino do coletor vai ser um contentor de registos armazenado no projeto com o nome LOG_BUCKET_PROJECT_ID.

    Para conceder as autorizações necessárias à conta de serviço gerida pelo utilizador, conceda-lhe a função de escritor do contentor de registos (roles/logging.bucketWriter) no projeto que contém o contentor de registos:

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

    Para mais informações sobre o comando anterior, consulte gcloud projects add-iam-policy-binding.

    Configure a simulação de contas de serviço

    Configure a conta de serviço do Cloud Logging predefinida, LOGGING_SA, para que possa roubar a identidade da conta de serviço gerida pelo utilizador, CUSTOM_SA. A conta de serviço do Cloud Logging predefinida existe no projeto no qual quer criar destinos de registo que usam a conta de serviço gerida pelo utilizador. Google Cloud

    Para configurar a personificação da conta de serviço, conceda a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) à conta de serviço do Cloud Logging na conta de serviço gerida pelo utilizador:

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

    A representação da conta de serviço envolve dois principais: a conta de serviço que não tem autorizações para aceder a um recurso e a conta de serviço com privilégios que tem as autorizações para aceder a um recurso. Neste caso, a conta de serviço gerida pelo utilizador é a conta com privilégios, porque tem a capacidade de escrever entradas de registo no destino do coletor, que é um contentor de registos no projeto denominado LOG_BUCKET_PROJECT_ID. A conta de serviço do Logging tem os privilégios para encaminhar entradas de registo.

    Para mais informações sobre a função criador de tokens de contas de serviço, consulte o artigo Função criador de tokens de contas de serviço.

    Para mais informações sobre a simulação da conta de serviço, consulte o artigo Acerca da simulação da conta de serviço.

    Permitir que o principal execute operações como a conta de serviço gerida pelo utilizador

    Conceda ao principal que vai criar o coletor as autorizações de que precisa para executar operações como a conta de serviço gerida pelo utilizador.

    Para conceder as autorizações necessárias, atribua ao principal a função de utilizador da conta de serviço (roles/iam.serviceAccountUser) no projeto Google Cloud que armazena a conta de serviço gerida pelo utilizador CUSTOM_SA_PROJECT_ID.

    Antes de executar o seguinte comando, faça as seguintes substituições:

    • PRINCIPAL: um identificador do principal ao qual quer conceder a função. Normalmente, os identificadores principais têm o seguinte formato: PRINCIPAL-TYPE:ID. Por exemplo, user:my-user@example.com. Para ver uma lista completa dos formatos que PRINCIPAL pode ter, consulte Identificadores principais.

    Execute o comando gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
    --project=CUSTOM_SA_PROJECT_ID \
    --member='PRINCIPAL' \
    --role='roles/iam.serviceAccountUser'
    

    Se usar funções personalizadas, o principal precisa da autorização iam.serviceAccounts.actAs.

    Para mais informações acerca da função Utilizador da conta de serviço, consulte o artigo Função Utilizador da conta de serviço.

    Crie um destino de registo que use uma conta de serviço gerida pelo utilizador

    Para criar um destino com uma conta de serviço gerida pelo utilizador, execute o comando gcloud logging sinks create e inclua a opção --custom-writer-identity.

    Antes de executar o seguinte comando, faça as seguintes substituições:

    • SINK_NAME: o nome do sink de registo.

    Execute o comando gcloud logging sinks create:

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

    Verifique se o coletor está a encaminhar entradas de registo

    Nesta secção, usa a CLI gcloud para escrever e ler uma entrada de registo para verificar se o seu destino está a encaminhar as entradas de registo corretamente.

    Para verificar se o coletor está a encaminhar as entradas do registo corretamente, faça o seguinte:

    1. Execute o comando gcloud logging write:

      Antes de executar o seguinte comando, faça as seguintes substituições:

      • LOG_NAME: o nome do registo. Por exemplo, pode definir este campo como mylog.

      Execute o comando gcloud logging write:

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

      O comando anterior devolve a seguinte mensagem: Created log entry.

    2. Para ler a entrada de registo que acabou de escrever, execute o seguinte comando:

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

    O que se segue?