Utilisation de l'outil Key Usage Reporter (KUR)

Le Key Usage Reporter (KUR) CLI analyse un compte IBM Cloud et produit un rapport complet indiquant quelles ressources en nuage sont cryptées par quelles clés KMS. L'outil prend en charge à la fois Key Protect (kms) et Hyper Protect Crypto Services (hs-crypto). L'outil est également capable de traiter les fichiers journaux d'audit de suivi d'activité, produisant des résumés CSV qui aident à identifier l'utilisation de KMS.

KUR est fourni en l'état et dans la mesure du possible. L'outil ne détecte pas toutes les utilisations possibles des clés et les résultats ne doivent pas être considérés comme faisant autorité. Certains services, configurations ou cas particuliers peuvent ne pas être couverts.

Télécharger l'outil

  1. Créez un ticket de support IBM pour Key Protect afin de demander l'accès à l'outil de migration HPCS vers Key Protect.

  2. Téléchargez l'outil binaire fourni dans le ticket d'assistance.

  3. Vérifiez que la somme de contrôle SHA-256 du fichier binaire téléchargé correspond à la valeur indiquée dans le ticket d'assistance. Comparez les valeurs directement; elles doivent correspondre exactement.

    Exécutez la commande appropriée pour votre système d'exploitation afin d'obtenir la somme de contrôle SHA-256 et comparez-la à la valeur fournie dans le ticket d'assistance :

    macOS:

    shasum -a 256 <kur-binary>
    

    Exemple :

    shasum -a 256 kur-darwin-arm64-1.0.0
    

    Linux:

    sha256sum <kur-binary>
    

    Exemple :

    sha256sum kur-linux-amd64-1.0.0
    

    Windows (Invite de commandes):

    certutil -hashfile <kur-binary> SHA256
    

    Exemple :

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

    Windows ( PowerShell ):

    Get-FileHash <kur-binary> -Algorithm SHA256
    

    Exemple :

    Get-FileHash kur-windows-amd64-1.0.0.exe -Algorithm SHA256
    
  4. Rendre le binaire exécutable ( macOS/Linux ):

    chmod +x <kur-binary>
    

Prérequis

Avant d'exécuter l'outil, assurez-vous que les conditions suivantes sont remplies :

  • IBM Cloud CLI (ibmcloud) est installé en suivant les instructions de la section Getting started with the IBM Cloud CLI.

  • Les plugins IBM Cloud CLI suivants sont installés et mis à jour :

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

    Installez tout plugin manquant avec :

    ibmcloud plugin install <plugin-name>
    
  • Vous êtes connecté au CLI de IBM Cloud et vous ciblez le compte que vous voulez scanner :

    ibmcloud login
    
  • Votre jeton IAM est valide et il lui reste au moins 3 minutes de validité. En cas de doute, rafraîchissez-le :

    ibmcloud login
    
  • L'identité qui exécute l'outil doit disposer d'un accès en lecture seule à l'ensemble du compte. Attribuez le rôle d'accès à la plateforme Viewer et le rôle d'accès au service Reader à l'échelle du compte à l'identité (utilisateur ou clé API) que vous utilisez pour vous authentifier.

    Cet accès en lecture seule, de type « auditeur », correspond au même niveau que celui utilisé pour l'audit d'un compte. Il couvre tous les éléments inspectés par l'outil, notamment :

    • Key Protect ainsi que les instances et les clés d' Hyper Protect Crypto Services
    • Services cloud pouvant être chiffrés à l'aide de ces clés (par exemple, Cloud Object Storage, infrastructure VPC, Kubernetes clusters, Event Notifications et App Configuration )

    KUR effectue uniquement des opérations de lecture et ne crée, ne modifie ni ne supprime aucune ressource.

Les conditions d'accès décrites dans cette section s'appliquent à l'analyse du compte. La sous-commande « process-at » fonctionne entièrement à partir d'un fichier local de suivi de l'activité et ne nécessite aucun accès à IBM Cloud.

Exécution de l'outil

Les exemples suivants montrent comment exécuter l'outil Key Usage Reporter avec différentes options et configurations.

Utilisation de base : recherche de clés HPCS (par défaut)

Utilisez la commande suivante pour rechercher dans le compte IBM Cloud actuellement ciblé toutes les instances hs-crypto, leurs clés et toutes les ressources cloud cryptées par ces clés.

./<kur-binary>

Recherche des clés Key Protect

Pour rechercher les instances Key Protect au lieu de HPCS, utilisez l'option -service kms.

./<kur-binary> --service kms

Recherche de Key Protect Instances dédiées uniquement

Vous pouvez filtrer l'analyse pour n'inclure que les instances Key Protect Dedicated.

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

Recherche d'instances multi-locataires sur Key Protect uniquement

Vous pouvez filtrer l'analyse pour n'inclure que les instances Key Protect Standard (multi-locataires).

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

Activer la journalisation de débogage

Activer la sortie de débogage détaillée pour résoudre les problèmes ou comprendre le comportement de l'outil.

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

Spécifier un chemin d'accès personnalisé au fichier de sortie

Par défaut, l'outil génère un fichier de sortie dont le nom est généré automatiquement, mais vous pouvez spécifier un chemin d'accès personnalisé.

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

Drapeaux CLI

Le tableau suivant répertorie tous les indicateurs de ligne de commande disponibles pour l'outil Key Usage Reporter.

Tableau 1. Indicateurs CLI pour l'outil Key Usage Reporter
Indicateur Valeur par défaut Description
--service hs-crypto Service KMS à analyser : hs-crypto ou kms
--service-type (Néant) Filtrer les instances KMS par type : dedicated ou multi-tenant. Valable uniquement avec -service kms.
--skip-private-calls false Sauter les appels REST aux points d'extrémité privés. Les instances qui n'ont pas de point d'arrivée public sont ignorées.
--debug false Activer le mode débogage : afficher des messages détaillés sur stderr
--output Auto-nommé Chemin du fichier de sortie. La valeur par défaut est encryption-key-usage-report-<service>-<account-name>.json

Les drapeaux peuvent utiliser un simple tiret (-flag) ou un double tiret (--flag).

Fichiers

de sortie

L'outil produit deux fichiers de sortie :

Rapport JSON
Le fichier de sortie principal (par exemple, encryption-key-usage-report-kms-kp-stage.json), qui contient le rapport hiérarchique complet des instances KMS, des clés et de l'utilisation des ressources.
Fichier journal
Un fichier journal complémentaire portant le même nom de base et un suffixe -log.txt (par exemple, encryption-key-usage-report-kms-kp-stage-log.txt), contenant tous les messages du journal de l'exécution.

Comprendre les résultats

Le rapport JSON a la structure de premier niveau suivante :

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

Métadonnées

Les métadonnées comprennent le contexte d'exécution tel que la version de l'outil, le service KMS cible, le point de terminaison de l'API IBM Cloud, le nom du compte, l'ID du compte et l'utilisateur qui a exécuté l'analyse.

Instances KMS

Une entrée par instance KMS ou HPCS trouvée dans le compte. Les instances dont l'utilisation de la clé a été détectée sont énumérées en premier, puis celles dont l'utilisation n'a pas été détectée. Chaque instance contient

Métadonnées d'instance
Nom, CRN, état, réseau autorisé, points d'extrémité publics et privés, type (pour Key Protect: multi-tenant ou dedicated)
found_by_kms_instance_listing
true si l'instance a été trouvée en listant les instances KMS dans le compte.
found_by_resource_scan
true si l'instance dont les clés ont été détectées lors de l'analyse des ressources.
instance_stats
Chiffres clés par État :
  • active_crk_count, suspended_crk_count, deactivated_crk_count, destroyed_crk_count
  • active_standard_key_count, destroyed_standard_key_count.
keys[]
Inventaire complet des clés à partir de l'API Key Protect. Chaque clé comprend
  • type: crk (clé racine du client) ou standard_key.
  • state_name: pre-activation, active, suspended, deactivated, ou destroyed.
  • name: nom de la clé.
  • id: clé UUID.
  • has_migration_intent: si la clé a une intention de migration définie.
  • migration_intent_target_crk cRK CRN (présent uniquement lorsque has_migration_intent est true).
  • found_by_kms_key_listing ou found_by_resource_scan: comment la clé a été découverte.
  • associations[] ressources en nuage enregistrées par rapport à la clé (à partir de l'API d'enregistrement de Key Protect ). Chaque entrée indique le site resource_crn et précise si le site prevent_key_deletion est activé. Omise lorsqu'une clé n'a pas d'enregistrement.
  • service_usage le nom du service : carte du nom du service aux ressources cryptées détectées par l'analyse des ressources à l'échelle d'un compte. Présente uniquement pour les clés trouvées par l'analyse des ressources.

Noms de ressource de cloud

Les ressources qui font référence à des identifiants de chiffrement correspondant à un modèle CRN mais pas à un CRN de clé KMS ou HPCS sont capturées ici pour s'assurer que rien n'est abandonné silencieusement.

Inconnus

Les ressources qui font référence à des identifiants de chiffrement qui n'ont pas pu être analysés comme des CRN sont répertoriées ici.

Exemple d'entrée d'instance

L'exemple suivant montre la structure d'une entrée d'instance KMS dans le rapport 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
    }
  ]
}

Traitement des journaux de suivi des activités

En plus de générer le rapport principal, l'outil comprend une sous-commande pour traiter les journaux d'audit de suivi des activités.

Utilisation

La sous-commande process-at permet de traiter les fichiers journaux de suivi des activités.

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

Action

Prend un fichier TSV qui est exporté de la requête d'archive d'acheminement des événements de suivi d'activité IBM Cloud Logs, extrait les événements JSON de la colonne text, et filtre les événements liés à KMS et HPCS (actions kms.* et hs-crypto.* ). Il produit ensuite quatre fichiers de sortie :

<base>_events.json
Tous les événements sont extraits sous la forme d'un tableau JSON formaté.
<base>_events.csv
CSV plat avec une ligne par événement, contenant : serviceName, région, accountId, instanceId, keyId, action, résultat, reasonType, reasonCode, initiatorId, initiatorName, authId, requestInstanceId, eventTime, correlationId, agent.
<base>_events_summary.csv
Résumé groupé avec le nombre d'événements, qui sont groupés par service, région, compte, instance, clé, action, résultat, raison et initiateur.
<base>_events_summary_by_action.csv
Résumé groupé avec le nombre d'événements, qui sont groupés par service, région, compte, instance, clé, action et initiateur (sans ventilation du résultat ou de la raison).

<base> est dérivé du nom du fichier d'entrée (en supprimant _logs.tsv ou .tsv).

Exemple

L'exemple suivant montre comment traiter un fichier journal de suivi des activités et les fichiers de sortie générés.

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

La commande produit les fichiers de sortie suivants :

  • 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

Cette fonction est utile pour analyser les schémas d'activité des clés KMS, identifier les services et les utilisateurs qui effectuent des opérations clés et enquêter sur les événements liés à la migration tels que ack-migrate.

Traitement des incidents

Les informations suivantes vous aideront à résoudre les problèmes les plus courants lors de l'exécution de l'outil Key Usage Reporter.

IBM Cloud CLI non installé

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

Installez le CLI IBM Cloud en suivant la documentation Getting started with the IBM Cloud CLI.

Plugins CLI manquants

Si les plugins CLI requis ne sont pas installés, un message d'erreur s'affiche avec la liste des plugins manquants.

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

Installer les plugins manquants :

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

Plugins CLI obsolètes

Si vos plugins CLI sont obsolètes, un message d'avertissement vous indique quels plugins doivent être mis à jour.

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

Mettre à jour le plugin :

ibmcloud plugin update container-service

Non connecté

Si vous n'êtes pas connecté à IBM Cloud, l'outil affiche un message d'erreur.

not logged in to IBM Cloud. Please login first

Connectez-vous à IBM Cloud :

ibmcloud login

Token expiré ou sur le point d'expirer

L'outil nécessite un jeton IAM valide dont la durée de validité restante est d'au moins 3 minutes.

Si la durée de validité restante de votre jeton IAM est inférieure à 3 minutes, l'outil le rejette. Actualisez votre session :

ibmcloud login

Instances privées

Certaines instances de KMS peuvent être configurées pour n'autoriser que l'accès au réseau privé. Si une instance de KMS n'autorise que l'accès au réseau privé et que vous n'êtes pas connecté au réseau IBM Cloud Private, l'outil ne peut pas récupérer les statistiques ou les clés de cette instance. Utilisez --skip-private-calls pour ignorer ces cas plutôt que de voir l'outil tomber en panne à cause d'eux :

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

plus de 100 instances KMS

L'API de listage des ressources IBM Cloud a une limite sur le nombre d'instances qui peuvent être renvoyées.

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

L'API de listage des ressources IBM Cloud renvoie un maximum de 100 instances. Si le compte possède plus de 100 instances KMS, seules les 100 premières sont incluses dans le rapport. Ce comportement constitue une limitation connue.

Type de service non valide avec hs-crypto

L'indicateur --service-type n'est valable que pour l'analyse des instances Key Protect.

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

L'indicateur --service-type (pour filtrer par dedicated ou multi-tenant) ne s'applique qu'à Key Protect (--service kms). Il ne s'applique pas aux instances HPCS.