Usando a ferramenta Key Usage Reporter (KUR)

A CLI do Key Usage Reporter (KUR) faz a varredura de uma conta IBM Cloud e produz um relatório abrangente sobre quais recursos de nuvem são criptografados por quais chaves KMS. A ferramenta é compatível com Key Protect (kms) e Hyper Protect Crypto Services (hs-crypto). A ferramenta também é capaz de processar arquivos de registro de auditoria de rastreamento de atividades, produzindo resumos em CSV que ajudam a identificar a utilização do KMS.

O KUR é fornecido no estado em que se encontra e com base no melhor esforço. A ferramenta não detecta todos os usos possíveis das chaves, e os resultados não devem ser tratados como autoridade. Alguns serviços, configurações ou casos extremos podem não ser cobertos.

Download da ferramenta

  1. Crie um tíquete de suporte IBM para Key Protect para solicitar acesso às ferramentas de migração do HPCS para Key Protect.

  2. Faça o download do binário da ferramenta fornecido no tíquete de suporte.

  3. Verifique se a soma de verificação SHA-256 do binário baixado corresponde ao valor fornecido no tíquete de suporte. Compare os valores diretamente; eles devem corresponder exatamente.

    Execute o comando apropriado para o seu sistema operacional para obter a soma de verificação SHA-256 e compare com o valor fornecido no tíquete de suporte:

    macOS:

    shasum -a 256 <kur-binary>
    

    Exemplo:

    shasum -a 256 kur-darwin-arm64-1.0.0
    

    Linux:

    sha256sum <kur-binary>
    

    Exemplo:

    sha256sum kur-linux-amd64-1.0.0
    

    Windows (Prompt de Comando):

    certutil -hashfile <kur-binary> SHA256
    

    Exemplo:

    certutil -hashfile kur-windows-amd64-1.0.0.exe SHA256
    

    Windows ( PowerShell ):

    Get-FileHash <kur-binary> -Algorithm SHA256
    

    Exemplo:

    Get-FileHash kur-windows-amd64-1.0.0.exe -Algorithm SHA256
    
  4. Torne o binário executável ( macOS/Linux ):

    chmod +x <kur-binary>
    

Pré-requisitos

Antes de executar a ferramenta, certifique-se de que os seguintes requisitos sejam atendidos:

  • IBM Cloud A CLI (ibmcloud) é instalada seguindo as instruções em Getting started with the IBM Cloud CLI.

  • Os seguintes sites IBM Cloud Plug-ins da CLI estão instalados e atualizados:

    • container-service
    • vpc-infrastructure
    • event-notifications

    Instale qualquer plug-in ausente com:

    ibmcloud plugin install <plugin-name>
    
  • Você está conectado à CLI do IBM Cloud e tem como alvo a conta que deseja verificar:

    ibmcloud login
    
  • Seu token IAM é válido e tem pelo menos 3 minutos de validade restante. Em caso de dúvida, atualize-o:

    ibmcloud login
    
  • A identidade que executa a ferramenta precisa de acesso somente de leitura em toda a conta. Atribua a função de acesso à plataforma Viewer e a função de acesso ao serviço Reader em toda a conta à identidade (usuário ou chave de API) com a qual você se autentica.

    Esse acesso somente para leitura, do tipo “auditor”, corresponde ao mesmo nível utilizado para auditar uma conta. Ele abrange tudo o que a ferramenta verifica, incluindo:

    • Key Protect e instâncias e chaves do Hyper Protect Crypto Services
    • Serviços em nuvem que podem ser criptografados por essas chaves (por exemplo, Cloud Object Storage, infraestrutura VPC, Kubernetes clusters, Event Notifications e App Configuration )

    O KUR realiza apenas operações de leitura e não cria, modifica nem exclui nenhum recurso.

Os requisitos de acesso descritos nesta seção se aplicam à verificação da conta. O subcomando process-at opera inteiramente com um arquivo local de rastreamento de atividades e não requer acesso ao IBM Cloud.

Executar a ferramenta

Os exemplos a seguir mostram como executar a ferramenta Key Usage Reporter com diferentes opções e configurações.

Uso básico: procura por chaves HPCS (padrão)

Use o comando a seguir para fazer uma varredura na conta IBM Cloud atualmente direcionada em busca de todas as instâncias hs-crypto, suas chaves e quaisquer recursos de nuvem criptografados por essas chaves.

./<kur-binary>

Procure as teclas Key Protect

Para fazer a varredura de instâncias Key Protect em vez de HPCS, use o sinalizador -service kms.

./<kur-binary> --service kms

Verificação de Key Protect Somente instâncias dedicadas

Você pode filtrar a varredura para incluir apenas as instâncias dedicadas do Key Protect.

./<kur-binary> --service kms --service-type dedicated

Verificar somente instâncias multilocatário em Key Protect

Você pode filtrar a varredura para incluir apenas instâncias do Key Protect Standard (multilocatário).

./<kur-binary> --service kms --service-type multi-tenant

Ativar o registro de depuração

Ative a saída de depuração detalhada para solucionar problemas ou entender o comportamento da ferramenta.

./<kur-binary> --service kms --debug

Especificar um caminho de arquivo de saída personalizado

Por padrão, a ferramenta gera um arquivo de saída com um nome gerado automaticamente, mas você pode especificar um caminho personalizado.

./<kur-binary> --service kms --output my-report.json

Sinalizadores da CLI

A tabela a seguir lista todos os sinalizadores de linha de comando disponíveis para a ferramenta Key Usage Reporter.

Tabela 1. Sinalizadores da CLI para a ferramenta Key Usage Reporter
Sinalize Padrão Descrição
--service hs-crypto Serviço KMS a ser verificado: hs-crypto ou kms
--service-type (nenhum) Filtre as instâncias do KMS por tipo: dedicated ou multi-tenant. Válido somente com -service kms.
--skip-private-calls false Ignorar chamadas REST para pontos de extremidade privados. As instâncias sem um endpoint público são ignoradas.
--debug false Ativar o modo de depuração: mostrar mensagens de registro detalhadas no stderr
--output Nomeação automática Caminho do arquivo de saída. O padrão é encryption-key-usage-report-<service>-<account-name>.json

Os sinalizadores podem usar traço simples (-flag) ou traço duplo (--flag).

Arquivos de saída

A ferramenta produz dois arquivos de saída:

Relatório JSON
O arquivo de saída principal (por exemplo, encryption-key-usage-report-kms-kp-stage.json), que contém o relatório hierárquico completo das instâncias, chaves e usos de recursos do KMS.
Arquivo de log
Um arquivo de registro complementar com o mesmo nome base e um sufixo -log.txt (por exemplo, encryption-key-usage-report-kms-kp-stage-log.txt), contendo todas as mensagens de registro da execução.

Entendendo o resultado

O relatório JSON tem a seguinte estrutura de nível superior:

{
  "metadata": { ... },
  "result": {
    "kms_instances": [ ... ],
    "crns": [ ... ],
    "unknowns": [ ... ]
  }
}

Metadados

Os metadados incluem o contexto de execução, como a versão da ferramenta, o serviço KMS de destino, o ponto de extremidade da API IBM Cloud, o nome da conta, o ID da conta e o usuário que executou a varredura.

Instâncias KMS

Uma entrada por instância de KMS ou HPCS encontrada na conta. As instâncias com uso de chave detectado são listadas primeiro e, em seguida, as instâncias sem uso detectado. Cada instância contém:

Metadados da Instância
Nome, CRN, estado, rede permitida, pontos de extremidade públicos e privados, tipo (para Key Protect: multi-tenant ou dedicated)
found_by_kms_instance_listing
true se a instância foi encontrada ao listar as instâncias do KMS na conta.
found_by_resource_scan
true se a instância com chaves detectadas durante a varredura de recursos.
instance_stats
Contagens principais por estado:
  • active_crk_count, suspended_crk_count, deactivated_crk_count, destroyed_crk_count
  • active_standard_key_count, destroyed_standard_key_count.
keys[]
Inventário completo de chaves da API Key Protect. Cada chave inclui:
  • type: crk (Chave raiz do cliente) ou standard_key.
  • state_name: pre-activation, active, suspended, deactivated, ou destroyed.
  • name nome da chave.
  • id: chave UUID.
  • has_migration_intent se a chave tem uma intenção de migração definida.
  • migration_intent_target_crk: CRK CRN de destino (presente somente quando has_migration_intent é true).
  • found_by_kms_key_listing ou found_by_resource_scan: como a chave foi descoberta.
  • associations[]: recursos de nuvem registrados em relação à chave (a partir da API de registros Key Protect ). Cada entrada mostra o endereço resource_crn e se ele tem o prevent_key_deletion ativado. Omitido quando uma chave não tem registros.
  • service_usage mapa do nome do serviço para recursos criptografados detectados pela varredura de recursos em toda a conta. Presente somente para chaves encontradas pela varredura de recursos.

CRNs

Os recursos que fazem referência a identificadores de criptografia que correspondem a um padrão CRN, mas não a um CRN de chave KMS ou HPCS, são capturados aqui para garantir que nada seja descartado silenciosamente.

Desconhecidos

Os recursos que fazem referência a identificadores de criptografia que não puderam ser analisados como CRNs estão listados aqui.

Exemplo de entrada de instância

O exemplo a seguir mostra a estrutura de uma entrada de instância do KMS no relatório JSON.

{
  "name": "my-kp-instance",
  "type": "multi-tenant",
  "crn": "crn:v1:bluemix:public:kms:us-south:a/00000000000000000000000000000000:deadbeef-0000-0000-0000-1234567890ab::",
  "state": "active",
  "allowed_network": "public-and-private",
  "public_endpoint": "https://us-south.kms.cloud.ibm.com",
  "private_endpoint": "https://private.us-south.kms.cloud.ibm.com",
  "found_by_kms_instance_listing": true,
  "found_by_resource_scan": true,
  "instance_stats": {
    "active_crk_count": 5,
    "suspended_crk_count": 0,
    "deactivated_crk_count": 1,
    "destroyed_crk_count": 2,
    "active_standard_key_count": 3,
    "destroyed_standard_key_count": 1
  },
  "keys": [
    {
      "type": "crk",
      "state_name": "active",
      "name": "my-root-key",
      "id": "abc12345-6789-0abc-def0-1234567890ab",
      "has_migration_intent": false,
      "found_by_kms_key_listing": true,
      "found_by_resource_scan": true,
      "associations": [
        {
          "resource_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/00000000000000000000000000000000:deadbeef-0000-0000-0000-1234567890ab:bucket:my-encrypted-bucket",
          "prevent_key_deletion": true
        }
      ],
      "service_usage": {
        "cloud-object-storage (Cloud Object Storage)": [
          {
            "encrypted_resource": "crn:v1:bluemix:public:cloud-object-storage:global:a/00000000000000000000000000000000:deadbeef-0000-0000-0000-1234567890ab:bucket:my-encrypted-bucket"
          }
        ]
      }
    },
    {
      "type": "standard_key",
      "state_name": "active",
      "name": "my-standard-key",
      "id": "def45678-9012-3456-7890-abcdef012345",
      "has_migration_intent": false,
      "found_by_kms_key_listing": true,
      "found_by_resource_scan": false
    }
  ]
}

Processamento de registros de rastreamento de atividades

Além de gerar o relatório principal, a ferramenta inclui um subcomando para processar os registros de auditoria de rastreamento de atividades.

Uso

Use o subcomando process-at para processar arquivos de registro de rastreamento de atividades.

./<kur-binary> process-at <input.tsv>

Função

Obtém um arquivo TSV que é exportado da consulta do arquivo de roteamento de eventos de rastreamento de atividades IBM Cloud Logs, extrai os eventos JSON da coluna text e filtra os eventos relacionados a KMS e HPCS (ações kms.* e hs-crypto.* ). Em seguida, ele produz quatro arquivos de saída:

<base>_events.json
Todos os eventos extraídos como uma matriz JSON formatada.
<base>_events.csv
Plano CSV com uma linha por evento, contendo: serviceName, region, accountId, instanceId, keyId, action, outcome, reasonType, reasonCode, initiatorId, initiatorName, authId, requestInstanceId, eventTime, correlationId, agent.
<base>_events_summary.csv
Resumo agrupado com contagens de eventos, que são agrupados por serviço, região, conta, instância, chave, ação, resultado, motivo e iniciador.
<base>_events_summary_by_action.csv
Resumo agrupado com contagens de eventos, que são agrupados por serviço, região, conta, instância, chave, ação e iniciador (sem detalhamento de resultado ou motivo).

Em que <base> é derivado do nome do arquivo de entrada (eliminando _logs.tsv ou .tsv).

Exemplo

O exemplo a seguir mostra como processar um arquivo de registro de rastreamento de atividades e os arquivos de saída que são gerados.

./<kur-binary> process-at hpcs-at-data-1-day_logs.tsv

O comando produz os seguintes arquivos de saída:

  • hpcs-at-data-1-day_events.json
  • hpcs-at-data-1-day_events.csv
  • hpcs-at-data-1-day_events_summary.csv
  • hpcs-at-data-1-day_events_summary_by_action.csv

Esse recurso é útil para analisar os principais padrões de atividade do KMS, identificar quais serviços e usuários estão realizando operações importantes e investigar eventos relacionados à migração, como ack-migrate.

Resolução de problemas

As informações a seguir o ajudam a resolver problemas comuns ao executar a ferramenta Key Usage Reporter.

IBM Cloud CLI não instalada

IBM Cloud CLI is not installed. Please install it first.
Visit: https://cloud.ibm.com/docs/cli?topic=cli-getting-started

Instale a CLI do IBM Cloud seguindo a documentação Getting started with the IBM Cloud CLI.

Plug-ins de CLI ausentes

Se os plug-ins necessários da CLI não estiverem instalados, você verá uma mensagem de erro que lista os plug-ins ausentes.

missing required IBM Cloud CLI plugins: [container-service vpc-infrastructure]

Instale os plug-ins ausentes:

ibmcloud plugin install container-service
ibmcloud plugin install vpc-infrastructure
ibmcloud plugin install event-notifications

Plug-ins de CLI desatualizados

Se os plug-ins da CLI estiverem desatualizados, você verá uma mensagem de aviso que lista quais plug-ins precisam ser atualizados.

the following IBM Cloud CLI plugins are outdated: [container-service]

Atualize o plug-in:

ibmcloud plugin update container-service

Não Foi Efetuado Login

Se você não estiver conectado a IBM Cloud, a ferramenta exibirá uma mensagem de erro.

not logged in to IBM Cloud. Please login first

Efetue login no IBM Cloud:

ibmcloud login

Token expirado ou prestes a expirar

A ferramenta requer um token IAM válido com pelo menos 3 minutos de validade restante.

Se o seu token IAM tiver menos de 3 minutos de validade restante, a ferramenta o rejeitará. Atualize sua sessão:

ibmcloud login

Instâncias somente privadas

Algumas instâncias do KMS podem ser configuradas para permitir apenas o acesso à rede privada. Se uma instância do KMS permitir apenas acesso à rede privada e você não estiver conectado à rede IBM Cloud Private, a ferramenta não poderá obter estatísticas ou chaves para essa instância. Use --skip-private-calls para ignorar essas instâncias em vez de fazer com que a ferramenta falhe nelas:

./<kur-binary> --service kms --skip-private-calls

mais de 100 instâncias de KMS

A API de listagem de recursos do site IBM Cloud tem um limite para o número de instâncias que podem ser retornadas.

[WARNING] 100 or more KMS instances, only the first 100 instances will be processed.

A API de listagem de recursos IBM Cloud retorna um máximo de 100 instâncias. Se a conta tiver mais de 100 instâncias do KMS, somente as 100 primeiras serão incluídas no relatório. Esse comportamento é uma limitação conhecida.

Tipo de serviço inválido com hs-crypto

O sinalizador --service-type é válido somente ao verificar as instâncias de Key Protect.

error: --service-type can only be used with --service kms

O sinalizador --service-type (para filtrar por dedicated ou multi-tenant) aplica-se somente a Key Protect (--service kms). Ele não se aplica a instâncias HPCS.