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 LogEntry
individuais 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
LogEntry
restritos 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:
-
Na Google Cloud consola, aceda à página IAM:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é IAM e administração.
- Selecione o principal e clique em Editar.
- No painel Editar autorizações, selecione Acesso ao campo de registo para a função.
- Selecione Adicionar condição do IAM.
- Introduza um título e uma descrição nos campos Título e Descrição.
Selecione o separador Editor de condições e introduza a seguinte expressão:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
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:
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
.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çãomembers
."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 quePRINCIPAL
pode ter, consulte Identificadores principais. No campomembers
do ficheiropolicy.json
, use o formato"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: uma descrição da condição.
- TITLE: um título para a condição.
- PRINCIPAL: um identificador do principal ao qual quer conceder a função. Normalmente, os identificadores principais têm o seguinte formato:
Para aplicar o ficheiro
policy.json
atualizado, execute o comandogcloud 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 campojsonPayload
e não no campoJsonpayload
.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 protobufLogEntry
;log_name
refere-se ao mesmo campo. O campojsonPayload.fooBar
refere-se a um campo diferente dejsonPayload.foo_bar
, uma vez que os nomes dos campos abaixo dejsonPayload
são chaves de strings de mapas. No entanto, refere-se ajson_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 parajsonPayload.foo
e não parajson_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:
-
Na Google Cloud consola, aceda à página IAM:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é IAM e administração.
- Selecione o principal e clique em Editar.
- No painel Editar autorizações, selecione Acesso ao campo de registo para a função.
- Selecione Adicionar condição do IAM.
- Introduza um título e uma descrição nos campos Título e Descrição.
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"
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:
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
.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çãomembers
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 quePRINCIPAL
pode ter, consulte Identificadores principais. No campomembers
do ficheiropolicy.json
, use o formato"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: uma descrição da condição.
- TITLE: um título para a condição.
- PRINCIPAL: um identificador do principal ao qual quer conceder a função. Normalmente, os identificadores principais têm o seguinte formato:
Para aplicar o ficheiro
policy.json
atualizado, execute o comandogcloud 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 campojsonPayload
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.