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 projeto do Google Cloud e ter uma maneira mais granular de controlar os dados de registro que um usuário pode acessar.
Informações gerais
O Logging usa o controle de acesso no nível do campo para ocultar os campos LogEntry
de usuários de um projeto do Google 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 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 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 |
Campos aninhados de httpRequest |
labels |
definido pelo usuário |
sourceLocation |
Campos aninhados de sourceLocation |
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:
Verifique se
gcloud --version
informa a versão da Google Cloud CLI como a versão 362.0.0 ou mais recente.Para instalar a versão mais recente da CLI gcloud, execute o seguinte comando
update
:gcloud components update
Para instruções sobre como instalar a CLI gcloud, consulte Como instalar a Google Cloud CLI.
Verifique se você tem um dos seguintes papéis do IAM para o projeto do Google Cloud que contém o bucket:
Para informações sobre como definir papéis do IAM, consulte o Guia de controle de acesso do Logging.
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 e podem ser aplicadas a um bucket atual ou ao criar um novo.
Como restringir campos em um novo bucket
Para restringir os campos de registro ao criar um novo bucket de registros, execute o seguinte comando da CLI gcloud:
gcloud logging buckets create BUCKET_NAME --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"
Como restringir campos em um bucket atual
Para restringir os campos de registro em um bucket de registros atual, execute o seguinte comando da CLI gcloud:
gcloud logging buckets update BUCKET_NAME --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 console do Google Cloud,
siga estas etapas:
- No painel Editar permissões, selecione Acessador de campo de registro.
Selecione Adicionar condição.
Insira um título e uma descrição nos campos Título e Descrição.
Selecione a guia Editor da condição e digite a seguinte expressão:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
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, conclua as seguintes etapas:
Edite o arquivo
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
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 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 campojsonPayload
, não no campoJsonpayload
.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 protobufLogEntry
.log_name
refere-se ao mesmo campo. O campojsonPayload.fooBar
refere-se a um campo diferente dejsonPayload.foo_bar
, já que os nomes de campos abaixo dejsonPayload
são chaves de string de mapa. No entanto, ele se refere ajson_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. Se, por exemplo, você especificar uma restrição em
jsonPayload.foo
, deverá configurar as permissões do IAM parajsonPayload.foo
e não parajson_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 console do Google Cloud, siga as etapas a seguir:
- No painel Editar permissões, selecione Acessador de campo de registro.
Selecione Adicionar condição.
Insira um título e uma descrição nos campos Título e Descrição.
Selecione a guia Editor da condição e digite a seguinte expressão:
resource.name.extract("locations/global/buckets/BUCKET_ID /fields/{field}") == "RESTRICTED_FIELD"
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, conclua as seguintes etapas:
Edite o arquivo
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
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 Identity and Access Management são atualizadas imediatamente.
Exemplo de saída
Os exemplos a seguir mostram como uma LogEntry
é exibida para usuários que não podem
acessar um subconjunto dos campos LogEntry
.
Suponha que um bucket tenha os seguintes campos restritos:
jsonPayload
httpRequest
labels
Para usuários com permissão para acessar todos os campos restritos, o LogEntry
é semelhante a este:
Para usuários com permissão para acessar apenas o campo jsonPayload
restrito LogEntry
, o LogEntry
ficará assim:
Para usuários sem permissão para visualizar qualquer um dos campos restritos,
o LogEntry
é semelhante ao seguinte:
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 CLI gcloud:
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.