Pode validar a integridade da imagem da máquina virtual (VM) do Compute Engine que o Google Kubernetes Engine (GKE) usa para VMs do plano de controlo. Esta página fornece instruções para uma equipa de segurança que monitoriza os registos do plano de controlo para validar o seguinte:
- A VM do plano de controlo foi iniciada com firmware autêntico e outro software de arranque que foi validado criptograficamente pelo arranque seguro e pela monitorização da integridade.
- A VM do plano de controlo foi iniciada a partir de uma imagem autêntica do GKE OS.
Também pode realizar esta validação para as imagens do SO e a integridade de arranque dos seus nós.
Esta página descreve uma parte de um conjunto de funcionalidades opcionais do plano de controlo no GKE que lhe permitem realizar tarefas como validar a sua postura de segurança do plano de controlo ou configurar a encriptação e a assinatura de credenciais no plano de controlo através de chaves que gere. Para mais detalhes, consulte o artigo Acerca da autoridade do plano de controlo do GKE.
Por predefinição, Trusted Cloud aplica várias medidas de segurança ao plano de controlo gerido. Esta página descreve as capacidades opcionais que lhe dão mais visibilidade ou controlo sobre o plano de controlo do GKE.
Acerca da validação da integridade da VM
Por predefinição, todas as instâncias do plano de controlo do GKE são VMs protegidas, que são VMs reforçadas que usam capacidades de segurança, como arranque seguro e medido, um módulo de plataforma fidedigna virtual (vTPM) e firmware UEFI. Todos os nós do GKE também ativam a monitorização da integridade, que valida a sequência de arranque de cada VM protegida com base numa sequência de arranque "boa" de referência. Esta validação devolve resultados de aprovação ou reprovação para cada fase da sequência de arranque e adiciona esses resultados ao Cloud Logging. A monitorização da integridade está ativada por predefinição em todos os clusters do GKE e valida as seguintes fases:
- Sequência de arranque inicial: desde o momento em que o firmware UEFI é iniciado até o carregador de arranque assumir o controlo. Adicionado aos registos da VM como
earlyBootReportEvent
. - Sequência de arranque tardia: desde o momento em que o carregador de arranque assume o controlo até ao momento em que o kernel do sistema operativo assume o controlo. Adicionado aos registos da VM como
lateBootReportEvent
.
O GKE também adiciona registos de criação de VMs do plano de controlo ao Logging. Estes registos contêm metadados que identificam a máquina e incluem detalhes sobre a imagem da VM e a sequência de arranque. Trusted Cloud publica uma atestação de resumo da validação (VSA) para cada imagem da VM do plano de controlo do GKE no repositório gke-vsa no GitHub. A VSA usa a estrutura in-toto para atestações. Pode validar os registos da VM do plano de controlo dos seus clusters em relação aos VSAs correspondentes para verificar se os nós do plano de controlo foram iniciados conforme esperado.
A realização destas validações pode ajudar a alcançar os seguintes objetivos:
- Certifique-se de que o software no plano de controlo está protegido pelo arranque seguro e pela monitorização da integridade, corresponde ao código fonte pretendido e é exatamente igual à imagem que outros Trusted Cloud clientes usam.
- Melhore a sua confiança na forma como o GKE protege o plano de controlo.
Preços
Esta funcionalidade é oferecida sem custos adicionais no GKE.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
-
Enable the Cloud Logging API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Certifique-se de que já tem um cluster do modo GKE Autopilot ou do modo padrão a executar a versão 1.29 ou posterior.
Funções necessárias
Para receber as autorizações de que precisa para validar a integridade da VM do plano de controlo, peça ao seu administrador que lhe conceda as seguintes funções da IAM no seu projeto:
-
Criar e interagir com clusters:
Administrador do cluster do Kubernetes Engine (
roles/container.clusterAdmin
) -
Aceda e processe registos:
Visualizador de registos (
roles/logging.viewer
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Verifique se existem fases da sequência de arranque com falhas
A monitorização da integridade adiciona um registo ao Logging se uma VM do plano de controlo falhar ou concluir com êxito uma fase da sequência de arranque. Para ver eventos de arranque com falhas, execute os seguintes comandos:
Na Trusted Cloud consola, aceda à página Explorador de registos:
No campo Consulta, especifique a seguinte consulta:
jsonPayload.@type="type.googleapis.com/cloud_integrity.IntegrityEvent" jsonPayload.earlyBootReportEvent.policyEvaluationPassed="false" OR jsonPayload.lateBootReportEvent.policyEvaluationPassed="false" jsonPayload.metadata.isKubernetesControlPlaneVM="true"
Também pode verificar se existem eventos de arranque bem-sucedidos substituindo
false
portrue
nesta consulta.Clique em Executar consulta. Se não vir resultados, significa que as VMs do plano de controlo passaram em todas as verificações de monitorização da integridade. Se vir um resultado, avance para o passo seguinte para identificar o cluster correspondente.
No registo de integridade de arranque com falha, copie o valor no campo
resource.labels.instance_id
.No campo Consulta, especifique a seguinte consulta:
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.metadata.isKubernetesControlPlaneVM="true" resource.labels.instance_id="INSTANCE_ID" protoPayload.methodName="v1.compute.instances.insert"
Substitua
INSTANCE_ID
pelo valor do campoinstance_id
do passo anterior.Clique em Executar consulta. O valor no campo
protoPayload.metadata.parentResource.parentResourceId
é o ID do cluster do GKE.Encontre o nome do cluster do GKE:
gcloud asset query \ --organization=ORGANIZATION_ID \ --statement="SELECT name FROM container_googleapis_com_Cluster WHERE resource.data.id='CLUSTER_ID';"
Substitua o seguinte:
ORGANIZATION_ID
: o ID numérico da sua organização Trusted Cloud .CLUSTER_ID
: o valor do campoprotoPayload.metadata.parentResource.parentResourceId
do passo anterior.
O resultado é semelhante ao seguinte:
# lines omitted for clarity //container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME
Este resultado tem os seguintes campos:
PROJECT_ID
: o ID do seu Trusted Cloud projeto.LOCATION
: a localização do cluster.CLUSTER_NAME
: o nome do cluster.
Encontre e inspecione os registos da VM do plano de controlo
Os registos de criação de VMs do Compute Engine que correspondem aos clusters do GKE são armazenados no contentor de registos _Default
.
Para encontrar os registos de criação das VMs do plano de controlo do cluster e obter estes metadados, faça o seguinte:
Na Trusted Cloud consola, aceda à página Explorador de registos:
No campo Consulta, especifique a seguinte consulta:
resource.type="gce_instance" protoPayload.methodName="v1.compute.instances.insert" protoPayload.metadata.isKubernetesControlPlaneVM="true"
Clique em Executar consulta. Se não vir resultados, verifique se cumpre todos os requisitos na secção Antes de começar.
Nos resultados da consulta, verifique o campo
metadata
. O resultado é semelhante ao seguinte:# fields omitted for clarity "metadata": { "usedResources": { "attachedDisks": [ { "sourceImageId": "9046093115864736653", "sourceImage": "https://www.googleapis.com/compute/v1/projects/1234567890/global/images/gke-1302-gke1627000-cos-113-18244-85-49-c-pre", "isBootDisk": true } # fields omitted for clarity
O campo
metadata
inclui as seguintes informações:usedResources
: a lista de recursos usados para criar a VM.attachedDisks
: o disco de arranque da VM.sourceImageId
: o ID exclusivo da imagem de VM.sourceImage
: o URL da imagem da VM de origem. A sintaxe do valor neste campo éhttps://www.googleapis.com/compute/v1/projects/PROJECT_NUMBER/global/images/IMAGE_NAME
, em quePROJECT_NUMBER
é o número do projeto pertencente àTrusted Cloudque aloja as VMs do plano de controlo eIMAGE_NAME
é o nome da imagem que foi usada para arrancar a VM.isBootDisk
: um identificador booleano que indica se este disco foi usado como o disco de arranque da VM.
Encontre e valide o VSA para imagens de VMs do plano de controlo
Nesta secção, encontra o VSA que corresponde à imagem de VM do plano de controlo no repositório gke-vsa no GitHub. Em seguida, usa uma ferramenta denominada
slsa-verifier
fornecida pela
estrutura de níveis da cadeia de fornecimento para artefactos de software (SLSA)
para validar a VSA. Precisa dos seguintes dados do registo de criação da VM do plano de controlo:
- O ID da imagem da VM
- O número do projeto pertencente à Trusted Cloudque aloja as VMs
- O nome da imagem do SO que foi usado para arrancar a VM
O ficheiro que corresponde à VM do plano de controlo tem o seguinte formato de nome de ficheiro:
IMAGE_NAME:IMAGE_ID.intoto.jsonl
Substitua o seguinte:
IMAGE_NAME
: o nome da imagem da VM, que é a string após/images/
no campoattachedDisks.sourceImage
no registo de auditoria da VM da secção anterior. Por exemplo,gke-1302-gke1627000-cos-113-18244-85-49-c-pre
.IMAGE_ID
: o ID da imagem de VM, que é o valor do campoattachedDisks.sourceImageId
no registo de auditoria de VM da secção anterior. Por exemplo,9046093115864736653
.
Para encontrar e validar o VSA quando conhece o nome do ficheiro VSA, siga os passos abaixo:
- Abra o
gke-vsa
repositório do GitHub. - No diretório "gke-master-images", encontre o ficheiro que corresponde à sua imagem de VM. Por exemplo,
https://github.com/GoogleCloudPlatform/gke-vsa/blob/main/gke-master-images:78064567238/IMAGE_NAME:IMAGE_ID.intoto.jsonl
- Transfira o ficheiro VSA.
- Instale a ferramenta
slsa-verifier
. Guarde a chave pública para validar o VSA num ficheiro com o nome
vsa_signing_public_key
:Valide o VSA:
slsa-verifier verify-vsa \ --attestation-path=PATH_TO_VSA_FILE \ --resource-uri=gce_image://gke-master-images:IMAGE_NAME \ --subject-digest=gce_image_id:IMAGE_ID\ --verifier-id=https://bcid.corp.google.com/verifier/bcid_package_enforcer/v0.1 \ --verified-level=BCID_L1 \ --verified-level=SLSA_BUILD_LEVEL_2 \ --public-key-path=PATH_TO_PUBLIC_KEY_FILE \ --public-key-id=keystore://76574:prod:vsa_signing_public_key
Substitua o seguinte:
PATH_TO_VSA_FILE
: o caminho para o ficheiro VSA que transferiu.IMAGE_NAME
: o nome da imagem de VM, comogke-1302-gke1627000-cos-113-18244-85-49-c-pre
.IMAGE_ID
: o ID da imagem da VM, como9046093115864736653
.
Se o VSA passar nas verificações de validação, o resultado é o seguinte:
Verifying VSA: PASSED PASSED: SLSA verification passed