Controle de acesso por campo

Nesta página, você verá os controles de acesso no nível do campo e como configurá-los em um bucket de registros. O controle de acesso no nível do campo permite ocultar campos LogEntry individuais dos usuários de um projeto do Google Cloud, oferecendo uma maneira mais granular de controlar os dados que eles podem acessar.

Visão geral

O Cloud Logging usa o controle de acesso no nível do campo para ocultar campos LogEntry de usuários de um projeto do Cloud que não têm as permissões necessárias para visualizar os campos. Em comparação com as visualizações de registros, que oculta todo o LogEntry, o controle de acesso no nível do campo oculta campos individuais do LogEntry. É possível definir as permissões de controle de acesso no nível do campo e de visualização de registros em um bucket de registros. Para restringir e gerenciar o controle de acesso no nível do campo, use a ferramenta de linha de comando gcloud.

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

  • Configure os campos LogEntry restritos em um bucket de registros.
  • Dê apenas aos usuários que precisam visualizar os campos restritos o papel de IAM logging.fieldAccessor para esse caminho de campo ou um papel que contenha permissões semelhantes.

O Logging verifica as permissões do IAM quando um usuário consulta registros de um bucket de registros com campos restritos definidos. Todos os campos com ACLs configuradas são negados aos usuários sem o logging.FieldAccessor correspondente, o que significa que:

  • O usuário receberá um erro de permissão negada se tentar consultar diretamente os campos restritos.
  • As pesquisas globais não consideram o conteúdo dos campos negados.
  • Todos os resultados retornados de LogEntry omitem os campos restritos.

Campos restritos

É possível restringir o acesso a qualquer combinação dos seguintes campos LogEntry:

Campo LogEntry Campos aninhados do campo LogEntry pai
jsonPayload definido pelo usuário
textPayload Nenhum
protoPayload específico do serviço
httpRequest httpRequest campos aninhados
labels definido pelo usuário
sourceLocation sourceLocation campos aninhados

Restringir o acesso a um campo com campos aninhados (como jsonPayload ou subcaminhos jsonPayload específicos) também restringe o acesso a qualquer um dos caminhos aninhados.

Antes de começar

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

Como configurar o controle de acesso no nível do campo

As restrições no nível do campo são configuradas no nível do bucket de registros e podem ser aplicadas a um bucket de registros atual ou ao criar um novo.

Como restringir campos em um novo bucket de registros

Para restringir campos de registro ao criar um novo bucket de registros, execute o seguinte comando da ferramenta gcloud:

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

Exemplo de comando:

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

Como restringir campos em um bucket de registros atual

Para restringir campos de registro em um bucket de registros existente, execute o seguinte comando da ferramenta gcloud:

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

Exemplo de comando:

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

Se você quiser adicionar campos às restrições atuais, seu comando de atualização precisará listar novamente todo o conjunto de campos restritos. Com base no exemplo anterior, se você quiser restringir o acesso ao campo jsonPayload.data.entryDate, além dos campos já restritos jsonPayload.data.ssn e httpRequest.status, seu comando seria assim:

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

Se você não listar os campos já restritos e listados apenas jsonPayload.data.entryDate, jsonPayload.data.ssn e httpRequest.status serão removidos como campos restritos.

Como gerenciar o acesso a campos restritos

Por padrão, o Logging oculta todos os campos restritos de usuários que não têm o papel logging.fieldAccessor ou um papel com permissões semelhantes. O Logging expõe os campos restritos aos usuários que têm a permissão para visualizar registros no bucket de registros e o papel logging.fieldAccessor.

É possível modificar o comportamento padrão para limitar subconjuntos de campos restritos a usuários específicos.

Como conceder permissão em todos os campos restritos

Para conceder aos usuários permissão a todos os campos restritos, conceda aos usuários o papel logging.fieldAccessor ou um papel personalizado que contenha o papel logging.fieldAccessor.

Console

Para conceder o papel logging.fieldAccessor aos usuários usando o Console do Google Cloud, siga estas etapas:

  1. No painel Editar permissões, selecione Assessor de campo de registro.
  2. Selecione Adicionar condição.

    Adicione a permissão de acessador do campo de registro.

  3. Digite um título e uma descrição nos campos Título e Descrição.

  4. Selecione a guia Editor de condições e insira a seguinte expressão:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
    

    Adicionar condição à permissão.

  5. Selecione Salvar.

As permissões do gerenciamento de identidade e acesso são atualizadas imediatamente.

gcloud

Para conceder aos usuários o papel logging.fieldAccessor usando a ferramenta gcloud, conclua as seguintes etapas:

  1. Edite o arquivo policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. Atualize o arquivo policy.json com vinculações adicionais:

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

    Exemplo de vinculação:

    "bindings": [
      {
        "condition": {
          "description": "Grants access to all restricted fields in a log bucket",
          "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'log-bucket-with-sensitive-data'",
          "title": "Log bucket condition for restricted fields"
        },
        "members": [
          "user":"222larabrown@gmail.com"
        ],
        "role": "roles/logging.fieldAccessor"
      }
    ]
    

As permissões do gerenciamento de identidade e acesso são atualizadas imediatamente.

Como conceder permissões em um subconjunto de campos restritos

Para conceder aos usuários permissões em um subconjunto dos campos restritos, defina os campos que os usuários podem acessar ao conceder a eles o papel logging.fieldAccessor ou ao definir um papel personalizado que contenha logging.fieldAccessor.

Observações:

  • A ortografia e o uso de letras maiúsculas no campo restrito exibido na configuração do bucket de registro precisam corresponder à grafia do campo restrito no nome da permissão do IAM. Por exemplo, se você definir o campo restrito como jsonPayload, será necessário conceder permissão no campo jsonPayload, não no campo Jsonpayload.

  • Os caminhos de campo, incluindo strings de chave de mapa, diferenciam maiúsculas de minúsculas. No entanto, eles podem ser expressos como letras maiúsculas de minúsculas (snake_case) ou maiúsculas concatenadas (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, já que os nomes de campo abaixo de jsonPayload são chaves de string de mapa. No entanto, ele se refere a json_payload.fooBar.

    Mesmo que os caminhos dos campos sejam referências válidas para o mesmo campo, é necessário corresponder a ortografia, letras maiúsculas e minúsculas e ao configurar restrições e permissões do IAM. Se, por exemplo, você especificar uma restrição em jsonPayload.foo, deverá configurar as permissões do IAM para jsonPayload.foo, e não para json_payload.foo.

Para mais informações sobre tipos de campo de registro válidos, consulte Idioma da consulta do Logging: valores e conversões.

Console

Para conceder aos usuários acesso a um campo restrito usando o Console do Cloud, siga estas etapas:

  1. No painel Editar permissões, selecione Assessor de campo de registro.
  2. Selecione Adicionar condição.

    Adicione a permissão de acessador do campo de registro.

  3. Digite um título e uma descrição nos campos Título e Descrição.

  4. Selecione a guia Editor de condições e insira a seguinte expressão:

    resource.name.extract("locations/global/buckets/BUCKET_ID /fields/{field}") == "RESTRICTED_FIELD"
    

    Adicione um subconjunto dos campos restritos.

  5. Selecione Salvar.

As permissões do gerenciamento de identidade e acesso são atualizadas imediatamente.

gcloud

Para conceder aos usuários acesso a um campo restrito usando a ferramenta gcloud, siga estas etapas:

  1. Edite o arquivo policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. Atualize o arquivo policy.json com vinculações adicionais:

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_NAME/fields/{field}\") == 'RESTRICTED_FIELD'",
            "title": "TITLE"
          },
          "members": [
            "user":"USER_ID@DOMAIN.com"
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    Exemplo de vinculação:

    "bindings": [
      {
        "condition": {
          "description": "Give access to one restricted field that contains sensitive information",
          "expression": "resource.name.extract(\"locations/global/buckets/my-log-bucket/fields/{field}\") == 'jsonPyaload.data.ssn'",
          "title": "Access to restricted field"
        },
        "members": [
          "user":"222larabrown@gmail.com"
        ],
        "role": "roles/logging.fieldAccessor"
      }
    ]
    

As permissões do gerenciamento de identidade e acesso são atualizadas imediatamente.

Exemplo de saída

Os exemplos a seguir mostram como uma LogEntry aparece para usuários que receberam restrição de acesso a um subconjunto dos campos LogEntry.

Suponha que um bucket de registro tenha os seguintes campos restritos:

  • jsonPayload
  • httpRequest
  • labels

Para usuários com permissão para acessar todos os campos restritos, o LogEntry tem a seguinte aparência:

Todos os campos de registro mostrados.

Para usuários com permissão para acessar apenas o campo jsonPayload LogEntry restrito, o LogEntry tem esta aparência:

Somente o campo "jsonPayload" é exibido.

Para usuários sem permissão para visualizar qualquer um dos campos restritos, o LogEntry é semelhante ao seguinte:

Todos os campos estão restritos.

Se um usuário inserir uma restrição global que retornaria um LogEntry com um campo restrito, o Logging ocultará todo o LogEntry, em vez de apenas o campo.

Como listar campos restritos

Para listar os campos restritos em um bucket de registros, execute o seguinte comando da ferramenta gcloud:

gcloud alpha logging buckets describe  BUCKET_ID  --location=LOCATION

Exemplo de comando:

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

Cotas e limites

Ao configurar e usar o controle de acesso no nível do campo, observe o seguinte:

  • Número de campos restritos: é possível restringir até 20 campos para cada bucket de registro.
  • Tamanho dos campos restritos: o caminho do campo restrito precisa ter menos de 800 B.

Para mais informações sobre os limites que podem se aplicar ao uso do Cloud Logging, consulte Cotas e limites.