Configure o acesso ao nível do campo

Este documento descreve os controlos de acesso ao nível do campo e como os definir num contentor do Logging. Os controlos de acesso ao nível do campo permitem-lhe ocultar campos LogEntryindividuais dos utilizadores de um Google Cloud projeto, o que lhe dá uma forma mais detalhada de controlar os dados dos registos aos quais um utilizador pode aceder.

Vista geral

O registo usa o controlo de acesso ao nível do campo para ocultar os campos LogEntry dos utilizadores de um projeto Google Cloud que não têm as autorizações necessárias para ver os campos. Em comparação com as visualizações de registos, que ocultam todo o LogEntry, os controlos de acesso ao nível do campo ocultam campos individuais do LogEntry. Pode definir controlos de acesso ao nível do campo e autorizações de visualização de registos num contentor de registos. Restringe e gere o controlo de acesso ao nível do campo através da CLI do Google Cloud.

Para restringir o acesso a campos de registo, faça o seguinte:

  • Configure os campos LogEntryrestritos num contentor de registos.
  • Conceda apenas aos utilizadores que precisam de ver os campos restritos a função de IAM logging.fieldAccessor para esse caminho de campo ou uma função que contenha autorizações semelhantes.

O registo verifica as autorizações do IAM quando um utilizador consulta registos de um contentor que tem campos restritos definidos. Todos os campos com ACLs configuradas são recusados aos utilizadores sem o logging.FieldAccessor correspondente para esse campo, o que significa que:

  • O utilizador recebe um erro de autorização recusada se tentar consultar diretamente os campos restritos.
  • As pesquisas globais não têm em conta o conteúdo dos campos recusados.
  • Todos os resultados LogEntry devolvidos omitem os campos restritos.

Campos restritos

Pode restringir o acesso ao campo jsonPayload, o que também restringe o acesso aos respetivos caminhos aninhados.

Também pode restringir o acesso aos campos finais do seguinte:

Por exemplo, pode restringir o acesso ao campo labels.check_id.

Antes de começar

Antes de começar a configurar os controlos de acesso ao nível do campo, faça o seguinte:

  • Verifique se o gcloud --version indica a versão 362.0.0 ou posterior.

    Para instalar a versão mais recente da CLI gcloud, execute o comando gcloud components update:

    gcloud components update
    

    Para ver instruções sobre como instalar a CLI gcloud, consulte o artigo Instalar a CLI Google Cloud.

  • Execute o comando gcloud config set para configurar o projetoGoogle Cloud predefinido para os seus comandos da CLI gcloud. Antes de executar o comando, faça a seguinte substituição:

    • PROJECT_ID: o identificador do projeto.

    Comando:

    gcloud config set project PROJECT_ID
    
  • Verifique se tem uma das seguintes funções de IAM para o Google Cloud projeto que contém o contentor:

    Para ver informações sobre a definição de funções de IAM, consulte o guia de controlo de acesso do Logging.

Defina o controlo de acesso ao nível do campo

As restrições ao nível do campo são configuradas ao nível do contentor de registos e podem ser aplicadas a um contentor de registos existente ou quando cria um novo contentor de registos.

Restrinja campos num novo contentor

Para restringir os campos de registo ao criar um novo contentor de registos, execute o comando gcloud logging buckets create. Antes de executar o comando, faça as seguintes substituições:

  • BUCKET_ID: o nome ou o ID do contentor de registos.
  • LOCATION: a localização do contentor de registos.
  • DESCRIPTION: a descrição do contentor de registos.
  • RESTRICTED_FIELDS: a lista separada por vírgulas dos campos que estão a ser restritos.

Comando:

gcloud logging buckets create BUCKET_ID --location=LOCATION  \
--description=DESCRIPTION --restricted-fields=RESTRICTED_FIELDS

Exemplo de comando:

gcloud logging buckets create new-log-bucket --location=global \
--description="New bucket with restricted fields" --restricted-fields="jsonPayload.data.ssn,httpRequest.status"

Restrinja campos num contentor existente

Para restringir campos de registo num contentor de registos existente, execute o comando gcloud logging buckets update:

gcloud logging buckets update BUCKET_ID --location=LOCATION  \
--restricted-fields=RESTRICTED_FIELDS

Exemplo de comando:

gcloud logging buckets update my-existing-log-bucket --location=global \
--restricted-fields="jsonPayload.data.ssn,httpRequest.status"

Se quiser adicionar campos às restrições existentes, o comando de atualização tem de voltar a apresentar a lista completa de campos restritos. Com base no exemplo anterior, se quiser restringir o acesso ao campo jsonPayload.data.entryDate, além dos campos já restritos jsonPayload.data.ssn e httpRequest.status, o comando teria o seguinte aspeto:

gcloud logging buckets update my-existing-log-bucket --location=global \
--restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"

Se não voltar a listar os campos já restritos e apenas listar jsonPayload.data.entryDate, jsonPayload.data.ssn e httpRequest.status seriam removidos como campos restritos.

Gerir o acesso a campos restritos

Por predefinição, o Logging oculta todos os campos restritos dos utilizadores que não têm a função logging.fieldAccessor ou uma função com autorizações semelhantes. O registo expõe os campos restritos aos utilizadores que têm a autorização para ver registos no contentor e a função logging.fieldAccessor.

Pode modificar o comportamento predefinido para limitar subconjuntos de campos restritos a utilizadores específicos.

Conceder autorização em todos os campos restritos

Para conceder aos utilizadores autorização para todos os campos restritos, atribua-lhes a função logging.fieldAccessor ou uma função personalizada que contenha a função logging.fieldAccessor.

Consola

Para atribuir a função logging.fieldAccessor aos utilizadores através da consola Google Cloud , conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página IAM:

    Aceda ao IAM

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é IAM e administração.

  2. Selecione o principal e clique em Editar.
  3. No painel Editar autorizações, selecione Acesso ao campo de registo para a função.
  4. Selecione Adicionar condição do IAM.
  5. Introduza um título e uma descrição nos campos Título e Descrição.
  6. Selecione o separador Editor de condições e introduza a seguinte expressão:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
    
  7. Selecione Guardar.

As autorizações da gestão de identidade e de acesso são atualizadas imediatamente.

gcloud

Para atribuir aos utilizadores a função logging.fieldAccessor através da CLI gcloud, conclua os seguintes passos:

  1. Para guardar as informações da política de IAM atual num ficheiro, execute o comando gcloud projects get-iam-policy e guarde o resultado num ficheiro:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    O comando anterior guarda as informações num ficheiro denominado policy.json.

  2. Atualize o ficheiro policy.json com encadernações adicionais.

    No exemplo seguinte, o campo expression apenas apresenta um contentor de registos. Por conseguinte, todos os campos das entradas de registo armazenadas nesse contentor de registos são acessíveis aos principais indicados na secção members.

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'",
            "title": "TITLE"
          },
          "members": [
            PRINCIPAL
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    No exemplo anterior, os campos têm os seguintes significados:

    • 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. No campo members do ficheiro policy.json, use o formato "PRINCIPAL-TYPE":"ID".
    • DESCRIPTION: uma descrição da condição.
    • TITLE: um título para a condição.
  3. Para aplicar o ficheiro policy.json atualizado, execute o comando gcloud projects set-iam-policy:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

As autorizações da gestão de identidade e de acesso são atualizadas imediatamente.

Conceder autorizações num subconjunto de campos restritos

Para conceder autorizações aos utilizadores num subconjunto dos campos restritos, defina os campos aos quais os utilizadores podem aceder quando lhes concede a função logging.fieldAccessor ou quando define uma função personalizada que contém a função logging.fieldAccessor.

Tenha em conta o seguinte:

  • A ortografia e a utilização de letras maiúsculas do campo restrito, tal como aparecem na configuração do contentor, têm de corresponder à ortografia e à utilização de letras maiúsculas do campo restrito no nome da autorização de IAM. Por exemplo, se definir o campo restrito como jsonPayload, tem de conceder autorização no campo jsonPayload e não no campo Jsonpayload.

  • Os caminhos dos campos, incluindo strings de chaves de mapas, são sensíveis a maiúsculas e minúsculas, mas os caminhos dos campos protobuf podem ser expressos como snake case não sensível a maiúsculas e minúsculas (snake_case) ou camel case sensível a maiúsculas e minúsculas (camelCase).

    Por exemplo, logName é um campo no protobuf LogEntry; log_name refere-se ao mesmo campo. O campo jsonPayload.fooBar refere-se a um campo diferente de jsonPayload.foo_bar, uma vez que os nomes dos campos abaixo de jsonPayload são chaves de strings de mapas. No entanto, refere-se a json_payload.fooBar.

    Mesmo que os caminhos dos campos sejam referências válidas ao mesmo campo, tem de corresponder à ortografia, às letras maiúsculas e minúsculas quando configura restrições e autorizações da IAM. Por exemplo, se especificar uma restrição em jsonPayload.foo, tem de configurar as autorizações do IAM para jsonPayload.foo e não para json_payload.foo.

Para mais informações sobre os tipos de campos de registo válidos, consulte o artigo Linguagem de consulta de registo: valores e conversões.

Consola

Para conceder aos utilizadores acesso a um campo restrito através da Google Cloud consola, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página IAM:

    Aceda ao IAM

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é IAM e administração.

  2. Selecione o principal e clique em Editar.
  3. No painel Editar autorizações, selecione Acesso ao campo de registo para a função.
  4. Selecione Adicionar condição do IAM.
  5. Introduza um título e uma descrição nos campos Título e Descrição.
  6. Selecione o separador Editor de condições e introduza a seguinte expressão:

    resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
    
  7. Selecione Guardar.

As autorizações da gestão de identidade e de acesso são atualizadas imediatamente.

gcloud

Para conceder aos utilizadores acesso a um campo restrito através da CLI gcloud, conclua os seguintes passos:

  1. Para guardar as informações do IAM num ficheiro, execute o comando gcloud projects get-iam-policy e guarde o resultado num ficheiro:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    O comando anterior guarda as informações num ficheiro denominado policy.json.

  2. Atualize o ficheiro policy.json com encadernações adicionais.

    No exemplo seguinte, o campo expression lista campos específicos. Por conseguinte, apenas os principais indicados na secção members têm acesso a esses campos das entradas de registo armazenadas no contentor de registos especificado.

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_ID/fields/{field}\") == 'RESTRICTED_FIELDS'",
            "title": "TITLE"
          },
          "members": [
            PRINCIPAL
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    No exemplo anterior, os campos têm os seguintes significados:

    • 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. No campo members do ficheiro policy.json, use o formato "PRINCIPAL-TYPE":"ID".
    • DESCRIPTION: uma descrição da condição.
    • TITLE: um título para a condição.
  3. Para aplicar o ficheiro policy.json atualizado, execute o comando gcloud projects set-iam-policy:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

As autorizações da gestão de identidade e de acesso são atualizadas imediatamente.

Exemplo

Suponha que um contentor de registos restringe o campo jsonPayload, uma etiqueta específica e um subcampo httpRequest específico. Ocorre o seguinte quando um utilizador está a examinar as respetivas entradas de registo

  • Para os utilizadores com autorização para aceder a todos os campos restritos, todos os campos numa entrada de registo são visíveis.

  • Para os utilizadores com autorização para aceder apenas ao campo jsonPayload LogEntry restrito, todos os campos sem restrições estão visíveis e o campo jsonPayload está visível.

  • Para os utilizadores sem autorização para ver nenhum dos campos restritos, apenas os campos não restritos são visíveis.

Se um utilizador escrever uma consulta com uma restrição global, as entradas de registo que contêm um campo restrito são omitidas da resposta.

Campos restritos da ficha

Para listar os campos restritos num contentor de registos, execute o seguinte comando gcloud logging buckets describe:

gcloud logging buckets describe BUCKET_ID --location=LOCATION

Exemplo de comando:

gcloud logging buckets describe my-log-bucket --location=global

Quotas e limites

Quando configurar e usar o controlo de acesso ao nível do campo, tenha em atenção o seguinte:

  • Número de campos restritos: pode restringir até 20 campos para cada contentor de registos.
  • Tamanho dos campos restritos: o caminho do campo restrito tem de ter um comprimento inferior a 800 B.

Para mais informações sobre os limites que se podem aplicar à sua utilização do Cloud Logging, consulte Quotas e limites.