Configurar o acesso no nível do campo

Este documento descreve os controles de acesso no nível do campo e como configurá-los em um bucket do Logging. Com os controles de acesso no nível do campo, é possível ocultar campos LogEntry individuais dos usuários de um Google Cloud projeto e ter uma maneira mais granular de controlar os dados de registro que um usuário pode acessar.

Visão geral

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

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

  • Configure os campos LogEntry restritos em um bucket de registro.
  • Forneça apenas os usuários que precisam visualizar os campos restritos do papel logging.fieldAccessor do IAM 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 com campos restritos definidos. Todos os campos com ACLs configuradas são negados para os usuários sem o logging.FieldAccessor correspondente para esse campo, o que significa o seguinte:

  • 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.
  • Os resultados retornados de LogEntry omitem os campos restritos.

Campos restritos

É possível restringir o acesso ao campo jsonPayload, o que também restringe o acesso aos caminhos aninhados.

Também é possível restringir o acesso aos campos de folha do seguinte:

Por exemplo, é possível restringir o acesso ao campo labels.check_id.

Antes de começar

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

  • Verifique se gcloud --version informa a versão 362.0.0 ou mais recente.

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

    gcloud components update
    

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

  • Execute gcloud config set para configurar o padrão Google Cloud projeto para os comandos da Google Cloud CLI. 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 você tem um dos seguintes IAM papéis para o Google Cloud projeto que contém o bucket:

    Para informações sobre como definir papéis do IAM, consulte o Guia de controle de acesso doLogging.

Definir 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 registro e podem ser aplicadas a um bucket de registros atual ou ao criar um novo.

Restringir campos em um novo bucket

Para restringir campos de registro ao criar um novo bucket de registros, execute o gcloud logging buckets create comando. Antes de executar o comando, faça estas substituições:

  • BUCKET_ID: o nome ou ID do bucket de registros.
  • LOCATION: o local do bucket de registros.
  • DESCRIPTION: a descrição do bucket de registros.
  • RESTRICTED_FIELDS: a lista de campos separados por vírgula que estão sendo 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"

Restringir campos em um bucket atual

Para restringir campos de registro em um bucket de registros atual, execute o gcloud logging buckets update comando:

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 você quiser adicionar campos às restrições atuais, o 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 será semelhante a este:

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

Se você não listou novamente os campos já restritos e acabou de listar 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 e no papel logging.fieldAccessor.

Você pode 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 para 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 aos usuários o papel logging.fieldAccessor usando o Google Cloud console, siga estas etapas:

  1. No Google Cloud console, acesse a página IAM:

    Acesse o IAM

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo IAM e administrador.

  2. Selecione o principal e clique em Editar.
  3. No painel Editar permissões, selecione Acessador de campo de registro para o papel.
  4. Selecione Adicionar condição do IAM.
  5. Insira um título e uma descrição nos campos Título e Descrição.
  6. Selecione a guia Editor da condição e digite a seguinte expressão:

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

As permissões do Identity and Access Management são atualizadas imediatamente.

gcloud

Para conceder aos usuários o papel logging.fieldAccessor usando a CLI gcloud, siga estas etapas:

  1. Para salvar as informações atuais da política do IAM em um arquivo, execute o gcloud projects get-iam-policy comando e salve a saída em um arquivo:

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

    O comando anterior salva as informações em um arquivo chamado policy.json.

  2. Atualize o arquivo policy.json com outras vinculações.

    A seguir, o campo expression lista apenas um bucket de registros. Portanto, todos os campos de entradas de registro armazenados nesse bucket de registros estão acessíveis aos principais listados na seçã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 para o principal a quem você quer conceder o papel. Os identificadores dos principais geralmente têm o seguinte formato: PRINCIPAL-TYPE:ID. Por exemplo, user:my-user@example.com. Para uma lista completa dos formatos que PRINCIPAL pode ter, consulte Identificadores de principais. No campo members do policy.json arquivo, 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 arquivo policy.json atualizado, execute o gcloud projects set-iam-policy comando:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

As permissões do Identity and Access Management são atualizadas imediatamente.

Como conceder permissões em um subconjunto de campos restritos

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

Observações:

  • A ortografia e o uso de letras maiúsculas e minúsculas do campo restrito, conforme ele aparece na configuração do bucket, precisam corresponder à ortografia e ao uso de letras maiúsculas e minúsculas 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, mas podem ser expressos em minúsculas e com um caractere sublinhado no lugar de espaço (como_este_exemplo) ou com letras concatenadas que diferenciam maiúsculas de minúsculas (comoEsteExemplo).

    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 campos abaixo de jsonPayload são chaves de string de mapa. No entanto, ele se refere a json_payload.fooBar.

    Mesmo que os caminhos do campo sejam referências válidas para o mesmo campo, é preciso corresponder a ortografia e as letras maiúsculas e minúsculas ao configurar restrições e permissões do IAM. Por exemplo, se você especificar uma restrição em jsonPayload.foo, será necessário configurar 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 Linguagem de consulta do Logging: valores e conversões.

Console

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

  1. No Google Cloud console, acesse a página IAM:

    Acesse o IAM

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo IAM e administrador.

  2. Selecione o principal e clique em Editar.
  3. No painel Editar permissões, selecione Acessador de campo de registro para o papel.
  4. Selecione Adicionar condição do IAM.
  5. Insira um título e uma descrição nos campos Título e Descrição.
  6. Selecione a guia Editor da condição e digite a seguinte expressão:

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

As permissões do Identity and Access Management são atualizadas imediatamente.

gcloud

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

  1. Para salvar as informações do IAM em um arquivo, execute o gcloud projects get-iam-policy comando e salve a saída em um arquivo:

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

    O comando anterior salva as informações em um arquivo chamado policy.json.

  2. Atualize o arquivo policy.json com outras vinculações.

    A seguir, o campo expression lista campos específicos. Portanto, apenas os principais listados na seção members têm acesso aos campos das entradas de registro armazenadas no bucket de registros 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 para o principal a quem você quer conceder o papel. Os identificadores dos principais geralmente têm o seguinte formato: PRINCIPAL-TYPE:ID. Por exemplo, user:my-user@example.com. Para uma lista completa dos formatos que PRINCIPAL pode ter, consulte Identificadores de principais. No campo members do policy.json arquivo, 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 arquivo policy.json atualizado, execute o gcloud projects set-iam-policy comando:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

As permissões do Identity and Access Management são atualizadas imediatamente.

Exemplo

Suponha que um bucket de registros restrinja o campo jsonPayload, um rótulo específico e um subcampo httpRequest específico. O seguinte ocorre quando um usuário está examinando as entradas de registro

  • Para usuários com permissão para acessar todos os campos restritos, todos os campos em uma entrada de registro ficam visíveis.

  • Para usuários com permissão para acessar apenas o campo jsonPayload LogEntry restrito, todos os campos não restritos ficam visíveis, e o campo jsonPayload fica visível.

  • Para usuários sem permissão para visualizar nenhum dos campos restritos, apenas os campos não restritos ficam visíveis.

Se um usuário gravar uma consulta com uma restrição global, as entradas de registro que contêm um campo restrito serão omitidas da resposta.

Como listar campos restritos

Para listar os campos restritos em um bucket de registros, execute o seguinte gcloud logging buckets describe:

gcloud logging buckets describe BUCKET_ID --location=LOCATION

Exemplo de comando:

gcloud 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 ser menor que 800 B.

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