1. Introdução e visão geral
O DNS Armor, desenvolvido pela Infoblox, é um serviço totalmente gerenciado que oferece segurança na camada de DNS para suas cargas de trabalho do Google Cloud. O detector avançado de ameaças foi projetado para detectar atividades maliciosas no início da cadeia de ataque, ou seja, na consulta DNS, sem adicionar complexidade operacional ou sobrecarga de desempenho.
Este codelab fornece instruções detalhadas para configurar e testar o serviço DNS Armor. Você vai configurar a infraestrutura de rede necessária, criar o detector de ameaças, testar o serviço simulando ameaças de DNS e, por fim, visualizar e analisar os registros de ameaças usando um painel personalizado do Cloud Monitoring.
O que você vai criar
Neste codelab, você vai provisionar os seguintes recursos:
- Uma rede VPC (
network-a) com sub-redes e máquinas virtuais provisionadas nas regiõesus-east4eus-central1. - Um detector avançado de ameaças do DNS Armor configurado para inspecionar consultas DNS.
- Métricas com base em registros de ameaças de DNS.
- Um painel personalizado para visualizar os registros de ameaças do DNS.

O que você vai aprender
- Como provisionar os recursos de rede necessários, incluindo VPCs e máquinas virtuais.
- Como implantar um detector avançado de ameaças e excluir redes específicas.
- Como validar a configuração de detecção de ameaças usando um script de simulação de ameaças.
- Como visualizar os registros de ameaças de DNS usando métricas com base em registros e um painel personalizado.
O que é necessário
- Um projeto do Google Cloud.
- Acesso à ferramenta de linha de comando
gcloud.
2. Pré-requisitos
Nesta seção, você realizará as seguintes tarefas:
- Verifique se o projeto na nuvem do Google Cloud atende às restrições necessárias da política da organização.
- Confirme se sua conta de usuário tem os papéis e as permissões do IAM necessários.
- Ative as APIs do Cloud essenciais para este codelab.
- Atribua o papel do IAM
roles/logging.viewerà conta de serviço do Compute Engine.
Restrições da política da organização
Para concluir este codelab, verifique as restrições da política da organização aplicadas ao seu projeto. Algumas políticas podem dificultar o provisionamento dos recursos necessários. As seguintes restrições podem afetar a configuração deste codelab:
constraints/gcp.resourceLocations: restringe as regiões em que é possível criar recursos. O codelab exigeus-east4eus-central1.constraints/compute.vmExternalIpAccess: impede a criação de máquinas virtuais com endereços IP públicos, o que pode interferir na configuração se você não seguir o uso da flag--no-addressno codelab .constraints/compute.shieldedVm: força a criação de VMs protegidas, que os comandos de criação de VM do codelab não especificam, o que pode causar um erro.constraints/gcp.restrictServiceUsage: limita quais APIs do Cloud podem ser ativadas e pode bloquear o codelab se ele não permitircompute.googleapis.com,networksecurity.googleapis.com,logging.googleapis.comemonitoring.googleapis.com.
Permissões e papéis do IAM
Para concluir este codelab, verifique os papéis e as permissões do IAM concedidos ao seu usuário. Os seguintes papéis e permissões do IAM são necessários para concluir este codelab.
- Administrador do uso do serviço (
roles/serviceusage.serviceUsageAdmin): para ativar as APIs do Cloud necessárias para o codelab. - Administrador de rede do Compute (
roles/compute.networkAdmin): para criar e gerenciar redes VPC, sub-redes e o Cloud NAT. - Administrador de segurança do Compute (
roles/compute.securityAdmin): para configurar as regras de firewall para acesso SSH às máquinas virtuais. - Administrador da instância do Compute (v1) (
roles/compute.instanceAdmin.v1): para criar e gerenciar as máquinas virtuais necessárias para o laboratório. - Usuário do túnel protegido pelo IAP (
roles/iap.tunnelResourceAccessor): para se conectar às máquinas virtuais usando SSH pelo Identity-Aware Proxy (IAP). - Administrador de segurança de rede (
roles/networksecurity.admin): para criar e gerenciar o detector de ameaças do DNS Armor. - Visualizador de registros (
roles/logging.viewer): para ver e analisar os registros de ameaças na Análise de registros.
APIs Google Cloud
Verifique se as APIs do Cloud necessárias estão ativadas no seu projeto.
1. Ative as APIs necessárias e execute os comandos gcloud a seguir no Cloud Shell.
gcloud services enable compute.googleapis.com \
networksecurity.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com
2. Verifique se as APIs estão ativadas e execute os seguintes comandos gcloud no Cloud Shell.
gcloud services list --enabled
Conta de serviço do Compute Engine
O script de simulação de ameaças exige permissões para ler e gerar relatórios sobre os registros de ameaças gerados pelo Cloud Logging. Como o script será executado em uma VM que usa a conta de serviço padrão do Compute Engine, o papel roles/logging.viewer do IAM precisa ser atribuído a essa conta.
1. Defina as variáveis de ambiente e execute os comandos a seguir no Cloud Shell.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
2. Conceda o papel de leitor do Logging à SA do Compute Engine. Execute os seguintes comandos gcloud no Cloud Shell
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/logging.viewer"
3. Provisionamento de recursos de rede e computação
Nesta seção, você realizará as seguintes tarefas:
- Crie a rede VPC
network-acom sub-redes personalizadas. - Configure o Cloud Routers e o Cloud NAT para saída da Internet em
network-a. - Crie regras de firewall para permitir o acesso SSH às VMs do intervalo de IP do IAP para
network-a. - Provisione máquinas virtuais Linux em
network-asem endereços IP públicos.
Criar VPCs e sub-redes
1. Crie a rede "network-a" e as sub-redes nas regiões us-east4 e us-central1. Execute os seguintes comandos gcloud no Cloud Shell.
gcloud compute networks create network-a --subnet-mode=custom
gcloud compute networks subnets create subnet-a-use4 \
--network=network-a \
--range=10.10.0.0/24 \
--region=us-east4
gcloud compute networks subnets create subnet-a-usc1 \
--network=network-a \
--range=10.10.1.0/24 \
--region=us-central1
Configurar saída da Internet
1. Crie o Cloud Router e o Cloud NAT para network-a e permita a saída da Internet para VMs sem IPs públicos.
gcloud compute routers create router-a-use4 \
--network=network-a \
--region=us-east4
gcloud compute routers nats create nat-a-use4 \
--router=router-a-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4
gcloud compute routers create router-a-usc1 \
--network=network-a \
--region=us-central1
gcloud compute routers nats create nat-a-usc1 \
--router=router-a-usc1 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-central1
Configurar regras de firewall
1. Crie regras de firewall para network-a permitir o acesso SSH do intervalo de IP do IAP. Execute os seguintes comandos gcloud no Cloud Shell.
gcloud compute firewall-rules create allow-ssh-iap-a \
--network=network-a \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20
Criar máquinas virtuais
1. Criar VMs do Linux em network-a.
gcloud compute instances create vm-a-use4 \
--zone=us-east4-c \
--network=network-a \
--subnet=subnet-a-use4 \
--no-address \
--scopes=cloud-platform
gcloud compute instances create vm-a-usc1 \
--zone=us-central1-a \
--network=network-a \
--subnet=subnet-a-usc1 \
--no-address \
--scopes=cloud-platform
4. Criar o detector de ameaças de DNS
Nesta seção, você realizará as seguintes tarefas:
- Crie o detector de ameaças.
- Liste o detector de ameaças.
Com as VPCs, sub-redes e máquinas virtuais provisionadas, a próxima etapa é criar o detector de ameaças de DNS.
1. Crie o detector de ameaças usando o comando gcloud beta network-security dns-threat-detectors create.
gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox
2. Liste o detector de ameaças para confirmar a criação.
gcloud beta network-security dns-threat-detectors list --location=global
5. Criar as métricas com base em registros
Nesta seção, você realizará as seguintes tarefas:
- Como entender a entrada de registro.
- Crie o arquivo
config.yaml. - Crie a métrica com base em registros.
1. Entender a entrada de registro. Confira uma tabela com todos os campos nos registros do DNS Armor na documentação de registros de ameaças. Esta seção se concentra nos campos específicos que serão usados para criar as métricas com base em registros.
Os seguintes campos serão usados para criar as métricas com base em registros:
- vmInstanceId:nome da instância da VM do Compute Engine, aplicável apenas a consultas iniciadas por VMs do Compute Engine.
- queryName:nome da consulta DNS.
- severity:a gravidade (Alta, Média, Baixa ou Informação) associada à ameaça detectada. Para mais informações, consulte a Definição de nível de gravidade da Infoblox.
- location:região do Google Cloud de onde a resposta foi veiculada.
- threat:o nome da ameaça detectada.
- threatId:identificador exclusivo da ameaça.
2. Crie o arquivo config.yaml. Primeiro, crie um arquivo config.yaml vazio usando o comando touch.
touch config.yaml
3. Preencha o arquivo config.yaml. Esse arquivo define como criar uma métrica com base em registros para registros de ameaças do DNS Armor. Ele especifica quais entradas de registro filtrar, quais rótulos extrair dessas entradas e as propriedades da própria métrica.
Abra o arquivo config.yaml em um editor de texto de sua preferência e cole o seguinte conteúdo.
filter: |
resource.type="networksecurity.googleapis.com/DnsThreatDetector"
jsonPayload.dnsQuery.projectNumber="PROJECT_NUMBER"
labelExtractors:
InstanceId: EXTRACT(jsonPayload.dnsQuery.vmInstanceId)
QueryName: EXTRACT(jsonPayload.dnsQuery.queryName)
Severity: EXTRACT(jsonPayload.threatInfo.severity)
region: EXTRACT(jsonPayload.dnsQuery.location)
threat: EXTRACT(jsonPayload.threatInfo.threat)
threatId: EXTRACT(jsonPayload.threatInfo.threatId)
metricDescriptor:
labels:
- key: InstanceId
- key: threat
- key: Severity
- key: threatId
- key: region
- key: QueryName
metricKind: DELTA
unit: '1'
valueType: INT64
4. Atualize o número do projeto. Use o seguinte comando sed para substituir o marcador PROJECT_NUMBER pelo valor da sua variável de ambiente.
sed -i "s/PROJECT_NUMBER/$PROJECT_NUMBER/g" config.yaml
5. Crie a métrica com base em registros. Por fim, execute o seguinte comando gcloud no Cloud Shell para criar a métrica.
gcloud logging metrics create dns-armor-log-based-metric --config-from-file=config.yaml
6. Criar o painel personalizado
Nesta seção, você realizará as seguintes tarefas:
- Crie o arquivo
dashboard.json. - Criar o painel personalizado
1. Crie o arquivo dashboard.json. Primeiro, crie um arquivo dashboard.json vazio usando o comando touch.
touch dashboard.json
2. Preencha o arquivo dashboard.json. O arquivo dashboard.json configura o painel de monitoramento personalizado, definindo widgets, propriedades de exibição e como as métricas baseadas em registros são visualizadas, agregadas e filtradas.
Abra o arquivo dashboard.json em um editor de texto de sua preferência e cole o seguinte conteúdo.
{
"displayName": "DNS Armor - Custom Dashboard",
"dashboardFilters": [],
"description": "",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 20,
"width": 24,
"widget": {
"title": "Threat Logs",
"id": "",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR",
"showLegend": false
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"legendTemplate": "",
"measures": [],
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"outputFullDuration": false,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
},
{
"xPos": 24,
"height": 20,
"width": 24,
"widget": {
"title": "Threat Logs per region",
"id": "",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR",
"showLegend": false
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"legendTemplate": "",
"measures": [],
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"outputFullDuration": false,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"region\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
},
{
"yPos": 20,
"height": 20,
"width": 24,
"widget": {
"title": "Group by Threat",
"id": "",
"pieChart": {
"chartType": "DONUT",
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"measures": [],
"minAlignmentPeriod": "60s",
"sliceNameTemplate": "",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"threat\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"showLabels": false,
"showTotal": false,
"sliceAggregatedThreshold": 0
}
}
},
{
"yPos": 20,
"xPos": 24,
"height": 20,
"width": 24,
"widget": {
"title": "Top List - ThreatID",
"timeSeriesTable": {
"columnSettings": [
{
"column": "threatId",
"visible": true
},
{
"column": "threat",
"visible": true
},
{
"column": "project_id",
"visible": false
},
{
"column": "value",
"visible": true
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"threatId\"",
"metric.label.\"threat\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\"",
"pickTimeSeriesFilter": {
"direction": "TOP",
"numTimeSeries": 30,
"rankingMethod": "METHOD_MEAN"
}
}
}
}
],
"metricVisualization": "BAR"
}
}
},
{
"yPos": 40,
"height": 20,
"width": 24,
"widget": {
"title": "Group by Severity",
"id": "",
"pieChart": {
"chartType": "DONUT",
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"measures": [],
"minAlignmentPeriod": "60s",
"sliceNameTemplate": "",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"Severity\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"showLabels": false,
"showTotal": false,
"sliceAggregatedThreshold": 0
}
}
},
{
"yPos": 40,
"xPos": 24,
"height": 20,
"width": 24,
"widget": {
"title": "Top List - Source",
"id": "",
"timeSeriesTable": {
"columnSettings": [
{
"column": "InstanceId",
"visible": true
},
{
"column": "region",
"visible": true
},
{
"column": "project_id",
"visible": true
},
{
"column": "value",
"visible": true
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"tableTemplate": "",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"InstanceId\"",
"metric.label.\"region\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\"",
"pickTimeSeriesFilter": {
"direction": "TOP",
"numTimeSeries": 30,
"rankingMethod": "METHOD_MEAN"
}
},
"unitOverride": ""
}
}
],
"displayColumnType": false,
"metricVisualization": "BAR"
}
}
},
{
"yPos": 60,
"height": 20,
"width": 48,
"widget": {
"title": "Group by Domains",
"id": "",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR",
"showLegend": false
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"legendTemplate": "",
"measures": [],
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"outputFullDuration": false,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"QueryName\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
}
]
}
}
2. Crie o painel personalizado. Execute os seguintes comandos gcloud no Cloud Shell.
gcloud monitoring dashboards create --config-from-file=dashboard.json
7. Gerar consultas DNS maliciosas emuladas
Nesta seção, você realizará as seguintes tarefas:
- Conecte-se por SSH às VMs.
- Instale o Git nas VMs.
- Clone o repositório do simulador de detecção de ameaças da Infoblox.
- Execute o script e analise a saída gerada.
Valide a configuração gerando consultas DNS maliciosas simuladas das suas VMs.
1. Use SSH para acessar vm-a-use4. Execute os seguintes comandos gcloud no Cloud Shell.
gcloud compute ssh vm-a-use4 --zone=us-east4-c
2. Instale o Git na VM.
sudo apt-get install git -y
3. Clone o repositório do simulador de detecção de ameaças da Infoblox.
git clone https://github.com/infobloxopen/ib-threat-detection-simulator
4. Mude o diretório para o diretório do simulador.
cd ib-threat-detection-simulator/threat_detection_simulator/
5. Execute o script e analise a saída gerada.
Torne o script executável.
chmod +x run.sh
Execute o script.
./run.sh info basic
6. Exemplo de saída
A imagem a seguir mostra uma parte da saída do script em uma VM no network-a. Essa saída detalha as taxas de detecção dos diferentes tipos de ameaças de DNS emulados pelo script de teste.

7. Saia da sessão SSH para voltar ao Cloud Shell.
exit
8. Ver o painel personalizado
Ver o painel
1. Digite Painéis no campo de pesquisa na parte de cima do console do Google Cloud e clique em Painéis em "Principais resultados".

2. Pesquise DNS Armor - Custom Dashboard no campo de pesquisa e clique em DNS Armor - Custom Dashboard para abrir o painel.

3. Acesse o painel.

Widgets no painel
Esta seção descreve os vários widgets disponíveis no painel personalizado, oferecendo uma visão geral das funcionalidades e dos dados que eles representam.
- Registros de ameaças:um gráfico de barras empilhadas que mostra os registros de ameaças gerados para todas as redes incluídas em um projeto durante um período especificado.
- Registros de ameaças por região:um gráfico de barras empilhadas que ilustra os registros de ameaças, agrupados por região, em um período definido.
- Agrupar por ameaça:um gráfico de pizza que categoriza os registros de ameaças com base no tipo de ameaça em um determinado período.
- Lista dos principais - ThreatID: uma lista que mostra os 30 principais IDs de ameaças em um período especificado.
- Agrupar por gravidade:um gráfico de pizza que agrupa os registros de ameaças por nível de gravidade em um período definido.
- Lista principal – origem:uma lista que apresenta os 30 principais IDs de instância (VMs de origem) em um período especificado.
- Agrupar por domínios:um gráfico de barras empilhadas que agrupa os registros de ameaças pelos nomes de domínio encontrados nas consultas.
9. Limpeza
Para evitar cobranças futuras, exclua os recursos criados neste codelab. Saia do shell da VM e volte ao Cloud Shell ao executar os comandos de limpeza.
1. Exclua o painel personalizado.
Como o ID do painel é gerado dinamicamente na criação, primeiro você precisa extrair o nome do recurso usando o nome de exibição dele.
DASHBOARD_NAME=$(gcloud monitoring dashboards list --filter="displayName='DNS Armor - Custom Dashboard'" --format='value(name)')
gcloud monitoring dashboards delete $DASHBOARD_NAME --quiet
2. Exclua a métrica com base em registros.
gcloud logging metrics delete dns-armor-log-based-metric --quiet
3. Exclua as VMs.
gcloud compute instances delete vm-a-use4 --zone=us-east4-c --quiet
gcloud compute instances delete vm-a-usc1 --zone=us-central1-a --quiet
4. Exclua as regras de firewall.
gcloud compute firewall-rules delete allow-ssh-iap-a --quiet
5. Exclua os gateways Cloud NAT.
gcloud compute routers nats delete nat-a-use4 --router=router-a-use4 --region=us-east4 --quiet
gcloud compute routers nats delete nat-a-usc1 --router=router-a-usc1 --region=us-central1 --quiet
6. Exclua os Cloud Routers.
gcloud compute routers delete router-a-use4 --region=us-east4 --quiet
gcloud compute routers delete router-a-usc1 --region=us-central1 --quiet
7. Exclua as sub-redes.
gcloud compute networks subnets delete subnet-a-use4 --region=us-east4 --quiet
gcloud compute networks subnets delete subnet-a-usc1 --region=us-central1 --quiet
8. Exclua o detector de ameaças de DNS.
gcloud beta network-security dns-threat-detectors delete my-dns-threat-detector --location=global --quiet
9. Exclua as VPCs.
gcloud compute networks delete network-a --quiet
10. Parabéns
Parabéns! Você configurou, implantou e visualizou os registros de detecção de ameaças do DNS Armor . Você ganhou experiência prática na proteção do seu ambiente do Google Cloud contra ameaças baseadas em DNS e na criação de uma solução de monitoramento personalizada para insights de segurança.
Neste codelab, você:
- Provisionou um ambiente de rede com VPC, sub-redes e máquinas virtuais.
- Configurou a saída da Internet para VMs particulares usando o Cloud NAT.
- Implantamos um detector de ameaças do DNS Armor.
- Simulamos ameaças de DNS e validamos a configuração de detecção de ameaças.
- Criou métricas personalizadas com base em registros de ameaças de DNS.
- Criou um painel personalizado do Cloud Monitoring para visualizar e analisar ameaças de DNS.